使用arduino 控制
紅外循跡
可以自己設定參數調節速度
- #define STOP 0
- #define FORWARD 1
- #define BACKWARD 2
- #define TURNLEFT 3
- #define TURNRIGHT 4
- int leftMotor1 = 7;
- int leftMotor2 = 8;
- int rightMotor1 = 9;
- int rightMotor2 = 10;
- const int LeftPin1=A1;
- const int LeftPin2=A2;
- const int RightPin1=A3;
- const int RightPin2=A4;
- int leftPWM = 5; //PWM
- int rightPWM = 6; //PWM
- void setup() {
- //尋跡模塊引腳初始化
- pinMode(LeftPin1,INPUT);
- pinMode(LeftPin2,INPUT);
- pinMode(RightPin1,INPUT);
- pinMode(RightPin2,INPUT);
- pinMode(leftMotor1, OUTPUT);
- pinMode(leftMotor2, OUTPUT);
- pinMode(rightMotor1, OUTPUT);
- pinMode(rightMotor2, OUTPUT);
- pinMode(leftPWM, OUTPUT);
- pinMode(rightPWM, OUTPUT);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- tracing();
- }
- void motorRun(int cmd,int value){
- analogWrite(leftPWM, value); //設置PWM輸出,即設置速度
- analogWrite(rightPWM, value);
- switch(cmd){
- case FORWARD:
- digitalWrite(leftMotor1, HIGH);
- digitalWrite(leftMotor2, LOW);
- digitalWrite(rightMotor1, HIGH);
- digitalWrite(rightMotor2, LOW);
- break;
- case BACKWARD:
- digitalWrite(leftMotor1, LOW);
- digitalWrite(leftMotor2, HIGH);
- digitalWrite(rightMotor1, LOW);
- digitalWrite(rightMotor2, HIGH);
- break;
- case TURNLEFT:
- digitalWrite(leftMotor1, HIGH);
- digitalWrite(leftMotor2, LOW);
- digitalWrite(rightMotor1, LOW);
- digitalWrite(rightMotor2, HIGH);
- break;
- case TURNRIGHT:
- digitalWrite(leftMotor1, LOW);
- digitalWrite(leftMotor2, HIGH);
- digitalWrite(rightMotor1, HIGH);
- digitalWrite(rightMotor2, LOW);
- break;
- default:
- digitalWrite(leftMotor1, LOW);
- digitalWrite(leftMotor2, LOW);
- digitalWrite(rightMotor1, LOW);
- digitalWrite(rightMotor2, LOW);
- }
- }
- void tracing(){
- int data[4];
- data[0] = digitalRead(A4);
- data[1] = digitalRead(A3);
- data[2] = digitalRead(A2);
- data[3] = digitalRead(A1);
- if(!data[0]&&data[1]&&data[2]&&!data[3]){ //中間檢測到黑線
- motorRun(FORWARD, 400);
- }
- if(data[0]&&!data[3]) //右邊檢測到黑線
- {
- motorRun(TURNRIGHT, 150);
- }
- if(!data[0] || data[3]) //左邊檢測到黑線
- {
- motorRun(TURNLEFT, 150);
- }
- if(!data[0] && !data[1] && !data[2] && !data[3]) //左右都沒有檢測到黑線
- {
- motorRun(BACKWARD, 100);
- }
- if(data[0] && data[3]) //左右都檢測到黑線是停止
- {
- motorRun(STOP, 0);
- while(1); //需要根據情況更改
- }
- }
復制代碼
|