![]() |
發布時間: 2016-4-16 08:50
正文摘要:購得夏普GP2Y1010AU0F 傳感器,手頭有我自己寫好引導程序的ATMEGA328P的芯片,有Arduino R3板(可往芯片里寫程序),還有1602液晶屏,想用自己搭建的ATMEGA328P最小系統,制作一個PM2.5檢測儀,,只差 ... |
#include <UTFT.h> UTFT myGLCD(YYROBOT_TFT144,A2,A1,A5,A4,A3); // Remember to change the model parameter to suit your display module! //YYROBOT_TFT144 屏幕型號,不用修改 //SDA----A2 //SCL----A1 //CS-----A5 //RST----A4 //RS----A3 //LED---A0 UTFT庫里面設定的,如果需要修改需要修改庫文件 extern uint8_t SmallFont[];//原始文件在庫文件的DefaultFonts.c中 extern uint8_t BigFont[];//原始文件在庫文件的DefaultFonts.c中 extern uint8_t SevenSegNumFont[];//原始文件在庫文件的DefaultFonts.c中 const uint8_t tfont16[] = { 0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80,0x0F,0x00,0x00,0x00,/*"P",0*/ 0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00,/*"M",1*/ 0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00,/*"2",2*/ 0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*".",3*/ 0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00,/*"5",4*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",5*/ 0x08,0x20,0x06,0x20,0x40,0x7E,0x31,0x80,0x04,0x20,0x18,0x40,0x10,0x80,0x13,0xFF, 0x1C,0x02,0xF3,0x84,0x10,0x60,0x10,0x50,0x14,0x88,0x19,0x04,0x00,0x02,0x00,0x00,/*"濃",6*/ 0x00,0x02,0x00,0x0C,0x3F,0xF1,0x24,0x01,0x24,0x21,0x24,0x32,0x3F,0xAA,0xA4,0xA4, 0x64,0xA4,0x24,0xA4,0x3F,0xAA,0x24,0x32,0x24,0x01,0x24,0x01,0x20,0x01,0x00,0x00,/*"度",7*/ }; #define PM2_5Serial Serial1 //用于接收PM2.5數據 //本例程使用MEGA2560,有Serial1,若使用UNO,請將這里修改為Serial //并且把DebugSerial.begin(9600);修改為DebugSerial.begin(2400); //串口界面通過2400波特率觀看數據 #define DebugSerial Serial //用于把數據通過串口界面返回 byte buffer[7] = { }; int count = 0; bool bufferComplete = false; void setup() { PM2_5Serial.begin(2400); DebugSerial.begin(9600); randomSeed(analogRead(0)); // Setup the LCD myGLCD.InitLCD();//初始化液晶 myGLCD.InitLCD();//初始化兩次有利于系統穩定 myGLCD.InitLCD(PORTRAIT); myGLCD.setFont(SmallFont);//設置字體為SmallFont格式 //ChineseFont Test 16*16自定義漢字測試 myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.print("ug/m3", RIGHT, 100); //打印 Show_CH_Font16(0,10,0); Show_CH_Font16(16,10,1); Show_CH_Font16(32,10,2); Show_CH_Font16(48,10,3); Show_CH_Font16(64,10,4); //SegNum Test myGLCD.setColor(255, 255, 255); myGLCD.setBackColor(0, 0, 0); } void loop() { int ppm; int count_sum = 0; long sum = 0; while (count_sum < 10) { while (PM2_5Serial.available() > 0) { char inChar = (char)PM2_5Serial.read(); buffer[count] = (byte)inChar; // DebugSerial.print("count="); // DebugSerial.println(count); // // DebugSerial.print("buffer[count]="); // DebugSerial.println(buffer[count],HEX); if (buffer[count] == 0xAA) { count = 0; // DebugSerial.println("start"); } else if (buffer[count] == 0xFF && buffer[0] == 0xAA) { bufferComplete = true; // DebugSerial.println("bufferComplete = true;"); } count++; if (count >= 7) { count = 0; } } //把接收到的數據轉發出來 if (bufferComplete == true) { bufferComplete = false; for (int i = 0 ; i < 7 ; i++) { DebugSerial.print(buffer[i], HEX); DebugSerial.print(","); } DebugSerial.println(""); //處理數據 float v_out = 0; v_out = (float)((buffer[1] * 256) + buffer[2]) * 5 / 1024; DebugSerial.print("v_out = "); DebugSerial.println(v_out); int ppm = v_out * 1000 * 0.5; //單位為ug/m3 DebugSerial.print("ppm = "); DebugSerial.print(ppm); DebugSerial.println("ug/m3"); if(ppm >= 0) { count_sum++; sum += ppm; } } } sum /= 10; DebugSerial.println("***********"); DebugSerial.print("sum = "); DebugSerial.print(sum); DebugSerial.println("ug/m3"); DebugSerial.println("***********"); myGLCD.setFont(SevenSegNumFont); myGLCD.printNumI(sum, 0, 40, 4, '0');//顯示數值是i,位置x=0,y=40,長度4,空位置填充字符0 delay(500); } void Show_CH_Font16(int x,int y,int FontPos) { char temp,t,t1,k; int y0=y; int HZnum; for(t=0;t<32;t++)//每個16*16的漢字點陣 有32個字節 { temp=tfont16[t+32*FontPos]; for(t1=0;t1<8;t1++) { if(temp&0x80) { myGLCD.setColor(255, 255, 255);//FontColor myGLCD.drawPixel(x,y); } else { myGLCD.setColor(0, 0, 0);//BackColor myGLCD.drawPixel(x,y); } temp<<=1; y++; if((y-y0)==16) { y=y0; x++; break; } } } } |
求分享 |
yjx189 發表于 2016-4-30 16:07 你好,求打包 |
dadangjia 發表于 2016-6-4 01:38 說的什么啊? |
可以用,我用了10個pcf8574 iic模塊1602可以正常使用,很簡單的。我采用的是ds1302代碼,庫文件可以在網上找,大多類似。 |
樓上的先生,再仔細一看你上傳的程序,是一個采用1302的時鐘源代碼啊! |
dadangjia 發表于 2016-5-1 16:34 謝謝,但是I2C的板子很難伺候,我網購了2塊I2C轉接板,用時一周,把網上能搜到,能問到的所有辦法都試過了,結果是1602屏不能正常顯示,,最后又返回來使用四線式連接,才解決的問題!!去他地吧I2C!! |
|
本帖最后由 yjx189 于 2016-4-30 16:50 編輯 下一步打算用手頭就有的89C2051單片機,加上1602顯示屏,使用壇友送我的SP200S編程器寫程序,做一個能測量電感,電容的單片機LC表!這樣的LC表還是有一定的使用價值的! |
yjx189 發表于 2016-4-30 16:07 謝謝版主先生的在此加分, |
admin 發表于 2016-4-16 22:08 謝謝版主!但他那個似乎是51單片機的,而我用的是ATMEGA328P的單片機芯片,需要的是Arduino的源程序! |