DCモーターのスピード(int speed)と、サーボの角度(int angle)を送りたい。
送るデータの形式は、(a speed : angle e)の繰り返しで、(スタートバイト スピード 区切り文字 サーボ角度 ストップワード) という意味。
送信側
//transmitter program //produced by shohei aoki int input0; int input1; int speed; int angle; void setup(){ //start serial communication Serial.begin(9600); } void loop(){ input0 = analogRead(0); input1 = analogRead(1); speed = input0; angle = map(input1,0, 1023, 0, 179); Serial.write("a"); Serial.write(speed); Serial.write(":"); Serial.write(angle); Serial.print("e"); //stop word //Serial.println(""); // carriage return delay(10); //wait for 10ms }
受信側
//receiver program //produced by shohei aoki #include <Servo.h> #include <string.h> Servo myservo; char* speed_string; char* angle_string; int speed; int angle; void setup(){ //start serial communication Serial.begin(9600); //D1 is a digital output pinMode(1,OUTPUT); //D2 is a servo signal pin myservo.attach(2); } void loop(){ //array for the data(number and character) char str[20]; recvStr(str); speed_string = strtok(str,":"); angle_string = strtok(NULL,"e"); speed = atoi(speed_string); angle = atoi(angle_string); analogWrite(1,speed);//PWM output myservo.write(angle); //set the servo angle } void recvStr(char *buf) { int i = 0; char first_c; char c; while (1) { if (Serial.available()) { first_c = Serial.read(); if(first_c == 'a') { //'a' as a start signal c = Serial.read(); buf[i] = c; if (c == 'e') break; // e is a stop word i++; } } } buf[i] = 'e'; }