找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3827|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

超聲波雷達(dá)[LCD12864 和 Processing PC 顯示]

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:426684 發(fā)表于 2018-12-1 20:50 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
超聲波雷達(dá)[LCD12864 和 Processing PC 顯示]

Arduino-LCD12864 代碼:
//超聲波雷達(dá)
#include <Arduino.h>
#include "LCD12864RSPI.h"
#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
unsigned char show0[]={0xB3,0xAC,0xC9,0xF9,0xB2,0xA8,0xB2,0xE2, 0xBE,0xE0,0xC0,0xD7,0xB4,0xEF};
unsigned char show1[]={0xD7,0xAA,0xBD,0xC7};
unsigned char show2[]={0xBE,0xE0,0xC0,0xEB};
unsigned char show3[]={0xB6,0xC8};
unsigned char show4[]={0xC0,0xE5,0xC3,0xD7};
unsigned char show5[]={0xA3,0xBA};
#define TrigPin 2
#define EchoPin 4
#define PWM_pin 5
int pulsewidth = 0;   
int pos = 0;        
float Value_cm;
char jl[5];                                
char jd[3];
float temp =0;
int jdtemp =0;
void setup()
{
Serial.begin(9600);
pinMode(PWM_pin,OUTPUT);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
LCDA.Initialise();                     
delay(100);
LCDA.DisplayString(0,0,show0,AR_SIZE(show0));  
LCDA.DisplayString(1,0,show1,AR_SIZE(show1));  
LCDA.DisplayString(1,2,show5,AR_SIZE(show5));  
LCDA.DisplayString(2,0,show2,AR_SIZE(show2));
LCDA.DisplayString(2,2,show5,AR_SIZE(show5));  
LCDA.DisplayString(1,6,show3,AR_SIZE(show3));
LCDA.DisplayString(2,6,show4,AR_SIZE(show4));
}

void loop(){

for (pos = 0; pos <= 180; pos += 1) {
pulse(pos);      //設(shè)置舵機(jī)指向90度
digitalWrite(TrigPin, LOW); //低高低電平發(fā)一個短時間脈沖去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
Value_cm = float( pulseIn(EchoPin, HIGH) * 17 )/1000;
if(Value_cm>1000){ Value_cm=0;}
Serial.println(Value_cm);
temp=Value_cm;            
dtostrf(temp,4,1,jl);
jdtemp=pos;            
dtostrf(jdtemp,3,0,jd);
LCDA.DisplayString(1,3,(unsigned char *)jd,AR_SIZE(jd));
LCDA.DisplayString(2,3,(unsigned char *)jl,AR_SIZE(jl));
}
delay(10);
for (pos = 180; pos >= 0; pos -= 1) {
pulse(pos);      //設(shè)置舵機(jī)指向-90度   
digitalWrite(TrigPin, LOW); //低高低電平發(fā)一個短時間脈沖去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
Value_cm = float( pulseIn(EchoPin, HIGH) * 17 )/1000;
if(Value_cm>1000){ Value_cm=0;}
Serial.println(Value_cm);
temp=Value_cm;             //讀取日值
dtostrf(temp,4,1,jl);
jdtemp=pos;             //讀取日值
dtostrf(jdtemp,3,0,jd);
LCDA.DisplayString(1,3,(unsigned char *)jd,AR_SIZE(jd));
LCDA.DisplayString(2,3,(unsigned char *)jl,AR_SIZE(jl));
}  
//delay(10);
}

void pulse(int angle)      //設(shè)置舵機(jī)角度為angle
{
  pulsewidth=int ((angle*11)+500);  //計算高電平時間
  digitalWrite(PWM_pin,HIGH);       //設(shè)置高電平
  delayMicroseconds(pulsewidth);    //延時pulsewidth (us)
  digitalWrite(PWM_pin,LOW);        //設(shè)置低電平
  delay(20-pulsewidth/1000);        //延時20-pulsewidth/1000 (ms)
}



Arduino- Processing PC代碼:
#include <Arduino.h>
#define TrigPin 2
#define EchoPin 3
#define PWM_pin 9
int pulsewidth = 0;    //高電平時間
int pos = 0;           //
float Value_cm;

void setup()
{
     Serial.begin(9600);
     pinMode(PWM_pin,OUTPUT);
     pinMode(TrigPin, OUTPUT);
     pinMode(EchoPin, INPUT);
     pulse(0);      //設(shè)置舵機(jī)指向90度
}

void loop()
{
for (pos = 0; pos <= 180; pos += 5) {
pulse(pos);      //設(shè)置舵機(jī)指向90度
digitalWrite(TrigPin, LOW); //低高低電平發(fā)一個短時間脈沖去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
Value_cm = float( pulseIn(EchoPin, HIGH) * 17 )/1000;
//if(Value_cm>1000){ Value_cm=0;}
Serial.print("D= ");
Serial.print(Value_cm);
Serial.println(" [cm]");
delay(100);
}
delay(10);
for (pos = 180; pos >= 0; pos -= 5) {
pulse(pos);      //設(shè)置舵機(jī)指向-90度   
digitalWrite(TrigPin, LOW); //低高低電平發(fā)一個短時間脈沖去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
Value_cm = float( pulseIn(EchoPin, HIGH) * 17 )/1000;
//if(Value_cm>1000){ Value_cm=0;}
Serial.print("D= ");
Serial.print(Value_cm);
Serial.println(" [cm]");
delay(100);
}  
delay(10);
}

void pulse(int angle)      //設(shè)置舵機(jī)角度為angle
{
  pulsewidth=int ((angle*11)+500);  //計算高電平時間
  digitalWrite(PWM_pin,HIGH);       //設(shè)置高電平
  delayMicroseconds(pulsewidth);    //延時pulsewidth (us)
  digitalWrite(PWM_pin,LOW);        //設(shè)置低電平
  delay(20-pulsewidth/1000);        //延時20-pulsewidth/1000 (ms)
}



Processing 代碼:
import processing.serial.*;
PFont font;
String message;
String temp;
int mMaxDistance;
Serial myPort;
PFont myFont;
float x =0;
float angle=PI/180;
float xDirection = 150;
String[] data;
float X1=0;
float Y1=0;
void setup() {
  size(1200, 700);
  background(0);
  font = createFont("宋體.vlw",48);
  textFont(font);
myPort = new Serial(this,"com4", 9600); //設(shè)置數(shù)據(jù)來源串口號
}

void draw() {
background(0);
smooth();
int x0=600;
int y0=600;
int r=500;
noFill();
textSize(18);
strokeWeight(2);
text("超聲波測距雷達(dá)顯示屏", 430,25);
textSize(14);
text("[探索軟件制 CopyRight@2018]", 650,25);
stroke(0,255,0);
strokeWeight(2);
rect(50,50,2*550,550);
stroke(255,255,0);
strokeWeight(2);
rect(50,625,2*550, 40);
stroke(0,255,0);
strokeWeight(1);
arc(x0,y0,r/2,r/2,PI,TWO_PI);
//arc(x0,y0,r/1.75,r/1.75,PI,TWO_PI);
arc(x0,y0,r/1.5,r/1.5,PI,TWO_PI);
arc(x0,y0,r/1.25,r/1.25,PI,TWO_PI);
arc(x0,y0,r,r,PI,TWO_PI);
arc(x0,y0,1.25*r,1.25*r,PI,TWO_PI);  
arc(x0,y0,1.5*r,1.5*r,PI,TWO_PI);  
arc(x0,y0,1.75*r,1.75*r,PI,TWO_PI);
arc(x0,y0,2*r,2*r,PI,TWO_PI);
text("0", x0-510,y0);
line(x0, y0, x0-r*cos(0*angle),y0-r*sin(0*angle));
text("15", x0-r*cos(15*angle)-17,y0-r*sin(15*angle));
line(x0, y0, x0-r*cos(15*angle),y0-r*sin(15*angle));
text("30", x0-r*cos(30*angle)-17,y0-r*sin(30*angle));
line(x0, y0, x0-r*cos(30*angle),y0-r*sin(30*angle));
text("45", x0-r*cos(45*angle)-17,y0-r*sin(45*angle));
line(x0, y0, x0-r*cos(45*angle),y0-r*sin(45*angle));
text("60", x0-r*cos(60*angle)-17,y0-r*sin(60*angle));
line(x0, y0, x0-r*cos(60*angle),y0-r*sin(60*angle));
text("75", x0-r*cos(75*angle)-17,y0-r*sin(75*angle));
line(x0, y0, x0-r*cos(75*angle),y0-r*sin(75*angle));
text("90", x0-r*cos(90*angle)-17,y0-r*sin(90*angle));
line(x0, y0, x0-r*cos(90*angle),y0-r*sin(90*angle));
text("105", x0-r*cos(105*angle)-15,y0-r*sin(105*angle)-5);
line(x0, y0, x0-r*cos(105*angle),y0-r*sin(105*angle));
text("120", x0-r*cos(120*angle)-10,y0-r*sin(120*angle)-5);
line(x0, y0, x0-r*cos(120*angle),y0-r*sin(120*angle));
text("135", x0-r*cos(135*angle)-8,y0-r*sin(135*angle)-5);
line(x0, y0, x0-r*cos(135*angle),y0-r*sin(135*angle));
text("150", x0-r*cos(150*angle)-3,y0-r*sin(150*angle)-3);
line(x0, y0, x0-r*cos(150*angle),y0-r*sin(150*angle));

text("165", x0-r*cos(165*angle)-3,y0-r*sin(165*angle)-3);
line(x0, y0, x0-r*cos(165*angle),y0-r*sin(165*angle));

text("180", x0-r*cos(180*angle)+2,y0-r*sin(180*angle));
line(x0, y0, x0-r*cos(180*angle),y0-r*sin(180*angle));

stroke(255,255,0);
//x = x + PI/xDirection ;
x = x + HALF_PI/xDirection ;
line(x0, y0, x0-r*cos(x),y0-r*sin(x));
//stroke(0,0,0);
//line(500, 500, 500-500*cos(x),500-500*sin(x));
if(myPort.available()>0){
temp = myPort.readString();
if(temp==""){temp="0.0";}
fill(255,255,255);
stroke(255,255,255);
text("角度:", 480+10,650);
text(int(x*60), 480+50,650);
text("度", 480+80,650);
text("距離:", 480+120,650);
text(int(temp), 480+160,650);
text("厘米", 480+200,650);
}else{
temp = "";
if(temp==""){temp="0.0";}
fill(255,255,255);
stroke(255,255,255);
text("角度:", 480+10,650);
text(int(x*60), 480+50,650);
text("度", 480+80,650);
text("距離:", 480+120,650);
text(int(temp), 480+160,650);
text("厘米", 480+200,650);
}
X1=int(temp)*cos(x);
Y1=int(temp)*sin(x);
ellipse(x0-X1, y0-Y1, 15, 15);
if(x>3.14){ x=0;}
}


視頻:
https://pan.baidu.com/s/1siDzLxza5sVHmeyAbSnGDw

超聲波雷達(dá).mp4

3.53 MB, 下載次數(shù): 17, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表