| 
 | 
 
 本帖最後由 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 
拜託各位幫忙解惑一下     |   
 
 
 
 |