Robofun 機器人論壇

標題: 請教一下遙控車程式碼問題 [打印本頁]

作者: max840719    時間: 2016-11-1 11:27
標題: 請教一下遙控車程式碼問題
本帖最後由 max840719 於 2016-11-1 12:58 編輯

下列是我的程式:
#include <Servo.h>
Servo myservo;

char inData;
const byte speed = 80;  // 馬達的PWM輸出值
const byte speed1 = 220;   //發射馬達的PWM輸出值


const byte ENA = 2;  // 馬達A的致能接腳
const byte ENB = 3;  // 馬達B的致能接腳
const byte IN1 = 7; // 馬達A的正反轉接腳
const byte IN2 = 6;  // 馬達A的正反轉接腳
const byte IN3 = 4;  // 馬達B的正反轉接腳
const byte IN4 = 5;  // 馬達B的正反轉接腳

const byte ENC = 44;  // 馬達C的致能接腳
const byte END = 45;  // 馬達D的致能接腳
const byte INC1 = 13; // 馬達C的正反轉接腳
const byte INC2 = 12;  // 馬達的正反轉接腳
const byte IND1 = 46;  // 馬達D的正反轉接腳
const byte IND2 = 11;  // 馬達D的正反轉接腳


void forward() {        // 馬達轉向:前進
analogWrite(ENA, speed);  
digitalWrite(IN1, HIGH);   
digitalWrite(IN2, LOW);
analogWrite(ENB, speed);  
digitalWrite(IN3, HIGH);   
digitalWrite(IN4, LOW);
}

void backward() {          // 馬達轉向:後退
analogWrite(ENA, speed);  
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENB, speed);
digitalWrite(IN3, LOW);   
digitalWrite(IN4, HIGH);
}

void turnLeft() {          // 馬達轉向:左轉
analogWrite(ENA, speed);  
digitalWrite(IN1, LOW);  
digitalWrite(IN2, HIGH);
analogWrite(ENB, 0);  
}

void turnRight() {         // 馬達轉向:右轉   
analogWrite(ENA, speed);  
digitalWrite(IN1, HIGH);   
digitalWrite(IN2, LOW);
analogWrite(ENB, 0);  
}

void stop1() {             // 馬達馬上停止
   analogWrite(ENA, speed);
   analogWrite(ENB, speed);
   digitalWrite(IN1, HIGH);   
   digitalWrite(IN2, HIGH);
   digitalWrite(IN3, HIGH);
   digitalWrite(IN4, HIGH);
}

void shoot()
{
      analogWrite(ENC, speed1);  
      digitalWrite(INC1, LOW);  
      digitalWrite(INC2, HIGH);
      analogWrite(END, speed1);  
      digitalWrite(IND1, HIGH);  
      digitalWrite(IND2, LOW);
}


void setup()
{
   Serial.begin(9600);
   pinMode(IN1, OUTPUT);  // 馬達控制板的接腳全都設定成「輸出」
   pinMode(IN2, OUTPUT);
   pinMode(IN3, OUTPUT);
   pinMode(IN4, OUTPUT);
   pinMode(ENA, OUTPUT);
   pinMode(ENB, OUTPUT);
   digitalWrite(ENA,HIGH);
   digitalWrite(ENB,HIGH);

   pinMode(INC1, OUTPUT);  // 馬達控制板的接腳全都設定成「輸出」
   pinMode(INC2, OUTPUT);
   pinMode(IND1, OUTPUT);
   pinMode(IND2, OUTPUT);
   pinMode(ENC, OUTPUT);
   pinMode(END, OUTPUT);
   digitalWrite(ENC,HIGH);
   digitalWrite(END,HIGH);
   
   myservo.attach(9);  
   myservo.write(85); //設定旋轉角度
}


void loop()
{
  if(Serial.available() > 0)
  {
  inData = Serial.read();
    if(inData=='p')         //發射
    {
      shoot();
      delay(2500);
      myservo.write(10);
      delay(1000);
      myservo.write(85);
      stop1();
    }
    else if(inData=='w')      //前進
    {
      forward();
      delay(500);
      stop1();
    }
   
    else if(inData=='s')     //後退
    {
      backward();
      delay(500);
      stop1();
    }
    else if(inData='d')      //右轉
    {         
       turnRight();
       delay(500);
       stop1();
    }
    else if(inData=='a')     //左轉
    {      
       turnLeft();
       delay(500);
       stop1();
    }
   
    else if(inData=='e')     //停止
    {
       stop1();
    }
  }
}
      
我把控制馬達的前後左右獨立燒錄測試的話都正常運作,但是放進個我要的主程式時,只有前後是正常的左右動作一模一樣按停止反而會動。
線的部分已經檢查N次了應該不會錯,是不是我有甚麼地方互相衝突到了呢? 我按左轉跟右轉馬達的動作都是一樣的,但是程式打不一樣。

板子是mega2560
拜託各位幫忙解惑一下
作者: 超新手    時間: 2016-11-1 11:51
本帖最後由 超新手 於 2016-11-1 12:20 編輯

你寫錯了
else if(inData='d')
作者: max840719    時間: 2016-11-1 13:07
你寫錯了
else if(inData='d')
超新手 發表於 2016-11-1 11:51



  ..... 抱歉原來是這種低級失誤沒檢查到,謝謝幫忙




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2