|
這是我對搜集到的資料進行的分析,和我自己的想法在里面,歡迎大家討論指正
arduino單片機源程序如下:
- #include <Servo.h>
- 函數(shù)調(diào)用說明:調(diào)用servo.h里的庫函數(shù)
- 類似stdio.h是標(biāo)準(zhǔn)輸入輸出,常用的 printf scanf 這些輸入輸出函數(shù) 以及fopen fclose一系列的文件操作函數(shù)都是在這個頭文件里面的,所以這個最常見
- #define STOP 0
- #define FORWARD 1
- #define BACKWARD 2
- #define TURNLEFT 3
- #define TURNRIGHT 4
- int leftMotor1 = 16; 定義16引腳為“l(fā)eftmotor”
- int leftMotor2 = 17;
- int rightMotor1 = 18;
- int rightMotor2 = 19;
- int trac1 = 10; //從車頭方向的最右邊開始排序 (傳感器)
- int trac2 = 11;
- int trac3 = 12;
- int trac4 = 13;
- int leftPWM = 5; 不是很懂
- int rightPWM = 6;
- Servo myServo; //舵機 應(yīng)該和循跡沒什么關(guān)系
- int inputPin=7; // 定義超聲波信號接收接口
- int outputPin=8; // 定義超聲波信號發(fā)出接口
- void setup() {
- // put your setup code here, to run once:
- //串口初始化
- Serial.begin(9600);
- //舵機引腳初始化
- myServo.attach(9);
- //測速引腳初始化 非必須作用
- 我的理解:Mode為OUTPUT的都是需要單片機自己輸出信號控制的pin引腳,INPUT的都是類似于傳感器收集信息的
- pinMode(leftMotor1, OUTPUT);
- 配置引腳為輸出或輸出模式,它是一個無返回值函數(shù),函數(shù)有兩個參數(shù)pin和mode,pin參數(shù)表示所要配置的引腳,mode參數(shù)表示設(shè)置的模式—INPUT(輸入)或OUTPUT(輸出)。
- pinMode(leftMotor2, OUTPUT);
- pinMode(rightMotor1, OUTPUT);
- pinMode(rightMotor2, OUTPUT);
- pinMode(leftPWM, OUTPUT);
- pinMode(rightPWM, OUTPUT);
- //尋跡模塊D0引腳初始化
- pinMode(trac1, INPUT);
- pinMode(trac2, INPUT);
- pinMode(trac3, INPUT);
- pinMode(trac4, INPUT);
- }
- void loop()
- {
- // put your main code here, to run repeatedly:
- tracing();
- 是一個函數(shù),在下面有對這個函數(shù)的定義
- }
- void motorRun(int cmd,int value)
- 應(yīng)該是在定義一個函數(shù)motorRun()
- {
- analogWrite(leftPWM, value);
- // 設(shè)置P WM輸出,即設(shè)置速度 analogWrite(pin, value) 通過PWM的方式在引腳上輸出一個模擬量,較多的應(yīng)用在LED亮度控制、電機轉(zhuǎn)速控制等方面。該函數(shù)支持以下引腳:3、5、6、9、10、11。在Arduino控制板上引腳號旁邊標(biāo)注~的就是可用作PWM的引腳,analogWrite函數(shù)為無返回值函數(shù),有兩個參數(shù)pin和value,參數(shù)pin表示所要設(shè)置的引腳,只能選擇函數(shù)支持的引腳;參數(shù)value表示PWM輸出的占空比,范圍在0~255的區(qū)間,對應(yīng)的占空比為0%~100%
- analogWrite(rightPWM, value);
- switch(cmd)
- {
- 判斷cmd的狀態(tài):
- 如果cmd==FOTWARD,輸出“FORWARD/r/n”的狀態(tài),為LEFTMotor1設(shè)置為高電平,為leftMotor2設(shè)置為低電平,為RightMotor1設(shè)置為高電平,為RightMotor2設(shè)置為低電平
- case FORWARD:
- Serial.println("FORWARD"); //輸出狀態(tài)
- Arduino 的輸出基本就用兩個函數(shù) print 和 println,區(qū)別在于后者比前者多了回車換行,Serial.println(data)
- 從串行端口輸出數(shù)據(jù),跟隨一個回車('r')和一個換行符('n')。這個函數(shù)所取得的值與 Serial.print()一樣。
- digitalWrite(leftMotor1, HIGH);
- 其作用為設(shè)置引腳的輸出電壓為高\低電平。該函數(shù)無返回值,有兩個參數(shù)pin和value,pin參數(shù)表示所要設(shè)置的引腳,value參數(shù)表示輸出的電壓,HIGH為高電平,LOW為低電平。
- 在使用digitalWrite(pin, value)函數(shù)之前要將引腳設(shè)置為OUTPUT模式。
- 例:pinMode(x, OUTPUT);
- 其中x為引腳編號。pinMode函數(shù)用于設(shè)置引腳模式。
- digitalWrite(leftMotor2, LOW);
- digitalWrite(rightMotor1, HIGH);
- digitalWrite(rightMotor2, LOW);
- break;完成以上一系列函數(shù)后結(jié)束這個函數(shù)
- case BACKWARD:
- Serial.println("BACKWARD"); //輸出狀態(tài)
- digitalWrite(leftMotor1, LOW);
- digitalWrite(leftMotor2, HIGH);
- digitalWrite(rightMotor1, LOW);
- digitalWrite(rightMotor2, HIGH);
- break;
- case TURNLEFT:
- Serial.println("TURN LEFT"); //輸出狀態(tài)
- digitalWrite(leftMotor1, HIGH);
- digitalWrite(leftMotor2, LOW);
- digitalWrite(rightMotor1, LOW);
- digitalWrite(rightMotor2, HIGH);
- break;
- case TURNRIGHT:
- Serial.println("TURN RIGHT"); //輸出狀態(tài)
- digitalWrite(leftMotor1, LOW);
- digitalWrite(leftMotor2, HIGH);
- digitalWrite(rightMotor1, HIGH);
- digitalWrite(rightMotor2, LOW);
- break;
- default:
- 如果以上情況都不是,輸出STOP,所有電機輸出為低電平
- Serial.println("STOP"); //輸出狀態(tài)
- digitalWrite(leftMotor1, LOW);
- digitalWrite(leftMotor2, LOW);
- digitalWrite(rightMotor1, LOW);
- digitalWrite(rightMotor2, LOW);
- }
- }
- void tracing() tracing()函數(shù)定義:上面void loop里面只有tracing這一個函數(shù),arduino標(biāo)準(zhǔn)程序必須包含setup函數(shù)和loop函數(shù),loop函數(shù)其實是一個循環(huán),因為這個程序很簡單沒循環(huán)做的事情,所以循環(huán)函數(shù)為空,但必須要保留,這是arduino的語法規(guī)范。
- {
- int data[4];
- 定義一個數(shù)組data[]包含四個數(shù)據(jù),讀取來自10.11.12.13引腳的信號存儲到這個數(shù)組中,而10.11.12.13引腳連接的就是四個傳感器,因此這個數(shù)組的功能就是記錄四個傳感器的信號,由下面的程序可以知道,通過對這幾個傳感器信號的判斷,并根據(jù)這幾個不同的情況作出不同的反應(yīng)
- data[0] = digitalRead(10);
- data[1] = digitalRead(11);
- data[2] = digitalRead(12);
- data[3] = digitalRead(13);
- if(!data[0] && !data[1] && !data[2] && !data[3]) //左右都沒有檢測到黑線
- {
- motorRun(FORWARD, 200);
- }
- if(data[0] || data[1]) //右邊檢測到黑線
- {
- motorRun(TURNRIGHT, 150);
- }
- if(data[2] || data[3]) //左邊檢測到黑線
- {
- motorRun(TURNLEFT, 150);
- }
- if(data[0] && data[3]) //左右都檢測到黑線是停止
- {
- motorRun(STOP, 0);
- while(1);
- }
- Serial.print(data[0]);
- Serial.print("---");
- Serial.print(data[1]);
- Serial.print("---");
- Serial.print(data[2]);
- Serial.print("---");
- Serial.println(data[3]);
- }
復(fù)制代碼
所有資料51hei提供下載:
程序注釋.docx
(25.6 KB, 下載次數(shù): 42)
2018-8-17 15:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|