Arduino雙舵機串口控制源代碼

#include <Servo.h> 
const unsigned int MOTOR_PIN1 = 9;
const unsigned int MOTOR_PIN2 = 10;
const unsigned int MOTOR_DELAY = 15;
const unsigned int SERIAL_DELAY = 5;
const unsigned int BAUD_RATE = 9600;
int yaw=92;
int pitch=97;
int track_delay=0;
int yaw_last,pitch_last;//control signal for actuators
Servo servo_1,servo_2; // <label id="code.motors.servo"/>
 
void setup() { 
  Serial.begin(BAUD_RATE);
  servo_1.attach(MOTOR_PIN1); // <label id="code.motors.servo_attach"/>
  servo_2.attach(MOTOR_PIN2);
  delay(MOTOR_DELAY);
  servo_1.write(yaw);
  servo_2.write(pitch);
  delay(MOTOR_DELAY);
  Serial.flush();
} 
 
void loop() {
  const int MAX_ANGLE = 3;
  //char buffer[10];
  char degree_1[MAX_ANGLE + 1]; 
  char degree_2[MAX_ANGLE + 1];
  int x_tune,y_tune;// error for control 
  
  if (Serial.available()) {
    int i = 0;
    int j = 0;
    int space_pos=10;
		const char c = Serial.read();
		if (c != -1 && c != '\n'&& c != '\r'){
			if(c !='+'){
					if( i< space_pos) degree_1[i++]=c;
					if(space_pos != 10) degree_2[j++]=c;
			}
			else space_pos = i;
		 	degree_1[i] = 0;
			degree_2[j] = 0;
			Serial.print(degree_1);
			Serial.println(" degrees.");
			servo_1.write(atoi(degree_1)); //atoi 將ascii 碼字符串轉成整數送入write函數
			Serial.print(degree_2);
			Serial.println(" degrees.");
			servo_2.write(atoi(degree_2)); 
			delay(MOTOR_DELAY);
			delay(SERIAL_DELAY);
		}   
		


  }
} 

使用方法:打開Arduino IDE自帶串口監視器,設置末位添加newline,在命令行中發送“角度1+角度2”控制命令例如90+83
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章