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