2016-03-07 26 views
0

所以我把伺服電機連接到Arduino的數字引腳6上。 我想在串口中輸入一個數字,並讓伺服旋轉到那個程度。帶伺服的串行I/O功能

我試圖讓兩個功能,

1)詢問,並從10 & 170之間的串行端口接收到大量請求再入若無效。 只有在數字好的時候纔會返回。

2)取得程度參數,將參數寫爲伺服程度, 打印出狀態:「伺服將x記號移動到y度。」

#include <Servo.h> 

Servo myServo; 

int deg; 
int degree; 
int inputDeg; 

int ang; 
int angle; 
int inputAng; 

int servoMin = 10; 
int servoMax = 175; 

int recieveNum(int inputDeg) { 
    inputDeg = Serial.parseInt(); 
    if (inputDeg >= 0 && inputDeg <= 180) { 
    Serial.println("You did great!"); 
    return degree; 
    } else { 
    Serial.println("Hey! Try giving me a number between 0 and 180 this time."); 
    } 
} 

int servoTranslate(int inputAng) { 
    angle = map(degree, 0, 180, servoMin, servoMax); 
    return angle; 
} 

void setup() { 
    Serial.begin(9600); 
    myServo.attach(6); 
} 

void loop() { 
    if (Serial.available() == 0) {} 
    else { 
    recieveNum(deg); 

    int finalAng = servoTranslate(degree); 

    Serial.print(" Servo moved "); 
    Serial.print(degree); 
    Serial.print(" tick(s) to "); 
    Serial.print(finalAng); 
    Serial.println("º"); 

    myServo.write(finalAng); 
    } 
} 

我對C++仍然很陌生,我認爲它可能只是一個變量被混淆的問題。使用指針似乎也是一種選擇,但還沒有試圖實現這些。

+0

在'recieveNum()'你需要另一個'return'聲明在函數的結束。除此之外,你完全不清楚你在問什麼。 –

回答

0

這應該爲你工作:

功能recieveNum應該返回到-1指標無效輸入:

int recieveNum(int inputDeg) 
{ 
    inputDeg = Serial.parseInt(); 
    if (inputDeg >= 0 && inputDeg <= 180) { 
    Serial.println("You did great!"); 
    return degree; 
    } else { 
    Serial.println("Hey! Try giving me a number between 0 and 180 this time."); 
    } 
    return -1; 
    ^^^^^^^^^ 
} 

void loop() 
{ 
    if (Serial.available() != 0) 
    { 
    if(-1 != recieveNum(deg)) 
    { // Valid 'deg' 
     int finalAng = servoTranslate(degree); 
     Serial.print(" Servo moved "); 
     Serial.print(degree); 
     Serial.print(" tick(s) to "); 
     Serial.print(finalAng); 
     Serial.println("º"); 
    } 
    } 
    myServo.write(finalAng); 
} 
+0

仍然不返回的代碼路徑。在最後一個大括號之前移動'return -1;'。 –

+0

@πάνταῥεῖ謝謝!修復。 – vcp