#include <SoftwareSerial.h>
#include<stdlib.h>
#include<string.h>
#define rxPin 10
#define txPin 11
#define rxPinJ 9
#define txPinJ 8
SoftwareSerial softSerial = SoftwareSerial(rxPin, txPin);
SoftwareSerial Jetson = SoftwareSerial(rxPinJ, txPinJ);
int speed[] = {300, 400};
int x, y, z;
String face = "";
void setup() {
Jetson.begin(57600);
softSerial.begin(57600);
delay(2000);
start(); // start create in full mode
delay(500);
setWelcome(); // write song_welcome
delay(500);
setWarning(); // write song_warning
delay(500);
}
const char TERMINATOR = '|';
void loop() {
patrol();
}
void start(){
softSerial.write(128);
softSerial.write(132);
}
void setWelcome(){
softSerial.write(140);
softSerial.write(1);
softSerial.write(3);
softSerial.write(60);
softSerial.write(12);
softSerial.write(62);
softSerial.write(12);
softSerial.write(64);
softSerial.write(12);
}
void setWarning(){
softSerial.write(140);
softSerial.write(2);
softSerial.write(2);
softSerial.write(60);
softSerial.write(12);
softSerial.write(64);
softSerial.write(12);
}
void drive(int speed_right, int speed_left, int sec) {
softSerial.write(145);
softSerial.write((speed_right>>8)&0xFF);
softSerial.write(speed_right&0xFF);
softSerial.write((speed_left>>8)&0xFF);
softSerial.write(speed_left&0xFF);
delay(sec);
}
void bump(){ // detect bump
z = 0;
softSerial.write(142);
softSerial.write(7);
delay(64);
z = softSerial.read();
if((z&0x03) == 0x03){
stop_d();
delay(100);
drive(-300, -300, 500);
drive(-300, 300, 1250);
} // if hit in the front, turn back
else if((z&0x01) == 0x01){
stop_d();
delay(100);
drive(-300, -300, 500);
drive(400, 0, 500);
} // if hit in the right, turn left
else if((z&0x02) == 0x02){
stop_d();
delay(100);
drive(-300, -300, 500);
drive(0, 400, 500);
} // if hit in the left, turn right
}
void stop_d(){
softSerial.write(145);
softSerial.write((byte)(0));
softSerial.write((byte)(0));
softSerial.write((byte)(0));
softSerial.write((byte)(0));
}
void scan(){
while(Jetson.available()>0){
face = Jetson.readStringUntil(TERMINATOR);
stop_d();
delay(2000);
if(face.toInt() == 100 || face.toInt() == 200){
Jetson.write("ok");
stop_d();
delay(1000);
if(face.toInt() == 100){
play_song(1);
delay(2000);
// drive(-300, 300, 1250);
face = "";
while(1);
}
else if(face.toInt() == 200){
while(1){
play_song(2);
}
face = "";
}
}
}
}
void patrol(){
y
= rand() % 2; // random speed for(int c = 0; c < 30; c++){
drive(speed[x], speed[y], 100);
bump();
scan();
}
}
void play_song(int num){
softSerial.write(141);
softSerial.write(num);
}
I2luY2x1ZGUgPFNvZnR3YXJlU2VyaWFsLmg+CiNpbmNsdWRlPHN0ZGxpYi5oPgojaW5jbHVkZTxzdHJpbmcuaD4KI2RlZmluZSByeFBpbiAxMAojZGVmaW5lIHR4UGluIDExCiNkZWZpbmUgcnhQaW5KIDkKI2RlZmluZSB0eFBpbkogOAoKClNvZnR3YXJlU2VyaWFsIHNvZnRTZXJpYWwgPSAgU29mdHdhcmVTZXJpYWwocnhQaW4sIHR4UGluKTsKU29mdHdhcmVTZXJpYWwgSmV0c29uID0gIFNvZnR3YXJlU2VyaWFsKHJ4UGluSiwgdHhQaW5KKTsKCmludCBzcGVlZFtdID0gezMwMCwgNDAwfTsKaW50IHgsIHksIHo7ClN0cmluZyBmYWNlID0gIiI7CgoKdm9pZCBzZXR1cCgpIHsKICBKZXRzb24uYmVnaW4oNTc2MDApOyAKICBzb2Z0U2VyaWFsLmJlZ2luKDU3NjAwKTsKICBkZWxheSgyMDAwKTsKICBzdGFydCgpOyAgICAgICAgIC8vIHN0YXJ0IGNyZWF0ZSBpbiBmdWxsIG1vZGUKICBkZWxheSg1MDApOwogIHNldFdlbGNvbWUoKTsgICAgLy8gd3JpdGUgc29uZ193ZWxjb21lCiAgZGVsYXkoNTAwKTsKICBzZXRXYXJuaW5nKCk7ICAgIC8vIHdyaXRlIHNvbmdfd2FybmluZwogIGRlbGF5KDUwMCk7Cn0KCmNvbnN0IGNoYXIgVEVSTUlOQVRPUiA9ICd8JzsKCnZvaWQgbG9vcCgpIHsKICBwYXRyb2woKTsKfQoKdm9pZCBzdGFydCgpewogIHNvZnRTZXJpYWwud3JpdGUoMTI4KTsgICAgCiAgc29mdFNlcmlhbC53cml0ZSgxMzIpOyAgCn0KCnZvaWQgc2V0V2VsY29tZSgpewogIHNvZnRTZXJpYWwud3JpdGUoMTQwKTsKICBzb2Z0U2VyaWFsLndyaXRlKDEpOyAKICBzb2Z0U2VyaWFsLndyaXRlKDMpOwogIHNvZnRTZXJpYWwud3JpdGUoNjApOwogIHNvZnRTZXJpYWwud3JpdGUoMTIpOwogIHNvZnRTZXJpYWwud3JpdGUoNjIpOwogIHNvZnRTZXJpYWwud3JpdGUoMTIpOwogIHNvZnRTZXJpYWwud3JpdGUoNjQpOwogIHNvZnRTZXJpYWwud3JpdGUoMTIpOwp9Cgp2b2lkIHNldFdhcm5pbmcoKXsKICBzb2Z0U2VyaWFsLndyaXRlKDE0MCk7CiAgc29mdFNlcmlhbC53cml0ZSgyKTsKICBzb2Z0U2VyaWFsLndyaXRlKDIpOwogIHNvZnRTZXJpYWwud3JpdGUoNjApOwogIHNvZnRTZXJpYWwud3JpdGUoMTIpOwogIHNvZnRTZXJpYWwud3JpdGUoNjQpOwogIHNvZnRTZXJpYWwud3JpdGUoMTIpOyAKfQoKdm9pZCBkcml2ZShpbnQgc3BlZWRfcmlnaHQsIGludCBzcGVlZF9sZWZ0LCBpbnQgc2VjKSB7CiAgICBzb2Z0U2VyaWFsLndyaXRlKDE0NSk7CiAgICBzb2Z0U2VyaWFsLndyaXRlKChzcGVlZF9yaWdodD4+OCkmMHhGRik7CiAgICBzb2Z0U2VyaWFsLndyaXRlKHNwZWVkX3JpZ2h0JjB4RkYpOwogICAgc29mdFNlcmlhbC53cml0ZSgoc3BlZWRfbGVmdD4+OCkmMHhGRik7CiAgICBzb2Z0U2VyaWFsLndyaXRlKHNwZWVkX2xlZnQmMHhGRik7CiAgICBkZWxheShzZWMpOwp9Cgp2b2lkIGJ1bXAoKXsgICAgICAgICAgICAgICAgICAgICAgLy8gZGV0ZWN0IGJ1bXAKICAgIHogPSAwOwogICAgc29mdFNlcmlhbC53cml0ZSgxNDIpOwogICAgc29mdFNlcmlhbC53cml0ZSg3KTsKICAgIGRlbGF5KDY0KTsKICAgIHogPSBzb2Z0U2VyaWFsLnJlYWQoKTsKICAgIGlmKCh6JjB4MDMpID09IDB4MDMpewogICAgICBzdG9wX2QoKTsKICAgICAgZGVsYXkoMTAwKTsKICAgICAgZHJpdmUoLTMwMCwgLTMwMCwgNTAwKTsKICAgICAgZHJpdmUoLTMwMCwgMzAwLCAxMjUwKTsgICAgICAgCiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgaGl0IGluIHRoZSBmcm9udCwgdHVybiBiYWNrCiAgICBlbHNlIGlmKCh6JjB4MDEpID09IDB4MDEpewogICAgICBzdG9wX2QoKTsKICAgICAgZGVsYXkoMTAwKTsKICAgICAgZHJpdmUoLTMwMCwgLTMwMCwgNTAwKTsKICAgICAgZHJpdmUoNDAwLCAwLCA1MDApOyAgICAgICAgICAKICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBoaXQgaW4gdGhlIHJpZ2h0LCB0dXJuIGxlZnQKICAgIGVsc2UgaWYoKHomMHgwMikgPT0gMHgwMil7CiAgICAgIHN0b3BfZCgpOwogICAgICBkZWxheSgxMDApOwogICAgICBkcml2ZSgtMzAwLCAtMzAwLCA1MDApOwogICAgICBkcml2ZSgwLCA0MDAsIDUwMCk7CiAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgaGl0IGluIHRoZSBsZWZ0LCB0dXJuIHJpZ2h0Cn0KCnZvaWQgc3RvcF9kKCl7CiAgICBzb2Z0U2VyaWFsLndyaXRlKDE0NSk7CiAgICBzb2Z0U2VyaWFsLndyaXRlKChieXRlKSgwKSk7CiAgICBzb2Z0U2VyaWFsLndyaXRlKChieXRlKSgwKSk7CiAgICBzb2Z0U2VyaWFsLndyaXRlKChieXRlKSgwKSk7CiAgICBzb2Z0U2VyaWFsLndyaXRlKChieXRlKSgwKSk7Cn0KCgp2b2lkIHNjYW4oKXsKICAgd2hpbGUoSmV0c29uLmF2YWlsYWJsZSgpPjApewogICAgICBmYWNlID0gSmV0c29uLnJlYWRTdHJpbmdVbnRpbChURVJNSU5BVE9SKTsKICAgICAgc3RvcF9kKCk7CiAgICAgIGRlbGF5KDIwMDApOwogICAgICBpZihmYWNlLnRvSW50KCkgPT0gMTAwIHx8IGZhY2UudG9JbnQoKSA9PSAyMDApeyAKICAgICAgICBKZXRzb24ud3JpdGUoIm9rIik7CiAgICAgICAgc3RvcF9kKCk7CiAgICAgICAgZGVsYXkoMTAwMCk7CiAgICAgICAgaWYoZmFjZS50b0ludCgpID09IDEwMCl7CiAgICAgICAgICBwbGF5X3NvbmcoMSk7CiAgICAgICAgICBkZWxheSgyMDAwKTsKICAgICAgICAgLy8gZHJpdmUoLTMwMCwgMzAwLCAxMjUwKTsKICAgICAgICAgIGZhY2UgPSAiIjsKICAgICAgICAgIHdoaWxlKDEpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKGZhY2UudG9JbnQoKSA9PSAyMDApewogICAgICAgICAgd2hpbGUoMSl7CiAgICAgICAgICAgIHBsYXlfc29uZygyKTsKICAgICAgICAgIH0KICAgICAgICAgIGZhY2UgPSAiIjsKICAgICAgIH0KICAgIH0KICB9Cn0KCnZvaWQgcGF0cm9sKCl7CiAgeCA9IHJhbmQoKSAlIDI7IAogIHkgPSByYW5kKCkgJSAyOyAgICAgICAgICAgICAvLyByYW5kb20gc3BlZWQKICBmb3IoaW50IGMgPSAwOyBjIDwgMzA7IGMrKyl7CiAgICBkcml2ZShzcGVlZFt4XSwgc3BlZWRbeV0sIDEwMCk7CiAgICBidW1wKCk7CiAgICBzY2FuKCk7CiAgfQp9Cgp2b2lkIHBsYXlfc29uZyhpbnQgbnVtKXsKICBzb2Z0U2VyaWFsLndyaXRlKDE0MSk7CiAgc29mdFNlcmlhbC53cml0ZShudW0pOwp9Cg==