Arduino 测距和OLED显示

oled 型号是128*64IIC的,参考了几个资料。我用的是U8glib。 遇到的最大麻烦就是现实距离,数字转换为char, 试了很多次,最后发现用itoa , 浮点用dtostrf。 定义char时要有长度,否则转换是会出乱码。

todo: 如何设定好刷新显示的时间

源代码

#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);  // I2C / TWI

long duration;
int distance;
int No=0;    //测距刷新次数
char  disTxt[20], c[10];
const int trig=10;
const int echo=9;

void draw(void) {

// graphic commands to redraw the complete screen should be placed here

u8g.setFont(u8g_font_unifont);

//u8g.setFont(u8g_font_osb21);
Serial.println(No);
itoa(No, disTxt, 10);
u8g.drawStr( 0, 22, disTxt);
itoa(distance, disTxt, 10);
u8g.drawStr( 0, 48, disTxt);
Serial.println(disTxt);
// float  f=3.1415;
// dtostrf(f,1,2,c);
// Serial.println(c);
No++;

}

int calculateDistance(){
    digitalWrite(trig, LOW); 
    delayMicroseconds(2);
     digitalWrite(trig, HIGH); 
    delayMicroseconds(10);
    digitalWrite(trig, LOW);
    duration = pulseIn(echo, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
    distance= duration*0.034/2;
    return distance;
}


void setup(void) {
   Serial.begin(9600);
  Serial.println("welcome to arduino");
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop(void) {

// picture loop

u8g.firstPage();

do {
distance=calculateDistance();
draw();

} while( u8g.nextPage() );

// rebuild the picture after some delay

delay(1000);

}

https://www.jianshu.com/p/f70bee2dad1e

U8glib wiki资料 里面能告诉你很多关于硬件接线,代码的使用等等

U8glib in Google Code 访问这个页面需要,否则无法阅读

U8glib 使用手册查询 英文 需要使用,里面能够让你了解到很多U8glib库里面的方法和函数

这里说的SDA SLC连接A4 A5,我用的就是板上的SDA 和SLC

 

https://blog.csdn.net/TonyIOT/article/details/96367511  这里用的adafruit 库

https://blog.csdn.net/u012997311/article/details/83024472 这里用了getmode, 我没用,也没问题

https://blog.csdn.net/TonyIOT/article/details/103269514 这个用了adafruit库,显示距离是直接用int 类型没问题,省去了转换字符的操作。



 

 

你可能感兴趣的:(Arduino)