max32630

Dependencies:   OLED USBDevice max32630fthr

Fork of FTHR_OLED by Greg Steiert

Committer:
feilang
Date:
Sat Sep 30 06:24:55 2017 +0000
Revision:
15:d346e81089ac
Parent:
13:b39926d89b1f
??595????????

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 15:d346e81089ac 100 shirftDate( (~airDisplayDate)<<4 );
feilang 15:d346e81089ac 101 Thread::wait(500);
feilang 13:b39926d89b1f 102 //shirftDate( 0x00ffff);
feilang 11:bf8283c27606 103
feilang 12:53ca22948a98 104 while((pm25 > 100)||(fireAir > 1)||(alcohol > 1)){
feilang 11:bf8283c27606 105
feilang 11:bf8283c27606 106 OLED.clearDisplay();
feilang 12:53ca22948a98 107 Thread::wait(50);
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 12:53ca22948a98 113 OLED.printf("ERROR \n");
feilang 11:bf8283c27606 114 OLED.display();
feilang 11:bf8283c27606 115 Thread::wait(500);
feilang 11:bf8283c27606 116 }
feilang 11:bf8283c27606 117
feilang 11:bf8283c27606 118
switches 0:60a522ae2e35 119 }
switches 0:60a522ae2e35 120 }
switches 0:60a522ae2e35 121
feilang 11:bf8283c27606 122 /*传入LB数据,共24位取低位24*/
feilang 11:bf8283c27606 123 /*低20位用于两个LED bar*/
feilang 11:bf8283c27606 124 void shirftDate(unsigned int date){
feilang 12:53ca22948a98 125 unsigned int _date = date;
feilang 12:53ca22948a98 126 //_date &= 0xfffff;
feilang 15:d346e81089ac 127 for( int i = 24; i >= 0; i-- ){
feilang 12:53ca22948a98 128 if( _date & (0x01 << i ) ){
feilang 12:53ca22948a98 129 ledbardat = 1;
feilang 11:bf8283c27606 130 }else{
feilang 11:bf8283c27606 131 ledbardat = 0;
feilang 11:bf8283c27606 132 }
feilang 12:53ca22948a98 133 // daplink.printf("date ledbardat:%d\n",ledbardat);
feilang 15:d346e81089ac 134 Thread::wait(0.5);
feilang 12:53ca22948a98 135 ledbarClk = 0;
feilang 12:53ca22948a98 136 Thread::wait(0.5);
feilang 11:bf8283c27606 137 ledbarClk = 1;
feilang 11:bf8283c27606 138 }
feilang 12:53ca22948a98 139 // /*补充4位空白*/
feilang 12:53ca22948a98 140 // for(int i= 0; i < 4 ; i++){
feilang 12:53ca22948a98 141 // ledbardat = 0;
feilang 12:53ca22948a98 142 // ledbarClk = 1;
feilang 12:53ca22948a98 143 // Thread::wait(0.5);
feilang 12:53ca22948a98 144 // ledbarClk = 0;
feilang 12:53ca22948a98 145 // }
feilang 11:bf8283c27606 146
feilang 12:53ca22948a98 147 ledbarlatch = 0;
feilang 12:53ca22948a98 148 Thread::wait(0.5);
feilang 11:bf8283c27606 149 ledbarlatch = 1;
feilang 11:bf8283c27606 150
feilang 11:bf8283c27606 151 }
feilang 12:53ca22948a98 152
feilang 11:bf8283c27606 153 //空气模拟数据处理,a,b分别表示 CO与acohol;
feilang 11:bf8283c27606 154 //采用对数级浓度增加对应一位,
feilang 12:53ca22948a98 155 int airBufferPrcess( float a, float b)
feilang 11:bf8283c27606 156 {
feilang 12:53ca22948a98 157 unsigned int _a , _b;
feilang 12:53ca22948a98 158 _a = (unsigned int)( a / 0.1);
feilang 12:53ca22948a98 159 _b = (unsigned int)( b / 0.1);
feilang 12:53ca22948a98 160 daplink.printf("airDisplayDate:%d\n",_a);
feilang 12:53ca22948a98 161 daplink.printf("airDisplayDate:%d\n",_b);
feilang 11:bf8283c27606 162 unsigned int _ProcessDate[3]={1,1,0};
feilang 11:bf8283c27606 163 for(int i=0;i<10;i++){
feilang 12:53ca22948a98 164 _a >>= 1;
feilang 12:53ca22948a98 165 _b >>= 1;
feilang 12:53ca22948a98 166 if(_a > 0){
feilang 11:bf8283c27606 167 _ProcessDate[0] <<= 1;
feilang 11:bf8283c27606 168 _ProcessDate[0]++;
feilang 11:bf8283c27606 169 }
feilang 12:53ca22948a98 170 if(_b > 0){
feilang 11:bf8283c27606 171 _ProcessDate[1] <<= 1;
feilang 11:bf8283c27606 172 _ProcessDate[1]++;
feilang 11:bf8283c27606 173 }
feilang 11:bf8283c27606 174 _ProcessDate[2] = ( _ProcessDate[0] << 10);
feilang 11:bf8283c27606 175 _ProcessDate[2] += _ProcessDate[1];
feilang 11:bf8283c27606 176 }
feilang 11:bf8283c27606 177
feilang 11:bf8283c27606 178 return _ProcessDate[2];
feilang 12:53ca22948a98 179 }