diff --git a/radar/radar.ino b/radar/radar.ino index fe3bb95..dd3c6ed 100644 --- a/radar/radar.ino +++ b/radar/radar.ino @@ -1,7 +1,6 @@ #include #include -#include "Ucglib.h" - +#include "Ucglib.h" #define trigPin 6 //超声波模块的Trig口 6# #define echoPin 5 //超声波模块的echo口 5# #define ServoPin 3 //底座舵机端口 3# diff --git a/remote_controler/remote_controler.ino b/remote_controler/remote_controler.ino index e2d2b61..c636cca 100644 --- a/remote_controler/remote_controler.ino +++ b/remote_controler/remote_controler.ino @@ -3,13 +3,18 @@ #include #include #include +#include RF24 radio(7,8);//端口可能要改 +SoftwareSerial sendingSerial(5,6); +String sending=""; const int Rp=0,Rr=1,interval=20;//Rp,Rr 分别为两个遥杆的接口 long propeller=0,rudder=0,dist;//propeller为螺旋桨(0-1023,512为静止),rudder为舵(0-1023,512为静止) long sending_signal=0;//发送的信号 +long response=0; const byte addresser[6]={"00001"};//创建通信通道地址,6用来写,8用来读 void setup() { Serial.begin(9600); + sendingSerial.begin(38400); radio.begin(); //radio.setChannel(114);//设置信道,114号通道 radio.openWritingPipe(addresser); @@ -17,6 +22,7 @@ void setup() { radio.setPALevel(RF24_PA_HIGH); Timer1.initialize(interval); Timer1.attachInterrupt(send); + radio.startListening(); } void send(){ sending_signal=0; @@ -36,8 +42,21 @@ void send(){ Serial.print("rudder sent "); Serial.println(rudder); Serial.println(sending_signal); + radio.startListening(); } void loop() { // put your main code here, to run repeatedly: - + if(radio.available()){ + radio.read(&response,sizeof(response)); + if(response%1000000==1){ + sending=String(response); + sendingSerial.print(sending); + sendingSerial.print('\n'); + } + else if(response==2000000){ + sending=String(response); + sendingSerial.print(sending); + sendingSerial.print('\n'); + } + } } diff --git a/remote_controler_board_2/remote_controler_board_2.ino b/remote_controler_board_2/remote_controler_board_2.ino new file mode 100644 index 0000000..28dc181 --- /dev/null +++ b/remote_controler_board_2/remote_controler_board_2.ino @@ -0,0 +1,106 @@ +#include +#include +#include "Ucglib.h" +#define interruptPin 2 +SoftwareSerial sendingSerial(6,7); +int Ymax = 128; //屏幕的竖向像素数 +int Xmax = 160; //屏幕的横向像素数 +int Xcent = Xmax / 2; //x中位 +int base = 118; //基线高度 +int scanline = 105; //雷达扫描线长度 +int outcircle=80; +int midcircle=60; +int midcircle2=40; +int incircle=20; +int x=90; +int distance=50; +bool rec=false; +bool clr=false; +bool ignoreClr=false; +String received="";//用来接受字符 +Ucglib_ST7735_18x128x160_HWSPI ucg(/*cd=*/ 9, /*cs=*/ 10, /*reset=*/ 8); +void fix_font() +{ + ucg.setColor(0, 180, 0); + ucg.setPrintPos(70,46); + ucg.print("1.00"); + ucg.setPrintPos(70,66); + ucg.print("0.75"); + ucg.setPrintPos(70,86); + ucg.print("0.50"); + ucg.setPrintPos(70,106); + ucg.print("0.25"); +} +void fix() +{ + ucg.setColor(0, 40, 0); + //画基线圆盘 + ucg.drawDisc(Xcent, base+1, 3, UCG_DRAW_ALL); + ucg.drawCircle(Xcent, base+1, outcircle, UCG_DRAW_UPPER_LEFT); + ucg.drawCircle(Xcent, base+1, outcircle, UCG_DRAW_UPPER_RIGHT); + ucg.drawCircle(Xcent, base+1, midcircle, UCG_DRAW_UPPER_LEFT); + ucg.drawCircle(Xcent, base+1, midcircle, UCG_DRAW_UPPER_RIGHT); + ucg.drawCircle(Xcent, base+1, midcircle2, UCG_DRAW_UPPER_LEFT); + ucg.drawCircle(Xcent, base+1, midcircle2, UCG_DRAW_UPPER_RIGHT); + ucg.drawCircle(Xcent, base+1, incircle, UCG_DRAW_UPPER_LEFT); + ucg.drawCircle(Xcent, base+1, incircle, UCG_DRAW_UPPER_RIGHT); + ucg.drawLine(0, base+1, Xmax,base+1); + ucg.setColor(0, 120, 0); +} +void setup() { + ucg.begin(UCG_FONT_MODE_SOLID); //初始化屏幕 + ucg.setRotate90(); //设置成横屏 如果屏幕显示方向是反的,可以修改函数 setRotate90 或 setRotate270 + Serial.begin(9600); //设置串口传输率 + sendingSerial.begin(38400); + sendingSerial.listen();//必须要加 + ucg.clearScreen(); + //cls(); + ucg.setFontMode(UCG_FONT_MODE_SOLID); + ucg.setFont(ucg_font_orgv01_hr); +} + +void loop() { + while(sendingSerial.available()){ + if(sendingSerial.peek()!='\n'){//peek()查看当前字节是不是换行 + received+=(char)sendingSerial.read(); + } + else{ + rec=true; + sendingSerial.read();//把换行符读掉 + if(received[0]=='1'){ + ignoreClr=false; + distance=received.substring(4).toInt();//个十百3位数 + x=received.substring(1,4).toInt();//第456位 三位数 + } + else if(received[0]=='2'){ + if(!ignoreClr){ + clr=true; + } + } + received=""; + } + } + if(rec){ + if(clr){ + ucg.clearScreen(); + fix(); + fix_font(); //重绘屏幕背景元素 + clr=false; + ignoreClr=true; + return; + } + else if(ignoreClr){ + return; + } + + if (distance < 100){ + ucg.setColor(255,0,0); + ucg.drawDisc(0.8*distance*cos(radians(x))+Xcent,-0.8*distance*sin(radians(x))+base, 1, UCG_DRAW_ALL); + } + else{ //超过1米以上的,用黄色画在边缘区域示意 + ucg.setColor(255,255,0); + ucg.drawDisc((outcircle-1)*cos(radians(x))+Xcent,-(outcircle-1)*sin(radians(x))+base, 1, UCG_DRAW_ALL); + } + rec=false; + } +} diff --git a/ship/ship.ino b/ship/ship.ino index 2791aeb..7521b12 100644 --- a/ship/ship.ino +++ b/ship/ship.ino @@ -32,6 +32,7 @@ long dj,z;//dj是舵机,z是螺旋桨转速 //long propeller=0,rudder=0;//propeller为螺旋桨(0-1023,512为静止),rudder为舵(0-1023,512为静止) //long s_propeller=0,s_rudder=0;//发送的信号 long propeller,rudder,content;//校验序列、读取内容和解码内容 +long response=0; const byte addresses[6] = "00001"; //创建一个数组,建立接收机地址,或者说两个模块将用于通信的“管道” int calculateDistance() { @@ -71,10 +72,9 @@ long confirm(long x){ if(x>=1000000&&x<=2000000)return x%1000000; else return -1; } -void loop() { +void loop() { radio.startListening(); - radio.startListening(); - if(radio.available()>0){ + if(radio.available()){ radio.read(&content,sizeof(content)); Serial.println("The content is"); Serial.println(content);//调试 @@ -148,6 +148,7 @@ void loop() { //测距 distance = calculateDistance(); //send distance + response=1000000+x*1000+distance; } else if(status==1){ if(x>0){ @@ -159,6 +160,7 @@ void loop() { RadarServo.write(x); //调整舵机角度 //测距 distance = calculateDistance(); + response=1000000+x*1000+distance; //send distance } else if(status=2){ @@ -173,7 +175,9 @@ void loop() { } } //send clear + response=2000000; } + radio.write(response,sizeof(response)); delay(20-distance/17); }