max32630

Dependencies:   OLED USBDevice max32630fthr

Fork of FTHR_OLED by Greg Steiert

Committer:
feilang
Date:
Wed Sep 27 14:28:49 2017 +0000
Revision:
13:b39926d89b1f
Parent:
12:53ca22948a98
Child:
15:d346e81089ac
nothing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
switches 0:60a522ae2e35 1 #include "mbed.h"
switches 2:57500e991166 2 #include "max32630fthr.h"
switches 8:1d48f139567d 3 #include "Adafruit_SSD1306.h"
switches 1:6923b075c8d7 4 #include "USBSerial.h"
switches 0:60a522ae2e35 5
switches 6:684c51f32c1d 6 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
switches 0:60a522ae2e35 7
feilang 11:bf8283c27606 8 I2C oledI2C(P3_4, P3_5); // SDA, SCL
switches 8:1d48f139567d 9
switches 1:6923b075c8d7 10 // Hardware serial port over DAPLink
switches 2:57500e991166 11 Serial daplink(P2_1, P2_0);
switches 1:6923b075c8d7 12
feilang 11:bf8283c27606 13 // serial port for pm1003
feilang 11:bf8283c27606 14 Serial pmSerial(P3_1, P3_0);
feilang 11:bf8283c27606 15 //for 595 drive LED bar
feilang 11:bf8283c27606 16 DigitalOut ledbarClk(P5_3);
feilang 11:bf8283c27606 17 DigitalOut ledbardat(P5_4);
feilang 11:bf8283c27606 18 DigitalOut ledbarlatch(P5_5);
feilang 12:53ca22948a98 19 DigitalOut ledEnable(P5_6);
feilang 12:53ca22948a98 20 int airBufferPrcess( float a, float b);
feilang 11:bf8283c27606 21 void shirftDate(unsigned int date);
switches 9:ecdad18f61c2 22 /* Analog inputs 0 and 1 have internal dividers to allow measuring 5V signals
switches 9:ecdad18f61c2 23 * The dividers are selected by using inputs AIN_5 and AIN_5 respectively.
switches 9:ecdad18f61c2 24 * The full scale range for AIN0-3 is 1.2V
switches 9:ecdad18f61c2 25 * The full scale range for AIN4-5 is 6.0V
switches 9:ecdad18f61c2 26 */
feilang 11:bf8283c27606 27 AnalogIn fireAir(AIN_4);
feilang 11:bf8283c27606 28 AnalogIn alcohol(AIN_5);
switches 8:1d48f139567d 29
switches 0:60a522ae2e35 30 // main() runs in its own thread in the OS
switches 0:60a522ae2e35 31 // (note the calls to Thread::wait below for delays)
switches 0:60a522ae2e35 32 int main()
switches 0:60a522ae2e35 33 {
feilang 11:bf8283c27606 34 char incomeByte[32];
feilang 11:bf8283c27606 35 unsigned int pm25;
feilang 11:bf8283c27606 36 unsigned int pm1;
feilang 11:bf8283c27606 37 unsigned int pm10;
feilang 12:53ca22948a98 38 unsigned int airDisplayDate;
feilang 12:53ca22948a98 39 //unsigned int alcoholDate,fireAirDate;
switches 2:57500e991166 40
feilang 12:53ca22948a98 41 //daplink.printf("start \r\n");
feilang 11:bf8283c27606 42 pmSerial.baud(9600);
switches 10:1f5e78dd4a7c 43
switches 10:1f5e78dd4a7c 44 Thread::wait(50); // Give the supplies time to settle before initializing the display
feilang 11:bf8283c27606 45 Adafruit_SSD1306_I2c OLED(oledI2C);
feilang 11:bf8283c27606 46 //OLED.printf("%ux%u OLED Display\r\n", OLED.width(), OLED.height());
feilang 11:bf8283c27606 47 //OLED.printf("HelloWorld \r");
feilang 11:bf8283c27606 48 //OLED.display();
switches 8:1d48f139567d 49
feilang 12:53ca22948a98 50 //daplink.printf("OLED init over \r\n");
switches 1:6923b075c8d7 51 while(1) {
switches 8:1d48f139567d 52 Thread::wait(250);
feilang 11:bf8283c27606 53
feilang 11:bf8283c27606 54 while(pmSerial.getc() !=0x42){}
feilang 11:bf8283c27606 55 if(pmSerial.getc() == 0x4d){
feilang 11:bf8283c27606 56 for(int i = 2; i < 32; i++){
feilang 11:bf8283c27606 57 incomeByte[i] = pmSerial.getc();
feilang 11:bf8283c27606 58 }
feilang 11:bf8283c27606 59
feilang 11:bf8283c27606 60 unsigned int calcsum = 0;
feilang 11:bf8283c27606 61 incomeByte[0] = 0x42;
feilang 11:bf8283c27606 62 incomeByte[1] = 0x4d;
feilang 11:bf8283c27606 63 unsigned int exptsum = (incomeByte[30]<<8) + incomeByte[31];
feilang 11:bf8283c27606 64 for(int i = 0; i < 30; i++){
feilang 11:bf8283c27606 65 calcsum += incomeByte[i];
feilang 12:53ca22948a98 66 // daplink.printf("income[%d],%d\n",i,incomeByte[i]);
feilang 11:bf8283c27606 67 }
feilang 11:bf8283c27606 68 if( calcsum == exptsum)
feilang 11:bf8283c27606 69 {
feilang 12:53ca22948a98 70 //daplink.printf("check ok \n");
feilang 11:bf8283c27606 71 pm1 = incomeByte[10] + incomeByte[11];
feilang 11:bf8283c27606 72 pm25 = incomeByte[12] + incomeByte[13];
feilang 11:bf8283c27606 73 pm10 = incomeByte[14] + incomeByte[15];
feilang 11:bf8283c27606 74
feilang 12:53ca22948a98 75 //daplink.printf("pm1:%d\n",pm1);
feilang 12:53ca22948a98 76 //daplink.printf("pm2.5:%d\n",pm25);
feilang 12:53ca22948a98 77 //daplink.printf("pm10:%d\n",pm10);
feilang 11:bf8283c27606 78
feilang 11:bf8283c27606 79 }
feilang 11:bf8283c27606 80
switches 8:1d48f139567d 81 }
feilang 11:bf8283c27606 82
feilang 11:bf8283c27606 83 Thread::wait(10);
feilang 11:bf8283c27606 84 OLED.clearDisplay();
feilang 11:bf8283c27606 85 OLED.setTextCursor(0,0);
feilang 12:53ca22948a98 86 OLED.printf("Car air memter \n");
feilang 12:53ca22948a98 87 OLED.printf("CO: %1.2f\n", (6.0f * fireAir) ); // fireAir inputs 4
feilang 12:53ca22948a98 88 OLED.printf("alcohol: %1.2f\n", (6.0f * alcohol) ); // alcohol inputs 5
feilang 12:53ca22948a98 89 OLED.printf("PM2.5: %d \n", pm25 ); //
feilang 12:53ca22948a98 90 OLED.printf("PM10 : %d \n", pm10 ); //
feilang 12:53ca22948a98 91 OLED.printf("PM1 : %d \n", pm1 ); //
feilang 11:bf8283c27606 92 OLED.display();
feilang 12:53ca22948a98 93 daplink.printf("CO : %1.2f\n", (6.0f * fireAir) );
feilang 12:53ca22948a98 94 daplink.printf("alcohol: %1.2f\n", (6.0f * alcohol) );
feilang 12:53ca22948a98 95
feilang 12:53ca22948a98 96 airDisplayDate = airBufferPrcess( (6.0f * fireAir), (6.0f *alcohol) );
feilang 12:53ca22948a98 97 daplink.printf("date for shirtf:%d\n",airDisplayDate);
feilang 12:53ca22948a98 98 ledEnable = 1;
feilang 12:53ca22948a98 99 ledEnable = 0;
feilang 13:b39926d89b1f 100 shirftDate( ~airDisplayDate );
feilang 13:b39926d89b1f 101 //shirftDate( 0x00ffff);
feilang 11:bf8283c27606 102
feilang 12:53ca22948a98 103 while((pm25 > 100)||(fireAir > 1)||(alcohol > 1)){
feilang 11:bf8283c27606 104
feilang 11:bf8283c27606 105 OLED.clearDisplay();
feilang 12:53ca22948a98 106 Thread::wait(50);
feilang 12:53ca22948a98 107 OLED.printf("ERROR \n");
feilang 12:53ca22948a98 108 OLED.printf("ERROR \n");
feilang 12:53ca22948a98 109 OLED.printf("ERROR \n");
feilang 12:53ca22948a98 110 OLED.printf("ERROR \n");
feilang 12:53ca22948a98 111 OLED.printf("ERROR \n");
feilang 12:53ca22948a98 112 OLED.printf("ERROR \n");
feilang 11:bf8283c27606 113 OLED.display();
feilang 11:bf8283c27606 114 Thread::wait(500);
feilang 11:bf8283c27606 115 }
feilang 11:bf8283c27606 116
feilang 11:bf8283c27606 117
switches 0:60a522ae2e35 118 }
switches 0:60a522ae2e35 119 }
switches 0:60a522ae2e35 120
feilang 11:bf8283c27606 121 /*传入LB数据,共24位取低位24*/
feilang 11:bf8283c27606 122 /*低20位用于两个LED bar*/
feilang 11:bf8283c27606 123 void shirftDate(unsigned int date){
feilang 12:53ca22948a98 124 unsigned int _date = date;
feilang 12:53ca22948a98 125 //_date &= 0xfffff;
feilang 12:53ca22948a98 126 for( int i = 24; i > 0; i-- ){
feilang 12:53ca22948a98 127 if( _date & (0x01 << i ) ){
feilang 12:53ca22948a98 128 ledbardat = 1;
feilang 11:bf8283c27606 129 }else{
feilang 11:bf8283c27606 130 ledbardat = 0;
feilang 11:bf8283c27606 131 }
feilang 12:53ca22948a98 132 // daplink.printf("date ledbardat:%d\n",ledbardat);
feilang 12:53ca22948a98 133 ledbarClk = 0;
feilang 12:53ca22948a98 134 Thread::wait(0.5);
feilang 11:bf8283c27606 135 ledbarClk = 1;
feilang 11:bf8283c27606 136 }
feilang 12:53ca22948a98 137 // /*补充4位空白*/
feilang 12:53ca22948a98 138 // for(int i= 0; i < 4 ; i++){
feilang 12:53ca22948a98 139 // ledbardat = 0;
feilang 12:53ca22948a98 140 // ledbarClk = 1;
feilang 12:53ca22948a98 141 // Thread::wait(0.5);
feilang 12:53ca22948a98 142 // ledbarClk = 0;
feilang 12:53ca22948a98 143 // }
feilang 11:bf8283c27606 144
feilang 12:53ca22948a98 145 ledbarlatch = 0;
feilang 12:53ca22948a98 146 Thread::wait(0.5);
feilang 11:bf8283c27606 147 ledbarlatch = 1;
feilang 11:bf8283c27606 148
feilang 11:bf8283c27606 149 }
feilang 12:53ca22948a98 150
feilang 11:bf8283c27606 151 //空气模拟数据处理,a,b分别表示 CO与acohol;
feilang 11:bf8283c27606 152 //采用对数级浓度增加对应一位,
feilang 12:53ca22948a98 153 int airBufferPrcess( float a, float b)
feilang 11:bf8283c27606 154 {
feilang 12:53ca22948a98 155 unsigned int _a , _b;
feilang 12:53ca22948a98 156 _a = (unsigned int)( a / 0.1);
feilang 12:53ca22948a98 157 _b = (unsigned int)( b / 0.1);
feilang 12:53ca22948a98 158 daplink.printf("airDisplayDate:%d\n",_a);
feilang 12:53ca22948a98 159 daplink.printf("airDisplayDate:%d\n",_b);
feilang 11:bf8283c27606 160 unsigned int _ProcessDate[3]={1,1,0};
feilang 11:bf8283c27606 161 for(int i=0;i<10;i++){
feilang 12:53ca22948a98 162 _a >>= 1;
feilang 12:53ca22948a98 163 _b >>= 1;
feilang 12:53ca22948a98 164 if(_a > 0){
feilang 11:bf8283c27606 165 _ProcessDate[0] <<= 1;
feilang 11:bf8283c27606 166 _ProcessDate[0]++;
feilang 11:bf8283c27606 167 }
feilang 12:53ca22948a98 168 if(_b > 0){
feilang 11:bf8283c27606 169 _ProcessDate[1] <<= 1;
feilang 11:bf8283c27606 170 _ProcessDate[1]++;
feilang 11:bf8283c27606 171 }
feilang 11:bf8283c27606 172 _ProcessDate[2] = ( _ProcessDate[0] << 10);
feilang 11:bf8283c27606 173 _ProcessDate[2] += _ProcessDate[1];
feilang 11:bf8283c27606 174 }
feilang 11:bf8283c27606 175
feilang 11:bf8283c27606 176 return _ProcessDate[2];
feilang 12:53ca22948a98 177 }