欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
我對一個四驅(qū)四路循跡小車的arduino源程序的詳細(xì)注釋
[打印本頁]
作者:
zzh啊
時間:
2018-8-17 15:13
標(biāo)題:
我對一個四驅(qū)四路循跡小車的arduino源程序的詳細(xì)注釋
這是我對搜集到的資料進(jìn)行的分析,和我自己的想法在里面,歡迎大家討論指正
arduino單片機(jī)源程序如下:
#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; //舵機(jī) 應(yīng)該和循跡沒什么關(guān)系
int inputPin=7; // 定義超聲波信號接收接口
int outputPin=8; // 定義超聲波信號發(fā)出接口
void setup() {
// put your setup code here, to run once:
//串口初始化
Serial.begin(9600);
//舵機(jī)引腳初始化
myServo.attach(9);
//測速引腳初始化 非必須作用
我的理解:Mode為OUTPUT的都是需要單片機(jī)自己輸出信號控制的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亮度控制、電機(jī)轉(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,所有電機(jī)輸出為低電平
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
作者:
很愛美
時間:
2019-3-23 21:46
Arduino的16 17口在哪
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1