c++ - Serial I/O functions with Servo -
so i've hooked servo motor digital pin 6 on arduino. want type number serial port, , have servo rotate degree.
i'm trying make 2 functions,
1) asks , receives number serial port between 10 & 170. asks re-entry if invalid. returns when number good.
2) takes in degree argument, writes argument servo degree, prints out status: "servo moved x ticks 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 number between 0 , 180 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) "); serial.print(finalang); serial.println("º"); myservo.write(finalang); } } i still pretty new c++, , think might matter of variables being mixed up. using pointers seems option haven't gotten far trying implement those.
this should work you:
function recievenum should return -1 indicator invalid input:
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 number between 0 , 180 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) "); serial.print(finalang); serial.println("º"); } } myservo.write(finalang); }
Comments
Post a Comment