107 lines
3.1 KiB
Arduino
107 lines
3.1 KiB
Arduino
|
#include <SPI.h>
|
|||
|
#include<SoftwareSerial.h>
|
|||
|
#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;
|
|||
|
}
|
|||
|
}
|