极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15173|回复: 6

手自两档避障小车(可蓝牙控制,可防火预警!)---新手求照顾

[复制链接]
发表于 2016-1-15 22:55:35 | 显示全部楼层 |阅读模式
本帖最后由 刘梓靖 于 2016-1-15 22:55 编辑

新手熬夜自制的,望大神们多多指教!谢谢。。(勿喷)
一、材料
1、arduino uno r3 控制板
2、超声波传感器
3、蓝牙模块HC05
4、舵机
5、L298N驱动模块
6、RGB LED指示灯
7、有源蜂鸣器
8、火焰传感器
9、小车底盘
10、12V电源
11、小面包板:1个
12、小车轮胎:2个
13、电阻:10KΩ(1个);220Ω
14、杜邦线:若干
二、原理
避障主要的是通过超声波测量前方障碍物到小车的距离,通过arduino控制系统控制电机驱动模块,进而控制电机正反转实现自动避障。
1、超声波测距原理
   这次我们采用超声波测距模,其工作原理是给TRIG端至少10微妙的高电平的信号,模块自动检测是否有信号返回,有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速)/2。
2、电机驱动模块
   电机驱动模块我们使用的是L298N,其逻辑功能为当ENA为高电平时,不够IN1、In2为高还是低电平OUT1、OUT2都是低电平,则不能够驱动,只有当ENA为低电平时IN1、IN2才开始工作。同理ENB也是一样,驱动模块的逻辑关系为IN1=OUT1、IN2=OUT2、IN3=OUT3、IN4=OUT4。
3、蓝牙模块
   此次实验我们主要采用HC-05蓝牙模块,自身的TXD接到arduino的RXD端口,自身的RXD接到arduino的TXD端口,用Android配套的串口蓝牙与蓝牙模块配对,通过控制串口蓝牙 发出指令当蓝牙模块受到指令后,执行解码动作,从而控制小车的行动。
4、报警装置
   小车在正常行走当中,执行程序命令小车亮绿灯,当遇到障碍时小车闪蓝灯,同时当小车遇到火焰时,火焰传感器触发,启动蜂鸣器的报警。
三、图片
蓝牙连接图


底盘组装图


实物图(有点乱,自己整理下吧)

四、代码(

①蓝牙控制
char getstr;
int in1=12;
int in2=11;
int in3=10;
int in4=9;
//上面定义了板上的4个控制端,12一组,34一组
int TrigPin = 5;
int EchoPin = 6;
float cm;
int i=0,j=1;//记录测量次数,每5次取一下平均值
float cmsum;//计算5次总值
float cmeve;//计算5次平均值\


void _mRun(int pin1,int pin2)//电机右转,电机到底是右转还是左转取决于电机端的接线和控制脚的顺序
{
  digitalWrite(pin1,HIGH);
  digitalWrite(pin2,LOW);
}
void _mBack(int pin1,int pin2)//同上
{
  digitalWrite(pin1,LOW);
  digitalWrite(pin2,HIGH);
}
void _mStop(int pin1,int pin2)//紧急制动,实际就是将电机两个端短接了
{
  digitalWrite(pin1,HIGH);
  digitalWrite(pin2,HIGH);
  
}

void setup()
{
  Serial.begin(9600);
  pinMode(in1,OUTPUT);
  pinMode(in2,OUTPUT);
  pinMode(in3,OUTPUT);
  pinMode(in4,OUTPUT);
  pinMode(TrigPin, OUTPUT);
  pinMode(EchoPin, INPUT);
  //下面程序开始时让控制端都为高电平,电机保持不动。
  digitalWrite(in1,HIGH);
  digitalWrite(in2,HIGH);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,HIGH);
}

void loop()
{
  int j = 1;
  getstr=Serial.read();
  delayMicroseconds(60);
  digitalWrite(TrigPin, HIGH);
  delayMicroseconds(60);
  digitalWrite(TrigPin, LOW);
  
  cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
  cm = (int(cm * 100.0)) / 100.0; //保留两位小数
  b
  if (i==5){//连接测5次,计算平均值,如果小于10厘米则紧急停车
    i=0;
    cmeve=cmsum/5;
    cmsum=0;
   
    if (cmeve<25 and cmeve>0)
    {
      Serial.println(cmeve);
      _mStop(in1,in2);
      _mStop(in3,in4);
    }
  }
  else {
    i=i+1;
    cmsum=cmsum+cm;
  }


  if(getstr=='f')
  {
    Serial.println("go forward!");
    _mStop(in1,in2);
    _mStop(in3,in4);   
    _mRun(in1,in2);
    _mRun(in3,in4);
  }
  else if(getstr=='b'){
    Serial.println("go back!");
    _mStop(in1,in2);
    _mStop(in3,in4);
   
    _mBack(in1,in2);
    _mBack(in3,in4);
  }
  else if(getstr=='l' and j==1){
    Serial.println("go left!");
    _mStop(in1,in2);
    _mStop(in3,in4);
   
    _mRun2(in1,in2);
   
    j--;
   
  }
  else if(getstr=='r' and j==1){
    Serial.println("go right!");
    _mStop(in1,in2);
    _mStop(in3,in4);
   
    _mRun2(in3,in4);
   
  j--;
  }
  else if(getstr=='s'){
    Serial.println("Stop!");
    _mStop(in1,in2);
    _mStop(in3,in4);   
  }
}


void _mRun2(int pin1,int pin2)//电机右转,电机到底是右转还是左转取决于电机端的接线和控制脚的顺序
{
  digitalWrite(pin1,HIGH);
  digitalWrite(pin2,LOW);
  delay(500);
  digitalWrite(pin1,LOW);
}
void _mBack2(int pin1,int pin2)//同上
{
  digitalWrite(pin1,LOW);
  digitalWrite(pin2,HIGH);
   delay(500);
  digitalWrite(pin1,LOW);
}


②自动避障

//超声波智能避障车程序(ARDUINO)
//    L = 左
//    R = 右
//    F = 前
//    B = 後

#include <Servo.h>
int pinLB=12;     // 定義15腳位
int pinLF=11;     // 定義14腳位

int pinRB=10;    // 定義16腳位
int pinRF=9;    // 定義17腳位

int inputPin = 5;  // 定義超音波信號發射腳位
int outputPin =6;  //  定義超音波信號接收腳位

int Fspeedd = 0;      // 前速
int Rspeedd = 0;      // 右速
int Lspeedd = 0;      // 左速
int directionn = 0;   // 前=8 後=2 左=4 右=6
Servo myservo;        // 設 myservo
int delay_time = 250; // 伺服馬達轉向後的穩定時間

int Fgo = 8;         // 前進
int Rgo = 6;         // 右轉
int Lgo = 4;         // 左轉
int Bgo = 2;         // 倒車

void setup()
{
  Serial.begin(9600);     // 定義馬達輸出腳位
  pinMode(pinLB,OUTPUT); // 腳位 8 (PWM)
  pinMode(pinLF,OUTPUT); // 腳位 9 (PWM)
  pinMode(pinRB,OUTPUT); // 腳位 10 (PWM)
  pinMode(pinRF,OUTPUT); // 腳位 11 (PWM)
  
  pinMode(inputPin, INPUT);    // 定義超音波輸入腳位
  pinMode(outputPin, OUTPUT);  // 定義超音波輸出腳位   

  myservo.attach(7);    // 定義伺服馬達輸出第10腳位(PWM)
}
void advance(int a)     // 前進
    {
     digitalWrite(pinRB,HIGH);  // 使馬達(右後)動作
     digitalWrite(pinRF,LOW);
     digitalWrite(pinLB,HIGH);  // 使馬達(左後)動作
     digitalWrite(pinLF,LOW);
     analogWrite(pinRB,150);
     analogWrite(pinRF,150);
     analogWrite(pinLB,250);
     analogWrite(pinLF,250);
     delay(a * 100);     
    }

void right(int b)        //右轉(單輪)
    {
      digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,HIGH);
     digitalWrite(pinRB,LOW);   //使馬達(右後)動作
     digitalWrite(pinRF,HIGH);
     analogWrite(pinRB,0);
     analogWrite(pinRF,200);
     
     delay(b * 100);
    }
void left(int c)         //左轉(單輪)
    {
     digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,HIGH);
     
     
     digitalWrite(pinLB,LOW);   //使馬達(左後)動作
     digitalWrite(pinLF,HIGH);
     analogWrite(pinLB,0);
     analogWrite(pinLF,200);
     
     delay(c * 100);
    }
void turnR(int d)        //右轉(雙輪)
    {
     digitalWrite(pinRB,LOW);  //使馬達(右後)動作
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,LOW);  //使馬達(左前)動作
     delay(d * 100);
    }
void turnL(int e)        //左轉(雙輪)
    {
     digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,LOW);   //使馬達(右前)動作
     digitalWrite(pinLB,LOW);   //使馬達(左後)動作
     digitalWrite(pinLF,HIGH);
     delay(e * 100);
    }   
void stopp(int f)         //停止
    {
     digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,HIGH);
     delay(f * 100);
    }
void back(int g)          //後退
    {

     digitalWrite(pinRB,LOW);  //使馬達(右後)動作
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,LOW);  //使馬達(左後)動作
     digitalWrite(pinLF,HIGH);
     delay(g * 100);     
    }
   
void detection()        //測量3個角度(0.90.179)
    {      
      int delay_time = 250;   // 伺服馬達轉向後的穩定時間
      ask_pin_F();            // 讀取前方距離
      
     if(Fspeedd < 20)         // 假如前方距離小於10公分
      {
      stopp(1);               // 清除輸出資料
      back(2);                // 後退 0.2秒
      }
           
      if(Fspeedd < 35)         // 假如前方距離小於25公分
      {
        stopp(1);               // 清除輸出資料
        ask_pin_L();            // 讀取左方距離
        delay(delay_time);      // 等待伺服馬達穩定
        ask_pin_R();            // 讀取右方距離  
        delay(delay_time);      // 等待伺服馬達穩定  
        
        if(Lspeedd > Rspeedd)   //假如 左邊距離大於右邊距離
        {
         directionn = Rgo;      //向右走
        }
        
        if(Lspeedd <= Rspeedd)   //假如 左邊距離小於或等於右邊距離
        {
         directionn = Lgo;      //向左走
        }
        
        if (Lspeedd < 20 && Rspeedd < 20)   //假如 左邊距離和右邊距離皆小於10公分
        {
         directionn = Bgo;      //向後走        
        }         
      }
      else                      //加如前方不小於(大於)25公分     
      {
        directionn = Fgo;        //向前走     
      }
     
    }   
void ask_pin_F()   // 量出前方距離
    {
      myservo.write(90);
      digitalWrite(outputPin, LOW);   // 讓超聲波發射低電壓2μs
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW);    // 維持超聲波發射低電壓
      float Fdistance = pulseIn(inputPin, HIGH);  // 讀差相差時間
      Fdistance= Fdistance/5.8/10;       // 將時間轉為距離距离(單位:公分)
      Serial.print("F distance:");      //輸出距離(單位:公分)
      Serial.println(Fdistance);         //顯示距離
      Fspeedd = Fdistance;              // 將距離 讀入Fspeedd(前速)
    }  
void ask_pin_L()   // 量出左邊距離
    {
      myservo.write(5);
      delay(delay_time);
      digitalWrite(outputPin, LOW);   // 讓超聲波發射低電壓2μs
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW);    // 維持超聲波發射低電壓
      float Ldistance = pulseIn(inputPin, HIGH);  // 讀差相差時間
      Ldistance= Ldistance/5.8/10;       // 將時間轉為距離距离(單位:公分)
      Serial.print("L distance:");       //輸出距離(單位:公分)
      Serial.println(Ldistance);         //顯示距離
      Lspeedd = Ldistance;              // 將距離 讀入Lspeedd(左速)
    }  
void ask_pin_R()   // 量出右邊距離
    {
      myservo.write(177);
      delay(delay_time);
      digitalWrite(outputPin, LOW);   // 讓超聲波發射低電壓2μs
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW);    // 維持超聲波發射低電壓
      float Rdistance = pulseIn(inputPin, HIGH);  // 讀差相差時間
      Rdistance= Rdistance/5.8/10;       // 將時間轉為距離距离(單位:公分)
      Serial.print("R distance:");       //輸出距離(單位:公分)
      Serial.println(Rdistance);         //顯示距離
      Rspeedd = Rdistance;              // 將距離 讀入Rspeedd(右速)
    }  
   
void loop()
{
    myservo.write(90);  //讓伺服馬達回歸 預備位置 準備下一次的測量
    detection();        //測量角度 並且判斷要往哪一方向移動
      
   if(directionn == 2)  //假如directionn(方向) = 2(倒車)            
   {
     back(8);                    //  倒退(車)
     turnL(2);                   //些微向左方移動(防止卡在死巷裡)
     Serial.print(" Reverse ");   //顯示方向(倒退)
   }
   if(directionn == 6)           //假如directionn(方向) = 6(右轉)   
   {
     back(1);
     right(6);                   // 右轉
     Serial.print(" Right ");    //顯示方向(左轉)
   }
   if(directionn == 4)          //假如directionn(方向) = 4(左轉)   
   {  
     back(1);      
     left(6);                  // 左轉
     Serial.print(" Left ");     //顯示方向(右轉)   
   }  
   if(directionn == 8)          //假如directionn(方向) = 8(前進)      
   {
    advance(1);                 // 正常前進  
    Serial.print(" Advance ");   //顯示方向(前進)
    Serial.print("   ");   
   }
}



③手自两档带火焰报警避障
#include <Servo.h>
char getstr;
int pinLB=12;
int pinLF=11;
int pinRB=10;
int pinRF=9;
//上面定义了板上的4个控制端,12一组,34一组
int Inputpin = 5;
int Outputpin = 6;
Servo myservo;
int delay_time = 250; // 伺服馬達轉向後的穩定時間
int Fspeedd = 0;      // 前速
int Rspeedd = 0;      // 右速
int Lspeedd = 0;      // 左速
int directionn = 0;
float cm;
int i=0,j;//记录测量次数,每5次取一下平均值
float cmsum;//计算5次总值
float cmeve;//计算5次平均值

int Fgo = 8;         // 前進
int Rgo = 6;         // 右轉
int Lgo = 4;         // 左轉
int Bgo = 2;         // 倒車

void _mRun(int pinLB,int pinLF)//电机右转,电机到底是右转还是左转取决于电机端的接线和控制脚的顺序
{
  digitalWrite(pinLB,HIGH);
  digitalWrite(pinLF,LOW);
}
void _mBack(int pinLB,int pinLF)//同上
{
  digitalWrite(pinLB,LOW);
  digitalWrite(pinLF,HIGH);
}
void _mStop(int pinLB,int pinLF)//紧急制动,实际就是将电机两个端短接了
{
  digitalWrite(pinLB,HIGH);
  digitalWrite(pinLF,HIGH);
}

void setup()
{
  Serial.begin(9600);
  pinMode(pinLB,OUTPUT);
  pinMode(pinLF,OUTPUT);
  pinMode(pinRB,OUTPUT);
  pinMode(pinRF,OUTPUT);
  pinMode(Inputpin, OUTPUT);
  pinMode(Outputpin, INPUT);
  //下面程序开始时让控制端都为高电平,电机保持不动。
  digitalWrite(pinLB,HIGH);
  digitalWrite(pinLF,HIGH);
  digitalWrite(pinRB,HIGH);
  digitalWrite(pinRF,HIGH);
    myservo.attach(7);   
}
void advance(int a)     // 前進
    {
     digitalWrite(pinRB,HIGH);  // 使馬達(右後)動作
     digitalWrite(pinRF,LOW);
     digitalWrite(pinLB,HIGH);  // 使馬達(左後)動作
     digitalWrite(pinLF,LOW);
     delay(a * 100);     
    }

void right(int b)        //右轉(單輪)
    {
     digitalWrite(pinRB,LOW);   //使馬達(右後)動作
     digitalWrite(pinRF,HIGH);
     analogWrite(pinRB,0);
     analogWrite(pinRF,200);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,HIGH);
     delay(b * 100);
    }
void left(int c)         //左轉(單輪)
    {
     digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,LOW);   //使馬達(左後)動作
     digitalWrite(pinLF,HIGH);
     analogWrite(pinLB,0);
     analogWrite(pinLF,200);
     delay(c * 100);
    }
void turnR(int d)        //右轉(雙輪)
    {
     digitalWrite(pinRB,LOW);  //使馬達(右後)動作
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,LOW);  //使馬達(左前)動作
     delay(d * 100);
    }
void turnL(int e)        //左轉(雙輪)
    {
     digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,LOW);   //使馬達(右前)動作
     digitalWrite(pinLB,LOW);   //使馬達(左後)動作
     digitalWrite(pinLF,HIGH);
     delay(e * 100);
    }   
void stopp(int f)         //停止
    {
     digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,HIGH);
     delay(f * 100);
    }
void back(int g)          //後退
    {

     digitalWrite(pinRB,LOW);  //使馬達(右後)動作
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,LOW);  //使馬達(左後)動作
     digitalWrite(pinLF,HIGH);
     delay(g * 100);     
    }
   
void detection()        //測量3個角度(0.90.179)
    {      
      int delay_time = 250;   // 伺服馬達轉向後的穩定時間
      ask_pin_F();            // 讀取前方距離
      
     if(Fspeedd < 20)         // 假如前方距離小於10公分
      {
      stopp(1);               // 清除輸出資料
      back(2);                // 後退 0.2秒
      }
           
      if(Fspeedd < 35)         // 假如前方距離小於25公分
      {
        stopp(1);               // 清除輸出資料
        ask_pin_L();            // 讀取左方距離
        delay(delay_time);      // 等待伺服馬達穩定
        ask_pin_R();            // 讀取右方距離  
        delay(delay_time);      // 等待伺服馬達穩定  
        
        if(Lspeedd > Rspeedd)   //假如 左邊距離大於右邊距離
        {
         directionn = Lgo;      //向右走
        }
        
        if(Lspeedd <= Rspeedd)   //假如 左邊距離小於或等於右邊距離
        {
         directionn = Rgo;      //向左走
        }
        
        if (Lspeedd < 20 && Rspeedd < 20)   //假如 左邊距離和右邊距離皆小於10公分
        {
         directionn = Bgo;      //向後走        
        }         
      }
      else                      //加如前方不小於(大於)25公分     
      {
        directionn = Fgo;        //向前走     
      }
     
    }   
void ask_pin_F()   // 量出前方距離
    {
      myservo.write(90);
      digitalWrite(Inputpin, LOW);   // 讓超聲波發射低電壓2μs
      delayMicroseconds(2);
      digitalWrite(Inputpin, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs
      delayMicroseconds(10);
      digitalWrite(Inputpin, LOW);    // 維持超聲波發射低電壓
      float Fdistance = pulseIn(Outputpin, HIGH);  // 讀差相差時間
      Fdistance= Fdistance/5.8/10;       // 將時間轉為距離距离(單位:公分)
      Serial.print("F distance:");      //輸出距離(單位:公分)
      Serial.println(Fdistance);         //顯示距離
      Fspeedd = Fdistance;              // 將距離 讀入Fspeedd(前速)
    }  
void ask_pin_L()   // 量出左邊距離
    {
      myservo.write(5);
      delay(delay_time);
      digitalWrite(Inputpin, LOW);   // 讓超聲波發射低電壓2μs
      delayMicroseconds(2);
      digitalWrite(Inputpin, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs
      delayMicroseconds(10);
      digitalWrite(Inputpin, LOW);    // 維持超聲波發射低電壓
      float Ldistance = pulseIn(Outputpin, HIGH);  // 讀差相差時間
      Ldistance= Ldistance/5.8/10;       // 將時間轉為距離距离(單位:公分)
      Serial.print("L distance:");       //輸出距離(單位:公分)
      Serial.println(Ldistance);         //顯示距離
      Lspeedd = Ldistance;              // 將距離 讀入Lspeedd(左速)
    }  
void ask_pin_R()   // 量出右邊距離
    {
      myservo.write(177);
      delay(delay_time);
      digitalWrite(Inputpin, LOW);   // 讓超聲波發射低電壓2μs
      delayMicroseconds(2);
      digitalWrite(Inputpin, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs
      delayMicroseconds(10);
      digitalWrite(Inputpin, LOW);    // 維持超聲波發射低電壓
      float Rdistance = pulseIn(Outputpin, HIGH);  // 讀差相差時間
      Rdistance= Rdistance/5.8/10;       // 將時間轉為距離距离(單位:公分)
      Serial.print("R distance:");       //輸出距離(單位:公分)
      Serial.println(Rdistance);         //顯示距離
      Rspeedd = Rdistance;              // 將距離 讀入Rspeedd(右速)
    }

void loop()
{
  int j=1;
  getstr=Serial.read();
  delayMicroseconds(60);
  digitalWrite(Inputpin, HIGH);
  delayMicroseconds(60);
  digitalWrite(Inputpin, LOW);
  
  cm = pulseIn(Outputpin, HIGH) / 58.0; //将回波时间换算成cm
  cm = (int(cm * 100.0)) / 100.0; //保留两位小数
  
  if (i==5){//连接测5次,计算平均值,如果小于10厘米则紧急停车
    i=0;
    cmeve=cmsum/5;
    cmsum=0;
   
    if (cmeve<20 and cmeve>0) {
      Serial.println(cmeve);
      _mStop(pinLB,pinLF);
      _mStop(pinRB,pinRF);
    }
  }
  else {
    i=i+1;
    cmsum=cmsum+cm;
  }

    myservo.write(90);
  if(getstr=='z')
  while(1)
  {
    myservo.write(90);  //讓伺服馬達回歸 預備位置 準備下一次的測量
    detection();        //測量角度 並且判斷要往哪一方向移動
      
   if(directionn == 2)  //假如directionn(方向) = 2(倒車)            
   {
     back(8);                    //  倒退(車)
     turnL(2);                   //些微向左方移動(防止卡在死巷裡)
     Serial.print(" Reverse ");   //顯示方向(倒退)
   }
   if(directionn == 6)           //假如directionn(方向) = 6(右轉)   
   {
     back(1);
     right(6);                   // 右轉
     Serial.print(" Right ");    //顯示方向(左轉)
   }
   if(directionn == 4)          //假如directionn(方向) = 4(左轉)   
   {  
     back(1);      
     left(6);                  // 左轉
     Serial.print(" Left ");     //顯示方向(右轉)   
   }  
   if(directionn == 8)          //假如directionn(方向) = 8(前進)      
   {
    advance(1);                 // 正常前進  
    Serial.print(" Advance ");   //顯示方向(前進)
    Serial.print("   ");   
   }
     getstr=Serial.read();
   if(getstr=='z')   break;
    }


  if(getstr=='f')
  {
    Serial.println("go forward!");
    _mStop(pinLB,pinLF);
    _mStop(pinRB,pinRF);   
    _mRun(pinLB,pinLF);
    _mRun(pinRB,pinRF);
  }
  else if(getstr=='b'){
    Serial.println("go back!");
    _mStop(pinLB,pinLF);
    _mStop(pinRB,pinRF);
   
    _mBack(pinLB,pinLF);
    _mBack(pinRB,pinRF);
  }
  else if(getstr=='l' and j==1){
    Serial.println("go left!");
    _mStop(pinLB,pinLF);
    _mStop(pinRB,pinRF);
   
    _mRun2(pinRB,pinRF);
    j--;
  }
  else if(getstr=='r' and j==1){
    Serial.println("go right!");
    _mStop(pinLB,pinLF);
    _mStop(pinRB,pinRF);
   
    _mRun2(pinLB,pinLF);
    j--;
  }
  else if(getstr=='s'){
    Serial.println("Stop!");
    _mStop(pinLB,pinLF);
    _mStop(pinRB,pinRF);   
  }
}
void _mRun2(int pin1,int pin2)//电机右转,电机到底是右转还是左转取决于电机端的接线和控制脚的顺序
{
  digitalWrite(pin1,HIGH);
  digitalWrite(pin2,LOW);
  delay(500);
  digitalWrite(pin1,LOW);
}




新手第一次,请各位大神多多指教!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2016-1-16 13:11:08 | 显示全部楼层
恩恩,挺不错的啦!同是新手,以后多多交流哈!
回复 支持 反对

使用道具 举报

发表于 2016-1-18 20:47:38 | 显示全部楼层
有没有详细连线图
回复 支持 反对

使用道具 举报

发表于 2016-1-18 22:13:08 | 显示全部楼层
拍个视频跑一下
回复 支持 反对

使用道具 举报

发表于 2016-1-29 09:21:18 | 显示全部楼层
求 详细连线图
回复 支持 反对

使用道具 举报

发表于 2016-8-20 10:14:23 | 显示全部楼层
请问手自两档是如何切换的呀?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-19 14:40 , Processed in 0.071617 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表