準備用兩個紅外探頭控制一個舵機的轉動,探頭是3.3V,舵機時5V的,寫出來后舵機根本不按照寫的轉動,無規律的轉,然后又試了一個探頭控制舵機,是好的,兩個探頭控制源程序如下,哪個大佬幫忙看下是咋回事/? 感覺程序應該沒錯了,會不會是硬件連接問題,舵機和探頭均未加電阻,板子是Arduion UNO,
#include <Servo.h> // 聲明調用Servo.h庫
Servo myservo; // 創建一個舵機對象
int zhi = 60; //變量zhi用來儲存舵機位置
void setup() {
myservo.attach(5); // 將引腳5上的舵機與聲明的舵機對象連接起來
pinMode(2, INPUT_PULLUP); //將引腳4連接到探頭1上拉 左
pinMode(3, INPUT_PULLUP); //將引腳5連接到探頭2 右
}
void loop() {
int va = digitalRead(2); //定義探頭1信號為va 左
int vb = digitalRead(3); //定義探頭2信號為vb 右
if(va == HIGH && vb== HIGH) //直游
{
for(zhi =60; zhi < 120; zhi += 1){ // 舵機從60°轉到120°,每次增加1°
myservo.write(zhi); // 給舵機寫入角度
delay(15); // 延時15ms讓舵機轉到指定位置
}
for(zhi = 120; zhi>=60; zhi-=1) { // 舵機從120°轉回到60°,每次減小1°
myservo.write(zhi); // 寫角度到舵機
delay(15); // 延時15ms讓舵機轉到指定位置
}
}
if(va == LOW && vb == HIGH) //左游
{
for(zhi =60; zhi < 100; zhi += 1){ // 舵機從60°轉到100°,每次增加1°
myservo.write(zhi); // 給舵機寫入角度
delay(15); // 延時15ms讓舵機轉到指定位置
}
for(zhi = 100; zhi>=60; zhi-=1) { // 舵機從100°轉回到60°,每次減小1°
myservo.write(zhi); // 寫角度到舵機
delay(15); // 延時15ms讓舵機轉到指定位置
}
}
if(va == HIGH && vb == LOW) //右游
{
for(zhi =80; zhi < 120; zhi += 1){ // 舵機從80°轉到120°,每次增加1°
myservo.write(zhi); // 給舵機寫入角度
delay(15); // 延時15ms讓舵機轉到指定位置
}
for(zhi = 120; zhi>=80; zhi-=1) { // 舵機從120°轉回到80°,每次減小1°
myservo.write(zhi); // 寫角度到舵機
delay(15); // 延時15ms讓舵機轉到指定位置
}
}
|