Display four graphs of each value (NTC, variable resistor, DHT11-Temperature, DHT11-Humidity).
Dependencies: SSD1308_128x64_I2C Grove_temperature DHT
main.cpp@1:3c0e89bb197c, 2019-12-11 (annotated)
- Committer:
- dcj001
- Date:
- Wed Dec 11 17:11:00 2019 +0000
- Revision:
- 1:3c0e89bb197c
- Parent:
- 0:e729b270d1d4
Display four graphs of each value (NTC, variable resistor, DHT11-Temperature, DHT11-Humidity).
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dcj001 | 0:e729b270d1d4 | 1 | #include "mbed.h" |
dcj001 | 0:e729b270d1d4 | 2 | #include "SSD1308.h" |
dcj001 | 0:e729b270d1d4 | 3 | #include "logo.h" |
dcj001 | 0:e729b270d1d4 | 4 | #include "Grove_temperature.h" |
dcj001 | 0:e729b270d1d4 | 5 | #include "DHT.h" |
dcj001 | 0:e729b270d1d4 | 6 | #include<stdio.h> |
dcj001 | 0:e729b270d1d4 | 7 | |
dcj001 | 0:e729b270d1d4 | 8 | ////OLED |
dcj001 | 0:e729b270d1d4 | 9 | I2C i2c(PB_9,PB_8); |
dcj001 | 0:e729b270d1d4 | 10 | SSD1308 oled = SSD1308(&i2c, SSD1308_SA0); |
dcj001 | 0:e729b270d1d4 | 11 | ///////////// |
dcj001 | 0:e729b270d1d4 | 12 | Grove_temperature temp(PA_1); //thermistance |
dcj001 | 0:e729b270d1d4 | 13 | |
dcj001 | 0:e729b270d1d4 | 14 | DigitalOut myled(LED1); //DHT11 // we will use the led embedded on the map |
dcj001 | 0:e729b270d1d4 | 15 | DHT dht11(PB_10,DHT11); |
dcj001 | 0:e729b270d1d4 | 16 | |
dcj001 | 0:e729b270d1d4 | 17 | AnalogIn potar(A3); //potaranalogic |
dcj001 | 0:e729b270d1d4 | 18 | |
dcj001 | 0:e729b270d1d4 | 19 | ///////////// |
dcj001 | 0:e729b270d1d4 | 20 | InterruptIn mybutton(USER_BUTTON); |
dcj001 | 0:e729b270d1d4 | 21 | int j=1; |
dcj001 | 0:e729b270d1d4 | 22 | int count=1; |
dcj001 | 0:e729b270d1d4 | 23 | int tem1[30]; |
dcj001 | 0:e729b270d1d4 | 24 | |
dcj001 | 0:e729b270d1d4 | 25 | void pressed() |
dcj001 | 0:e729b270d1d4 | 26 | { |
dcj001 | 0:e729b270d1d4 | 27 | oled.clearDisplay_zone(); //clear the zone of displaying graph |
dcj001 | 0:e729b270d1d4 | 28 | j++; |
dcj001 | 0:e729b270d1d4 | 29 | if(j>4)j=1; |
dcj001 | 0:e729b270d1d4 | 30 | count=1; |
dcj001 | 0:e729b270d1d4 | 31 | for(int t=0;t<30;t++) |
dcj001 | 0:e729b270d1d4 | 32 | tem1[t]=32; ///The data is line 32 of the grah2_point[][4] array, which is {0x00,0x00,0x00,0x00} |
dcj001 | 0:e729b270d1d4 | 33 | |
dcj001 | 0:e729b270d1d4 | 34 | } |
dcj001 | 0:e729b270d1d4 | 35 | |
dcj001 | 0:e729b270d1d4 | 36 | |
dcj001 | 0:e729b270d1d4 | 37 | //////main |
dcj001 | 0:e729b270d1d4 | 38 | int main() { |
dcj001 | 0:e729b270d1d4 | 39 | int i; |
dcj001 | 0:e729b270d1d4 | 40 | float x; |
dcj001 | 0:e729b270d1d4 | 41 | |
dcj001 | 0:e729b270d1d4 | 42 | |
dcj001 | 0:e729b270d1d4 | 43 | |
dcj001 | 0:e729b270d1d4 | 44 | int err; |
dcj001 | 0:e729b270d1d4 | 45 | float temperature; |
dcj001 | 0:e729b270d1d4 | 46 | float humidite; |
dcj001 | 0:e729b270d1d4 | 47 | |
dcj001 | 0:e729b270d1d4 | 48 | char buffer_1[10]; |
dcj001 | 0:e729b270d1d4 | 49 | char buffer_2[10]; |
dcj001 | 0:e729b270d1d4 | 50 | char buffer_3[10]; |
dcj001 | 0:e729b270d1d4 | 51 | char buffer_4[10]; |
dcj001 | 0:e729b270d1d4 | 52 | |
dcj001 | 0:e729b270d1d4 | 53 | oled.display_Axis_y(); |
dcj001 | 0:e729b270d1d4 | 54 | oled.display_Axis_x(); |
dcj001 | 0:e729b270d1d4 | 55 | |
dcj001 | 0:e729b270d1d4 | 56 | while (true) |
dcj001 | 0:e729b270d1d4 | 57 | { |
dcj001 | 0:e729b270d1d4 | 58 | mybutton.fall(&pressed); |
dcj001 | 0:e729b270d1d4 | 59 | switch(j) |
dcj001 | 0:e729b270d1d4 | 60 | {case 1: |
dcj001 | 0:e729b270d1d4 | 61 | for(i=0;i<30;i++) |
dcj001 | 0:e729b270d1d4 | 62 | { |
dcj001 | 0:e729b270d1d4 | 63 | x=temp.getTemperature(); |
dcj001 | 0:e729b270d1d4 | 64 | if(count==1)tem1[i]=(int)(x-15);//offset |
dcj001 | 0:e729b270d1d4 | 65 | else |
dcj001 | 0:e729b270d1d4 | 66 | { |
dcj001 | 0:e729b270d1d4 | 67 | for(int m=0;m<29;m++) |
dcj001 | 0:e729b270d1d4 | 68 | { tem1[m]=tem1[m+1]; } |
dcj001 | 0:e729b270d1d4 | 69 | tem1[29]=(int)(x-15); |
dcj001 | 0:e729b270d1d4 | 70 | } |
dcj001 | 0:e729b270d1d4 | 71 | |
dcj001 | 0:e729b270d1d4 | 72 | printf("temperature = %2d\n", tem1[i]); |
dcj001 | 0:e729b270d1d4 | 73 | sprintf(buffer_1, "tem_NTC: %5.2f C",x); |
dcj001 | 0:e729b270d1d4 | 74 | oled.setHorizontalAddressingMode(); |
dcj001 | 0:e729b270d1d4 | 75 | oled.writeString(0,0,buffer_1); |
dcj001 | 0:e729b270d1d4 | 76 | |
dcj001 | 0:e729b270d1d4 | 77 | if(j!=1) |
dcj001 | 0:e729b270d1d4 | 78 | { |
dcj001 | 0:e729b270d1d4 | 79 | oled.clearDisplay_zone(); //clear the zone of displaying graph |
dcj001 | 0:e729b270d1d4 | 80 | i=30; //End the loop |
dcj001 | 0:e729b270d1d4 | 81 | count=1; |
dcj001 | 0:e729b270d1d4 | 82 | for(int t=0;t<30;t++) //Empty array |
dcj001 | 0:e729b270d1d4 | 83 | tem1[t]=32; ///The data is line 32 of the grah2_point[][4] array, which is {0x00,0x00,0x00,0x00} |
dcj001 | 0:e729b270d1d4 | 84 | } |
dcj001 | 0:e729b270d1d4 | 85 | else if(count==1) oled.graph(tem1,i,count); |
dcj001 | 0:e729b270d1d4 | 86 | else if(count!=1) oled.graph(tem1,30,count); |
dcj001 | 0:e729b270d1d4 | 87 | } |
dcj001 | 0:e729b270d1d4 | 88 | count++; |
dcj001 | 0:e729b270d1d4 | 89 | break; |
dcj001 | 0:e729b270d1d4 | 90 | |
dcj001 | 0:e729b270d1d4 | 91 | case 2: //////display temperature of DHT11 |
dcj001 | 0:e729b270d1d4 | 92 | for(i=0;i<30;i++) |
dcj001 | 0:e729b270d1d4 | 93 | { |
dcj001 | 0:e729b270d1d4 | 94 | err = dht11.readData(); // data recovery |
dcj001 | 0:e729b270d1d4 | 95 | if (err == 0) { |
dcj001 | 0:e729b270d1d4 | 96 | temperature = dht11.ReadTemperature(CELCIUS); |
dcj001 | 0:e729b270d1d4 | 97 | if(count==1) tem1[i]=(int)(temperature-15); |
dcj001 | 0:e729b270d1d4 | 98 | else |
dcj001 | 0:e729b270d1d4 | 99 | { |
dcj001 | 0:e729b270d1d4 | 100 | for(int m=0;m<29;m++) |
dcj001 | 0:e729b270d1d4 | 101 | { tem1[m]=tem1[m+1]; } |
dcj001 | 0:e729b270d1d4 | 102 | tem1[29]=(int)(temperature-15); |
dcj001 | 0:e729b270d1d4 | 103 | } |
dcj001 | 0:e729b270d1d4 | 104 | printf("Temperature : %4.2f C \n",temperature); // sends data serial port (default 9600bauds) |
dcj001 | 0:e729b270d1d4 | 105 | |
dcj001 | 0:e729b270d1d4 | 106 | |
dcj001 | 0:e729b270d1d4 | 107 | } |
dcj001 | 0:e729b270d1d4 | 108 | else { |
dcj001 | 0:e729b270d1d4 | 109 | printf("\r\nErreur %i \n",err); |
dcj001 | 0:e729b270d1d4 | 110 | tem1[i]=32; |
dcj001 | 0:e729b270d1d4 | 111 | } |
dcj001 | 0:e729b270d1d4 | 112 | |
dcj001 | 0:e729b270d1d4 | 113 | sprintf(buffer_2, "Tem_DHT: %5.2f C", temperature); |
dcj001 | 0:e729b270d1d4 | 114 | oled.setHorizontalAddressingMode(); |
dcj001 | 0:e729b270d1d4 | 115 | oled.writeString(0,0,buffer_2); |
dcj001 | 0:e729b270d1d4 | 116 | |
dcj001 | 0:e729b270d1d4 | 117 | if(j!=2) |
dcj001 | 0:e729b270d1d4 | 118 | { |
dcj001 | 0:e729b270d1d4 | 119 | oled.clearDisplay_zone(); |
dcj001 | 0:e729b270d1d4 | 120 | i=30; |
dcj001 | 0:e729b270d1d4 | 121 | count=1; |
dcj001 | 0:e729b270d1d4 | 122 | for(int t=0;t<30;t++) |
dcj001 | 0:e729b270d1d4 | 123 | tem1[t]=32; |
dcj001 | 0:e729b270d1d4 | 124 | } |
dcj001 | 0:e729b270d1d4 | 125 | else if(count==1) {oled.graph(tem1,i,count); wait(2.1);} |
dcj001 | 0:e729b270d1d4 | 126 | else if(count!=1) {oled.graph(tem1,30,count); wait(2.1);} |
dcj001 | 0:e729b270d1d4 | 127 | } |
dcj001 | 0:e729b270d1d4 | 128 | count++; |
dcj001 | 0:e729b270d1d4 | 129 | break; |
dcj001 | 0:e729b270d1d4 | 130 | |
dcj001 | 0:e729b270d1d4 | 131 | case 3: //////////display humidite of DHT11 |
dcj001 | 0:e729b270d1d4 | 132 | for(i=0;i<30;i++) |
dcj001 | 0:e729b270d1d4 | 133 | { |
dcj001 | 0:e729b270d1d4 | 134 | err = dht11.readData(); // data recovery |
dcj001 | 0:e729b270d1d4 | 135 | if (err == 0) { |
dcj001 | 0:e729b270d1d4 | 136 | humidite = dht11.ReadHumidity(); |
dcj001 | 0:e729b270d1d4 | 137 | if(count==1) tem1[i]=(int)(humidite/5); |
dcj001 | 0:e729b270d1d4 | 138 | else |
dcj001 | 0:e729b270d1d4 | 139 | { |
dcj001 | 0:e729b270d1d4 | 140 | for(int m=0;m<29;m++) |
dcj001 | 0:e729b270d1d4 | 141 | { tem1[m]=tem1[m+1]; } |
dcj001 | 0:e729b270d1d4 | 142 | tem1[29]=(int)(humidite/5); |
dcj001 | 0:e729b270d1d4 | 143 | } |
dcj001 | 0:e729b270d1d4 | 144 | printf("Humidite : %4.2f %% \n",humidite); |
dcj001 | 0:e729b270d1d4 | 145 | |
dcj001 | 0:e729b270d1d4 | 146 | } |
dcj001 | 0:e729b270d1d4 | 147 | else |
dcj001 | 0:e729b270d1d4 | 148 | printf("\r\nErreur %i \n",err); |
dcj001 | 0:e729b270d1d4 | 149 | |
dcj001 | 0:e729b270d1d4 | 150 | |
dcj001 | 0:e729b270d1d4 | 151 | sprintf(buffer_3, "Hum_DHT: %5.2f%% ", humidite); |
dcj001 | 0:e729b270d1d4 | 152 | oled.setHorizontalAddressingMode(); |
dcj001 | 0:e729b270d1d4 | 153 | oled.writeString(0,0,buffer_3); |
dcj001 | 0:e729b270d1d4 | 154 | |
dcj001 | 0:e729b270d1d4 | 155 | if(j!=3) |
dcj001 | 0:e729b270d1d4 | 156 | { |
dcj001 | 0:e729b270d1d4 | 157 | oled.clearDisplay_zone(); |
dcj001 | 0:e729b270d1d4 | 158 | i=30; |
dcj001 | 0:e729b270d1d4 | 159 | count=1; |
dcj001 | 0:e729b270d1d4 | 160 | for(int t=0;t<30;t++) |
dcj001 | 0:e729b270d1d4 | 161 | tem1[t]=32; |
dcj001 | 0:e729b270d1d4 | 162 | } |
dcj001 | 0:e729b270d1d4 | 163 | else if(count==1) {oled.graph(tem1,i,count); wait(2.1);} |
dcj001 | 0:e729b270d1d4 | 164 | else if(count!=1) {oled.graph(tem1,30,count); wait(2.1);} |
dcj001 | 0:e729b270d1d4 | 165 | } |
dcj001 | 0:e729b270d1d4 | 166 | count++; |
dcj001 | 0:e729b270d1d4 | 167 | break; |
dcj001 | 0:e729b270d1d4 | 168 | |
dcj001 | 0:e729b270d1d4 | 169 | case 4: ////////////////////potaranalogic |
dcj001 | 0:e729b270d1d4 | 170 | for(i=0;i<30;i++) |
dcj001 | 0:e729b270d1d4 | 171 | { |
dcj001 | 0:e729b270d1d4 | 172 | x=potar.read_u16()/65535.0; |
dcj001 | 0:e729b270d1d4 | 173 | if(count==1) tem1[i]=(int)(x*25); |
dcj001 | 0:e729b270d1d4 | 174 | else |
dcj001 | 0:e729b270d1d4 | 175 | { |
dcj001 | 0:e729b270d1d4 | 176 | for(int m=0;m<29;m++) |
dcj001 | 0:e729b270d1d4 | 177 | { tem1[m]=tem1[m+1]; } |
dcj001 | 0:e729b270d1d4 | 178 | tem1[29]=(int)(x*25); |
dcj001 | 0:e729b270d1d4 | 179 | } |
dcj001 | 0:e729b270d1d4 | 180 | printf("normalized value(0-1):%3.3f\n",x); |
dcj001 | 0:e729b270d1d4 | 181 | |
dcj001 | 0:e729b270d1d4 | 182 | sprintf(buffer_4, "potarlogic:%5.2f", potar.read_u16()/65535.0); |
dcj001 | 0:e729b270d1d4 | 183 | oled.setHorizontalAddressingMode(); |
dcj001 | 0:e729b270d1d4 | 184 | oled.writeString(0,0,buffer_4); |
dcj001 | 0:e729b270d1d4 | 185 | |
dcj001 | 0:e729b270d1d4 | 186 | if(j!=4) |
dcj001 | 0:e729b270d1d4 | 187 | { |
dcj001 | 0:e729b270d1d4 | 188 | oled.clearDisplay_zone(); |
dcj001 | 0:e729b270d1d4 | 189 | i=30; |
dcj001 | 0:e729b270d1d4 | 190 | count=1; |
dcj001 | 0:e729b270d1d4 | 191 | for(int t=0;t<30;t++) |
dcj001 | 0:e729b270d1d4 | 192 | tem1[t]=32; |
dcj001 | 0:e729b270d1d4 | 193 | } |
dcj001 | 0:e729b270d1d4 | 194 | else if(count==1) {oled.graph(tem1,i,count); wait(1);} |
dcj001 | 0:e729b270d1d4 | 195 | else if(count!=1) {oled.graph(tem1,30,count); wait(1);} |
dcj001 | 0:e729b270d1d4 | 196 | } |
dcj001 | 0:e729b270d1d4 | 197 | count++; |
dcj001 | 0:e729b270d1d4 | 198 | break; |
dcj001 | 0:e729b270d1d4 | 199 | |
dcj001 | 0:e729b270d1d4 | 200 | } |
dcj001 | 0:e729b270d1d4 | 201 | |
dcj001 | 0:e729b270d1d4 | 202 | } |
dcj001 | 0:e729b270d1d4 | 203 | |
dcj001 | 0:e729b270d1d4 | 204 | } |
dcj001 | 0:e729b270d1d4 | 205 |