所以我把伺服电机连接到我的Arduino上的6号数字针脚上。我想输入一个数字到串口,并让伺服旋转到那个程度。
我试着做两个函数,
1)从串口请求和接收一个介于10和170之间的数字。如果无效,则要求重新进入。仅当数值正确时才返回。
2)接受一个度数参数,将该参数写为伺服度数,打印出状态:"Servo moved x ticks to y degrees“。
#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++的新手,我认为这可能只是变量混淆的问题。使用指针似乎也是一种选择,但尝试实现它们还没有走得太远。
发布于 2016-03-07 15:15:59
这对你来说应该是可行的:
函数recieveNum应将-1返回给indicator无效输入:
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);
}https://stackoverflow.com/questions/35837910
复制相似问题