Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 2107|回復: 2
打印 上一主題 下一主題

請教一下遙控車程式碼問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2016-11-1 11:27:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 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
拜託各位幫忙解惑一下
2#
發表於 2016-11-1 11:51:57 | 只看該作者
本帖最後由 超新手 於 2016-11-1 12:20 編輯

你寫錯了
else if(inData='d')
3#
 樓主| 發表於 2016-11-1 13:07:42 | 只看該作者
你寫錯了
else if(inData='d')
超新手 發表於 2016-11-1 11:51



  ..... 抱歉原來是這種低級失誤沒檢查到,謝謝幫忙
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-4-29 06:46 , Processed in 0.176561 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表