ARDUINO
A4和A5
#include "U8glib.h" #include "DHT.h" U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); #define DHTTYPE DHT22 // DHT 22 (AM2302) #define DHTPIN 2 // what pin we're connected to DHT dht(DHTPIN, DHTTYPE); void setup() { // put your setup code here, to run once: u8g.setFont(u8g_font_8x13B); u8g.setFontRefHeightText(); u8g.setFontPosTop(); Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); } void loop() { // put your main code here, to run repeatedly: float h = dht.readHumidity(); float t = dht.readTemperature(); delay(2000); // check if returns are valid, if they are NaN (not a number) then something went wrong! if (isnan(t) || isnan(h)) { Serial.println("Failed to read from DHT"); } else { Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C"); u8g.firstPage(); do{ u8g.drawStr(0, 0, "Hum"); u8g.setPrintPos(40, 0); u8g.print(h);u8g.print("%"); u8g.drawStr(0, 20, "Temp"); u8g.setPrintPos(40, 20); u8g.print(t);u8g.print("c"); }while(u8g.nextPage()); } }
采集激光显示
#include "U8glib.h" U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); #include <SoftwareSerial.h> SoftwareSerial mySerial(4,5);//定义软串口,3号端口为TX,2号端口为RX char buff[4]={0x80,0x06,0x03,0x77}; char Oncebuff[4]={0x80,0x06,0x02,0x78}; unsigned char data[11]={0}; String distance_send="0"; int miao =0; int fen=0; int hour=0; String TestDistance(){ //String distance_send="0"; while(1) { if(mySerial.available()>0)//判断串口是否有数据可读 { delay(50); for(int i=0;i<11;i++) { data[i]=mySerial.read(); } unsigned char Check=0; for(int i=0;i<10;i++) { Check=Check+data[i]; } Check=~Check+1; if(data[10]==Check) { if(data[3]=='E'&&data[4]=='R'&&data[5]=='R') { //Serial.println("Out of range"); distance_send="-1"; return distance_send; break; } else { float distance=0; distance=(data[3]-0x30)*100+(data[4]-0x30)*10+(data[5]-0x30)*1+(data[7]-0x30)*0.1+(data[8]-0x30)*0.01+(data[9]-0x30)*0.001; distance=distance*1000; //换算成mm //Serial.print("Cur Distance = "); // Serial.print(distance,1); // Serial.println(" MM"); distance_send=String(distance); // 测两次 防止缓存没变 return distance_send; } } else { // Serial.println("Invalid Data!"); distance_send="-1"; return distance_send; break; } } delay(30); } } String ReadOneDis(){ int count=0; while(1){ mySerial.print(Oncebuff); // 测量单次 if (count >=2){ //Serial.print("==== Real Distance === "); //Serial.print(distance_send); // Serial.println(" MM"); return "ok"; } else{ //Serial.println(count); distance_send=TestDistance(); if(distance_send!="-1") { count=count+1; // 统计成功次数 } } } } int btn_beign_stop=2; int btn_reset=3; int state_begin_stop=0; int state_rest=0; unsigned int timeAllcnt=0;// 记录总时间 unsigned int timecnt=0;// 记录总时间 void Interrupt_btn_beign_stop(){ state_begin_stop=!state_begin_stop; if(state_begin_stop) {//Serial.println("当前状态:开始"); } else{ // Serial.println("当前状态:停止"); } } void Interrupt_btn_reset(){ state_rest=1; //Serial.println("复位按键"); timecnt = 0; timeAllcnt=0; state_begin_stop=1;// 自动开始 } bool state_old=0; bool state_cur=0; void setup() { u8g.setFont(u8g_font_8x13B); u8g.setFontRefHeightText(); u8g.setFontPosTop(); Serial.begin(9600); mySerial.begin(9600); pinMode(btn_beign_stop, INPUT); pinMode(btn_reset, INPUT); attachInterrupt(digitalPinToInterrupt(btn_beign_stop), Interrupt_btn_beign_stop, FALLING);//FALLING RISING attachInterrupt(digitalPinToInterrupt(btn_reset), Interrupt_btn_reset, FALLING); } String msg1; String msg2; String msg3; String msg4; void loop() { timecnt=millis(); ReadOneDis(); u8g.firstPage(); do{ u8g.drawStr(0, 0, "work:"); u8g.setPrintPos(72, 0); u8g.print((state_begin_stop)); u8g.drawStr(0, 20, "distance:"); u8g.setPrintPos(72, 20); u8g.print((distance_send)); miao = int(timeAllcnt/1000); msg3="time:"+String(hour)+":"+String(fen)+":"+String(miao); u8g.drawStr(0, 40, "time:"); u8g.setPrintPos(0, 40); u8g.print(msg3); }while(u8g.nextPage()); float distance_light=distance_send.toFloat(); if(distance_light<=800){// 距离阈值 单位毫米 state_cur=1; } else{ state_cur=0; } if(state_rest==1){ timecnt=0; state_rest=0; } else { timecnt = millis()-timecnt; } if(state_begin_stop && state_cur==1 ){ timeAllcnt=timeAllcnt+timecnt; if(timeAllcnt>=60000){ fen=fen+1; if(fen>=60){ hour=hour+1; } timeAllcnt=timeAllcnt%1000; } } }