Mon Hdz / Mbed 2 deprecated programa_P7_E3

Dependencies:   mbed

Committer:
montse
Date:
Mon Jun 08 20:10:30 2020 +0000
Revision:
25:60e920b431c0
Parent:
24:7f14b70fc9ef
Programa practica 7 equipo 3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
montse 25:60e920b431c0 1 #include "mbed.h" // con switch case
montse 25:60e920b431c0 2 #include "C12832.h"
montse 25:60e920b431c0 3 #include "Sht31.h"
montse 25:60e920b431c0 4
montse 25:60e920b431c0 5 C12832 lcd(SPI_MOSI, SPI_SCK, SPI_MISO, p8, p11);
montse 25:60e920b431c0 6
montse 25:60e920b431c0 7 PwmOut speaker(p21);
montse 25:60e920b431c0 8 AnalogIn pot(p15), pot2(p16);
montse 25:60e920b431c0 9 DigitalOut L1(p5),L2(p6);
montse 25:60e920b431c0 10 DigitalIn btn(p19), btn2(p20);
montse 25:60e920b431c0 11 Sht31 sht31(I2C_SDA, I2C_SCL);
dan 0:7dec7e9ac085 12
montse 25:60e920b431c0 13 static char grafica[] = {
montse 25:60e920b431c0 14 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 15 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 16 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 17 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 18 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 19 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 20 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 21 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 22 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 23 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 24 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 25 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 26 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 27 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 28 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 29 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 30 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 31 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 32 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 33 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 34 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 35 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 36 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 37 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 38 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 39 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 40 0x80, 0x00, 0x00 , 0x00, 0x00, 0x00 , 0x00, 0x00 , 0x00, 0x00 , 0x01,
montse 25:60e920b431c0 41 0xff, 0xff, 0xff , 0xff, 0xff, 0xff , 0xff, 0xff , 0xff, 0xff , 0xff,
montse 25:60e920b431c0 42 };
montse 25:60e920b431c0 43
montse 25:60e920b431c0 44 Bitmap grafica1 = {
montse 25:60e920b431c0 45 88, // XSize
montse 25:60e920b431c0 46 28, // YSize
montse 25:60e920b431c0 47 11, // Bytes in Line
montse 25:60e920b431c0 48 grafica , // Pointer to picture data
montse 25:60e920b431c0 49 };
montse 25:60e920b431c0 50
montse 25:60e920b431c0 51 void sens_vibracion() // Ejercicio 2: Sensor sismológico. Sensor: Acelerómetro ADXL202E.
montse 25:60e920b431c0 52 {
montse 25:60e920b431c0 53 int valor_sensor;
montse 25:60e920b431c0 54 lcd.cls();
montse 25:60e920b431c0 55 lcd.print_bm(grafica1, 35, 4);
montse 25:60e920b431c0 56 lcd.copy_to_lcd();
montse 25:60e920b431c0 57 L1=0;L2=0;
montse 25:60e920b431c0 58
montse 25:60e920b431c0 59 float g=(pot2.read()*1.24);
dan 0:7dec7e9ac085 60
montse 25:60e920b431c0 61 for (int b=36; b<=121; b++)
montse 25:60e920b431c0 62 {
montse 25:60e920b431c0 63 wait(0.01);
montse 25:60e920b431c0 64 g=(pot2.read()*1.24);
montse 25:60e920b431c0 65 valor_sensor = 8*pot2.read();
montse 25:60e920b431c0 66 lcd.pixel(b,30-valor_sensor, 1);
montse 25:60e920b431c0 67 lcd.locate(3, 12);
montse 25:60e920b431c0 68 lcd.printf("%.3fg",g);
montse 25:60e920b431c0 69 lcd.copy_to_lcd();
montse 25:60e920b431c0 70
montse 25:60e920b431c0 71 if(g>=0.014 && g<0.092)
montse 25:60e920b431c0 72 {
montse 25:60e920b431c0 73 lcd.locate(45, 3);
montse 25:60e920b431c0 74 lcd.printf("Sismo detectado");
montse 25:60e920b431c0 75 lcd.locate(40, 13);
montse 25:60e920b431c0 76 lcd.printf(" Ligero 4.0-4.9 R");
montse 25:60e920b431c0 77 lcd.copy_to_lcd();
montse 25:60e920b431c0 78 wait(0.1);
montse 25:60e920b431c0 79 lcd.locate(45, 3);
montse 25:60e920b431c0 80 lcd.printf(" ");
montse 25:60e920b431c0 81 lcd.locate(40, 13);
montse 25:60e920b431c0 82 lcd.printf(" ");
montse 25:60e920b431c0 83 lcd.copy_to_lcd();
montse 25:60e920b431c0 84 }
montse 25:60e920b431c0 85 else if(g>=0.092 && g<0.18)
montse 25:60e920b431c0 86 {
montse 25:60e920b431c0 87 lcd.locate(45, 3);
montse 25:60e920b431c0 88 lcd.printf("Sismo detectado");
montse 25:60e920b431c0 89 lcd.locate(40, 13);
montse 25:60e920b431c0 90 lcd.printf("Moder. 5.0-5.9 R");
montse 25:60e920b431c0 91 lcd.copy_to_lcd();
montse 25:60e920b431c0 92 wait(0.1);
montse 25:60e920b431c0 93 lcd.locate(45, 3);
montse 25:60e920b431c0 94 lcd.printf(" ");
montse 25:60e920b431c0 95 lcd.locate(40, 13);
montse 25:60e920b431c0 96 lcd.printf(" ");
montse 25:60e920b431c0 97 lcd.copy_to_lcd();
montse 25:60e920b431c0 98 ;
montse 25:60e920b431c0 99 }
montse 25:60e920b431c0 100 else if(g>=0.18 && g<0.34)
montse 25:60e920b431c0 101 {
montse 25:60e920b431c0 102 L2=1;
montse 25:60e920b431c0 103 lcd.locate(45, 3);
montse 25:60e920b431c0 104 lcd.printf("Sismo detectado");
montse 25:60e920b431c0 105 lcd.locate(40, 13);
montse 25:60e920b431c0 106 lcd.printf("Fuerte 6.0-6.9 R");
montse 25:60e920b431c0 107 lcd.copy_to_lcd();
montse 25:60e920b431c0 108 wait(0.1);
montse 25:60e920b431c0 109 lcd.locate(45, 3);
montse 25:60e920b431c0 110 lcd.printf(" ");
montse 25:60e920b431c0 111 lcd.locate(40, 13);
montse 25:60e920b431c0 112 lcd.printf(" ");
montse 25:60e920b431c0 113 lcd.copy_to_lcd();
montse 25:60e920b431c0 114 L2=0;
montse 25:60e920b431c0 115 }
montse 25:60e920b431c0 116 else if(g>=0.34 && g<1.24)
montse 25:60e920b431c0 117 {
montse 25:60e920b431c0 118 L2=1;
montse 25:60e920b431c0 119 lcd.locate(45, 3);
montse 25:60e920b431c0 120 lcd.printf("Sismo detectado");
montse 25:60e920b431c0 121 lcd.locate(40, 13);
montse 25:60e920b431c0 122 lcd.printf(" Mayor 7.0-7.9 R");
montse 25:60e920b431c0 123 lcd.copy_to_lcd();
montse 25:60e920b431c0 124 wait(0.1);
montse 25:60e920b431c0 125 lcd.locate(45, 3);
montse 25:60e920b431c0 126 lcd.printf(" ");
montse 25:60e920b431c0 127 lcd.locate(40, 13);
montse 25:60e920b431c0 128 lcd.printf(" ");
montse 25:60e920b431c0 129 lcd.copy_to_lcd();
montse 25:60e920b431c0 130 L2=0;
montse 25:60e920b431c0 131 }
montse 25:60e920b431c0 132 else if(g>=1.24)
montse 25:60e920b431c0 133 {
montse 25:60e920b431c0 134 L1=1;
montse 25:60e920b431c0 135 lcd.locate(45, 4);
montse 25:60e920b431c0 136 lcd.printf("Sismo detectado");
montse 25:60e920b431c0 137 lcd.locate(40, 13);
montse 25:60e920b431c0 138 lcd.printf("Cataclismo 8-10 R");
montse 25:60e920b431c0 139 lcd.copy_to_lcd();
montse 25:60e920b431c0 140 wait(0.1);
montse 25:60e920b431c0 141 lcd.locate(45, 4);
montse 25:60e920b431c0 142 lcd.printf(" ");
montse 25:60e920b431c0 143 lcd.locate(40, 13);
montse 25:60e920b431c0 144 lcd.printf(" ");
montse 25:60e920b431c0 145 lcd.copy_to_lcd();
montse 25:60e920b431c0 146 L1=0;
montse 25:60e920b431c0 147 }
stevep 4:81cea7a352b0 148 }
dan 0:7dec7e9ac085 149 }
montse 25:60e920b431c0 150 void play_tone(float frequency, float volume, float interval, float rest)
montse 25:60e920b431c0 151 {
montse 25:60e920b431c0 152 speaker.period(1.0 / frequency);
montse 25:60e920b431c0 153 speaker = volume;
montse 25:60e920b431c0 154 wait(interval);
montse 25:60e920b431c0 155 speaker = 0.0;
montse 25:60e920b431c0 156 wait(rest);
montse 25:60e920b431c0 157 }
montse 25:60e920b431c0 158
montse 25:60e920b431c0 159 void sens_temp() // Ejercicio 2: Sensor de temperatura. Sensor: Sht31.
montse 25:60e920b431c0 160 {
montse 25:60e920b431c0 161
montse 25:60e920b431c0 162 lcd.cls();
montse 25:60e920b431c0 163 float temp = sht31.readTemperature();
montse 25:60e920b431c0 164 float humidity = sht31.readHumidity();
montse 25:60e920b431c0 165 lcd.locate(3, 3);
montse 25:60e920b431c0 166 lcd.printf("Temperature: %.2f C", temp);
montse 25:60e920b431c0 167 lcd.locate(3, 13);
montse 25:60e920b431c0 168 lcd.printf("Humidity: %.2f %%", humidity);
montse 25:60e920b431c0 169 L1 = temp > 40.0f;
montse 25:60e920b431c0 170 wait(0.5f);
montse 25:60e920b431c0 171 }
montse 25:60e920b431c0 172
montse 25:60e920b431c0 173 void sens_CO() // Ejercicio 1: Concentraciñon de CO2
montse 25:60e920b431c0 174 {
montse 25:60e920b431c0 175 float x;
montse 25:60e920b431c0 176 x = 5*pot.read();
montse 25:60e920b431c0 177 btn.read();
montse 25:60e920b431c0 178 x = 5*pot.read();
montse 25:60e920b431c0 179 L1=0;
montse 25:60e920b431c0 180 lcd.cls();
montse 25:60e920b431c0 181
montse 25:60e920b431c0 182 if(x >= 0.25 && x < .35)
montse 25:60e920b431c0 183 {
montse 25:60e920b431c0 184 lcd.cls();
montse 25:60e920b431c0 185 lcd.locate(10,3);
montse 25:60e920b431c0 186 lcd.printf("Niveles de C02 normales");
montse 25:60e920b431c0 187 lcd.locate(35,15);
montse 25:60e920b431c0 188 lcd.printf("%f ppm",1000*x);
montse 25:60e920b431c0 189 lcd.copy_to_lcd();
montse 25:60e920b431c0 190 play_tone(450.0, 0.1, 1, 3.5);
montse 25:60e920b431c0 191 }
montse 25:60e920b431c0 192 else if(x >= .350 && x < 1)
montse 25:60e920b431c0 193 {
montse 25:60e920b431c0 194 lcd.cls();
montse 25:60e920b431c0 195 lcd.locate(10,1);
montse 25:60e920b431c0 196 lcd.printf("Congestionado, pero con");
montse 25:60e920b431c0 197 lcd.locate(10,10);
montse 25:60e920b431c0 198 lcd.printf("buen intercambio de aire.");
montse 25:60e920b431c0 199 lcd.locate(35,20);
montse 25:60e920b431c0 200 lcd.printf("%f ppm",1000*x);
montse 25:60e920b431c0 201 lcd.copy_to_lcd();
montse 25:60e920b431c0 202 play_tone(480.0, 0.2, 1, 3);
montse 25:60e920b431c0 203
montse 25:60e920b431c0 204 }
montse 25:60e920b431c0 205 else if(x >= 1 && x < 2)
montse 25:60e920b431c0 206 {
montse 25:60e920b431c0 207 lcd.cls();
montse 25:60e920b431c0 208 lcd.locate(19,7);
montse 25:60e920b431c0 209 lcd.printf("Calidad de aire baja");
montse 25:60e920b431c0 210 lcd.locate(27,17);
montse 25:60e920b431c0 211 lcd.printf("%f ppm",1000*x);
montse 25:60e920b431c0 212 lcd.copy_to_lcd();
montse 25:60e920b431c0 213 play_tone(500.0, 0.3, 1, 2);
montse 25:60e920b431c0 214 }
montse 25:60e920b431c0 215 else if(x >= 2 && x < 5)
montse 25:60e920b431c0 216 {
montse 25:60e920b431c0 217 lcd.cls();
montse 25:60e920b431c0 218 lcd.printf("Peligro");
montse 25:60e920b431c0 219 lcd.copy_to_lcd();
montse 25:60e920b431c0 220 play_tone(525.0, 0.5, 0.5, 1);
montse 25:60e920b431c0 221
montse 25:60e920b431c0 222 }
montse 25:60e920b431c0 223 else if(x >= 5)
montse 25:60e920b431c0 224 {
montse 25:60e920b431c0 225 L1 = 1;
montse 25:60e920b431c0 226 lcd.cls();
montse 25:60e920b431c0 227 lcd.locate(3,10);
montse 25:60e920b431c0 228 lcd.printf("¡Alejate!");
montse 25:60e920b431c0 229 lcd.copy_to_lcd();
montse 25:60e920b431c0 230
montse 25:60e920b431c0 231 lcd.locate(45, 5);
montse 25:60e920b431c0 232 lcd.printf("Evacuacion");
montse 25:60e920b431c0 233 lcd.locate(40, 17);
montse 25:60e920b431c0 234 lcd.printf("de inmediata!");
montse 25:60e920b431c0 235 lcd.copy_to_lcd();
montse 25:60e920b431c0 236
montse 25:60e920b431c0 237 play_tone(800.0, 5, 0.5, 0.2);
montse 25:60e920b431c0 238 }
montse 25:60e920b431c0 239 else if(x <= 0)
montse 25:60e920b431c0 240 {
montse 25:60e920b431c0 241 lcd.cls();
montse 25:60e920b431c0 242 lcd.locate(30,10);
montse 25:60e920b431c0 243 lcd.printf("Error");
montse 25:60e920b431c0 244 lcd.copy_to_lcd();
montse 25:60e920b431c0 245 }
montse 25:60e920b431c0 246 }
montse 25:60e920b431c0 247
montse 25:60e920b431c0 248
montse 25:60e920b431c0 249
montse 25:60e920b431c0 250 int main()
montse 25:60e920b431c0 251 {
montse 25:60e920b431c0 252 printf("Práctica 7, equipo 3\n");
montse 25:60e920b431c0 253 float x;
montse 25:60e920b431c0 254 lcd.cls();
montse 25:60e920b431c0 255 x = 5*pot.read();
montse 25:60e920b431c0 256 while(x < 0.4)
montse 25:60e920b431c0 257 {
montse 25:60e920b431c0 258 x = 5*pot.read();
montse 25:60e920b431c0 259 wait(1);
montse 25:60e920b431c0 260 lcd.locate(1,1);
montse 25:60e920b431c0 261 lcd.printf("Precalentando %f", x);
montse 25:60e920b431c0 262 lcd.copy_to_lcd();
montse 25:60e920b431c0 263 wait(1);
montse 25:60e920b431c0 264 lcd.cls();
montse 25:60e920b431c0 265 }
montse 25:60e920b431c0 266 while (1)
montse 25:60e920b431c0 267 {
montse 25:60e920b431c0 268 L1=0; L2=0;
montse 25:60e920b431c0 269 btn2.read();
montse 25:60e920b431c0 270 int A=btn.read()+1;
montse 25:60e920b431c0 271 if (btn2==1)
montse 25:60e920b431c0 272 {
montse 25:60e920b431c0 273 A=3;
montse 25:60e920b431c0 274 }
montse 25:60e920b431c0 275
montse 25:60e920b431c0 276 switch (A)
montse 25:60e920b431c0 277 {
montse 25:60e920b431c0 278 case 1: sens_CO();
montse 25:60e920b431c0 279 break;
montse 25:60e920b431c0 280 case 2: sens_temp();
montse 25:60e920b431c0 281 break;
montse 25:60e920b431c0 282 case 3: sens_vibracion();
montse 25:60e920b431c0 283 break;
montse 25:60e920b431c0 284 }
montse 25:60e920b431c0 285 wait_ms(500);
montse 25:60e920b431c0 286 }
montse 25:60e920b431c0 287 }