FinalTest Proyect

Dependencies:   mbed BH1750

Committer:
junmorenodi
Date:
Fri Jul 19 19:22:50 2019 +0000
Revision:
0:84cbee083bc7
FinalTestProyect

Who changed what in which revision?

UserRevisionLine numberNew contents of line
junmorenodi 0:84cbee083bc7 1 #include "mbed.h"
junmorenodi 0:84cbee083bc7 2 #include "BH1750.h"
junmorenodi 0:84cbee083bc7 3 //#include "PIR.h"
junmorenodi 0:84cbee083bc7 4 #include<string>
junmorenodi 0:84cbee083bc7 5
junmorenodi 0:84cbee083bc7 6 // ==================================================================
junmorenodi 0:84cbee083bc7 7 // Definición Puertos
junmorenodi 0:84cbee083bc7 8 // ==================================================================
junmorenodi 0:84cbee083bc7 9
junmorenodi 0:84cbee083bc7 10 BH1750 lightSensor(D14, D15); // Sensor (SDA,SCL)
junmorenodi 0:84cbee083bc7 11 Serial pc(SERIAL_TX, SERIAL_RX); // Inicializacion Serial PC
junmorenodi 0:84cbee083bc7 12 //PIR pir_obj(A0); // Objeto PIR
junmorenodi 0:84cbee083bc7 13 DigitalIn pir_obj(A0); // PIR
junmorenodi 0:84cbee083bc7 14 //DigitalIn automatico(A3); // Entrada para modo Auto
junmorenodi 0:84cbee083bc7 15 DigitalOut led_PIR(LED1); // LED Prueba PIR
junmorenodi 0:84cbee083bc7 16 DigitalOut led_auto(LED2); // LED Prueba LED Detección Automatico(ON) y Manual(OFF)
junmorenodi 0:84cbee083bc7 17
junmorenodi 0:84cbee083bc7 18 // ==================================================================
junmorenodi 0:84cbee083bc7 19 // Instanciando SPIO y SerialPC
junmorenodi 0:84cbee083bc7 20 // ==================================================================
junmorenodi 0:84cbee083bc7 21
junmorenodi 0:84cbee083bc7 22 SPI spi(PB_5, PB_4, PB_3); // mosi, miso, sclk
junmorenodi 0:84cbee083bc7 23 DigitalOut arduinoMega(PA_4); //Slave Selecter: Arduino Mega
junmorenodi 0:84cbee083bc7 24 PwmOut led(PB_11);
junmorenodi 0:84cbee083bc7 25 // ==================================================================
junmorenodi 0:84cbee083bc7 26 // Variables Bluetooth
junmorenodi 0:84cbee083bc7 27 // ==================================================================
junmorenodi 0:84cbee083bc7 28
junmorenodi 0:84cbee083bc7 29 Serial blue(D1,D0); //SERIAL_TX, SERIAL_RX
junmorenodi 0:84cbee083bc7 30 float power(float base,int potencia);
junmorenodi 0:84cbee083bc7 31 int func_pwm();
junmorenodi 0:84cbee083bc7 32 string estado;
junmorenodi 0:84cbee083bc7 33 // ==================================================================
junmorenodi 0:84cbee083bc7 34 // Funcion de potenciacion porque JD no pudo usar la por defecto....
junmorenodi 0:84cbee083bc7 35 // ==================================================================
junmorenodi 0:84cbee083bc7 36
junmorenodi 0:84cbee083bc7 37 float power(float base,int potencia)
junmorenodi 0:84cbee083bc7 38 {
junmorenodi 0:84cbee083bc7 39 float resultado=0;
junmorenodi 0:84cbee083bc7 40 if(potencia>1) {
junmorenodi 0:84cbee083bc7 41 for(int i=1; i<potencia; i++) {
junmorenodi 0:84cbee083bc7 42 resultado=resultado+base*base;
junmorenodi 0:84cbee083bc7 43 }
junmorenodi 0:84cbee083bc7 44 } else if(potencia==1) {
junmorenodi 0:84cbee083bc7 45 resultado=base;
junmorenodi 0:84cbee083bc7 46 } else {
junmorenodi 0:84cbee083bc7 47 resultado=1;
junmorenodi 0:84cbee083bc7 48 }
junmorenodi 0:84cbee083bc7 49 return resultado;
junmorenodi 0:84cbee083bc7 50 }
junmorenodi 0:84cbee083bc7 51
junmorenodi 0:84cbee083bc7 52
junmorenodi 0:84cbee083bc7 53
junmorenodi 0:84cbee083bc7 54 int main()
junmorenodi 0:84cbee083bc7 55 {
junmorenodi 0:84cbee083bc7 56 // ==================================================================
junmorenodi 0:84cbee083bc7 57 // Inicializacion Bluetooth
junmorenodi 0:84cbee083bc7 58 // ==================================================================
junmorenodi 0:84cbee083bc7 59
junmorenodi 0:84cbee083bc7 60 blue.baud(9600);
junmorenodi 0:84cbee083bc7 61 pc.baud(9600);
junmorenodi 0:84cbee083bc7 62 int i=0,cont=0;
junmorenodi 0:84cbee083bc7 63 float data_sent=0;
junmorenodi 0:84cbee083bc7 64 float unid=0;
junmorenodi 0:84cbee083bc7 65 float dec=0;
junmorenodi 0:84cbee083bc7 66 float cent=0;
junmorenodi 0:84cbee083bc7 67 float umil=0;
junmorenodi 0:84cbee083bc7 68 char valor_blue=NULL;
junmorenodi 0:84cbee083bc7 69 float new_data=0;
junmorenodi 0:84cbee083bc7 70
junmorenodi 0:84cbee083bc7 71
junmorenodi 0:84cbee083bc7 72
junmorenodi 0:84cbee083bc7 73 // ==================================================================
junmorenodi 0:84cbee083bc7 74 // Niveles de Iluminación
junmorenodi 0:84cbee083bc7 75 // ==================================================================
junmorenodi 0:84cbee083bc7 76 float period=0.001;
junmorenodi 0:84cbee083bc7 77 float duty=1.0f;
junmorenodi 0:84cbee083bc7 78 float deseado=500;
junmorenodi 0:84cbee083bc7 79
junmorenodi 0:84cbee083bc7 80 // ==================================================================
junmorenodi 0:84cbee083bc7 81 // Variables Envío de Datos
junmorenodi 0:84cbee083bc7 82 // ==================================================================
junmorenodi 0:84cbee083bc7 83
junmorenodi 0:84cbee083bc7 84 float dataFromSensor;
junmorenodi 0:84cbee083bc7 85 int contador=0; //
junmorenodi 0:84cbee083bc7 86 bool contador_juancho=true;
junmorenodi 0:84cbee083bc7 87 bool sel_tactil=true;
junmorenodi 0:84cbee083bc7 88 bool sel_auto=true;
junmorenodi 0:84cbee083bc7 89 float dataFromSlave=0;
junmorenodi 0:84cbee083bc7 90 int valor_en=0;
junmorenodi 0:84cbee083bc7 91 int contDe256=0;
junmorenodi 0:84cbee083bc7 92 int Print=0;
junmorenodi 0:84cbee083bc7 93 float Slave=0;
junmorenodi 0:84cbee083bc7 94 float float_newdata;
junmorenodi 0:84cbee083bc7 95
junmorenodi 0:84cbee083bc7 96 // ==================================================================
junmorenodi 0:84cbee083bc7 97 // SPIO Config
junmorenodi 0:84cbee083bc7 98 // ==================================================================
junmorenodi 0:84cbee083bc7 99
junmorenodi 0:84cbee083bc7 100 spi.format(16,3); // Setup: bit data, SPImode3
junmorenodi 0:84cbee083bc7 101 spi.frequency(1000000); //
junmorenodi 0:84cbee083bc7 102
junmorenodi 0:84cbee083bc7 103 // ==================================================================
junmorenodi 0:84cbee083bc7 104 // BH1750 Config
junmorenodi 0:84cbee083bc7 105 // ==================================================================
junmorenodi 0:84cbee083bc7 106 lightSensor.init();
junmorenodi 0:84cbee083bc7 107
junmorenodi 0:84cbee083bc7 108 while(1) {
junmorenodi 0:84cbee083bc7 109
junmorenodi 0:84cbee083bc7 110 // ==================================================================
junmorenodi 0:84cbee083bc7 111 // Activación del PIR
junmorenodi 0:84cbee083bc7 112 // ==================================================================
junmorenodi 0:84cbee083bc7 113 if(pir_obj.read()==1) {
junmorenodi 0:84cbee083bc7 114 //LEDs de Prueba
junmorenodi 0:84cbee083bc7 115 led_PIR=pir_obj;
junmorenodi 0:84cbee083bc7 116 led_auto=sel_auto;
junmorenodi 0:84cbee083bc7 117 //Lectura de Datos
junmorenodi 0:84cbee083bc7 118 dataFromSensor=lightSensor.readIntesity();
junmorenodi 0:84cbee083bc7 119 valor_en=dataFromSensor;
junmorenodi 0:84cbee083bc7 120 contDe256=dataFromSensor/256;
junmorenodi 0:84cbee083bc7 121
junmorenodi 0:84cbee083bc7 122 // Envío de Datos a Arduino
junmorenodi 0:84cbee083bc7 123
junmorenodi 0:84cbee083bc7 124 if(sel_tactil==true) {
junmorenodi 0:84cbee083bc7 125
junmorenodi 0:84cbee083bc7 126 arduinoMega = 0; // Select device
junmorenodi 0:84cbee083bc7 127
junmorenodi 0:84cbee083bc7 128 if(contador_juancho) {
junmorenodi 0:84cbee083bc7 129 Slave = spi.write(valor_en)/256;
junmorenodi 0:84cbee083bc7 130 contador_juancho=false;
junmorenodi 0:84cbee083bc7 131 } else {
junmorenodi 0:84cbee083bc7 132 Slave = spi.write(contDe256)/256;
junmorenodi 0:84cbee083bc7 133 contador_juancho=true;
junmorenodi 0:84cbee083bc7 134 }
junmorenodi 0:84cbee083bc7 135
junmorenodi 0:84cbee083bc7 136 arduinoMega = 1; // Deselect device
junmorenodi 0:84cbee083bc7 137
junmorenodi 0:84cbee083bc7 138
junmorenodi 0:84cbee083bc7 139 wait_ms(180);
junmorenodi 0:84cbee083bc7 140
junmorenodi 0:84cbee083bc7 141 dataFromSlave=Slave;
junmorenodi 0:84cbee083bc7 142 wait_ms(10);
junmorenodi 0:84cbee083bc7 143 if(dataFromSlave==19) {
junmorenodi 0:84cbee083bc7 144 contador=1;
junmorenodi 0:84cbee083bc7 145 }
junmorenodi 0:84cbee083bc7 146 if(dataFromSlave==20) {
junmorenodi 0:84cbee083bc7 147 contador=2;
junmorenodi 0:84cbee083bc7 148 }
junmorenodi 0:84cbee083bc7 149
junmorenodi 0:84cbee083bc7 150 if(contador==1) {
junmorenodi 0:84cbee083bc7 151 Print=dataFromSlave;
junmorenodi 0:84cbee083bc7 152 float_newdata=Print;
junmorenodi 0:84cbee083bc7 153 duty=float_newdata/100;
junmorenodi 0:84cbee083bc7 154 sel_auto=false;
junmorenodi 0:84cbee083bc7 155
junmorenodi 0:84cbee083bc7 156 }
junmorenodi 0:84cbee083bc7 157 if(contador==2) {
junmorenodi 0:84cbee083bc7 158
junmorenodi 0:84cbee083bc7 159 Print=dataFromSlave*10;
junmorenodi 0:84cbee083bc7 160 float_newdata=Print;
junmorenodi 0:84cbee083bc7 161 deseado=float_newdata;
junmorenodi 0:84cbee083bc7 162 sel_auto=true;
junmorenodi 0:84cbee083bc7 163 }
junmorenodi 0:84cbee083bc7 164
junmorenodi 0:84cbee083bc7 165 wait_ms(30);
junmorenodi 0:84cbee083bc7 166 pc.printf("=============MODO PANTALLA TACTIL ==============\r\n");
junmorenodi 0:84cbee083bc7 167 pc.printf("Arduino returns %d\r\n", Print);
junmorenodi 0:84cbee083bc7 168 pc.printf("Light intensity: %d Lux\r\n", valor_en);
junmorenodi 0:84cbee083bc7 169 pc.printf("Duty: %.2f %\r\n", duty);
junmorenodi 0:84cbee083bc7 170 wait_ms(500);
junmorenodi 0:84cbee083bc7 171
junmorenodi 0:84cbee083bc7 172 }
junmorenodi 0:84cbee083bc7 173
junmorenodi 0:84cbee083bc7 174
junmorenodi 0:84cbee083bc7 175
junmorenodi 0:84cbee083bc7 176 if (blue.readable()) {
junmorenodi 0:84cbee083bc7 177 sel_tactil=false;
junmorenodi 0:84cbee083bc7 178 if(sel_auto) {
junmorenodi 0:84cbee083bc7 179
junmorenodi 0:84cbee083bc7 180 valor_blue=blue.getc();
junmorenodi 0:84cbee083bc7 181 if(valor_blue=='M') {
junmorenodi 0:84cbee083bc7 182 sel_auto=false;
junmorenodi 0:84cbee083bc7 183 }
junmorenodi 0:84cbee083bc7 184 //Interrupción de recepción de datos del bluetooth
junmorenodi 0:84cbee083bc7 185 if (valor_blue=='A') { //Envío de datos desde el bluetooth
junmorenodi 0:84cbee083bc7 186 unid=0;
junmorenodi 0:84cbee083bc7 187 dec=0;
junmorenodi 0:84cbee083bc7 188 cent=0;
junmorenodi 0:84cbee083bc7 189 data_sent=0;
junmorenodi 0:84cbee083bc7 190 umil=0;
junmorenodi 0:84cbee083bc7 191 for ( i=0; i<5; i++) {
junmorenodi 0:84cbee083bc7 192 data_sent=blue.getc();
junmorenodi 0:84cbee083bc7 193 if(data_sent=='b') { //Indica finalización anticipada del envío, mensajes de menos de 3 char
junmorenodi 0:84cbee083bc7 194 break;
junmorenodi 0:84cbee083bc7 195 } else {
junmorenodi 0:84cbee083bc7 196 data_sent=data_sent-'0';
junmorenodi 0:84cbee083bc7 197 if (i==1) {
junmorenodi 0:84cbee083bc7 198 umil=data_sent;
junmorenodi 0:84cbee083bc7 199 }
junmorenodi 0:84cbee083bc7 200 if (i==2) {
junmorenodi 0:84cbee083bc7 201 cent=data_sent;
junmorenodi 0:84cbee083bc7 202 }
junmorenodi 0:84cbee083bc7 203 if (i==3) {
junmorenodi 0:84cbee083bc7 204 dec=data_sent;
junmorenodi 0:84cbee083bc7 205 }
junmorenodi 0:84cbee083bc7 206 if(i==4) {
junmorenodi 0:84cbee083bc7 207 unid=data_sent;
junmorenodi 0:84cbee083bc7 208 }
junmorenodi 0:84cbee083bc7 209 } //cierre else para armar la iluminación enviada desde bluetooth
junmorenodi 0:84cbee083bc7 210 cont=i;
junmorenodi 0:84cbee083bc7 211 }// CIERRE FOR
junmorenodi 0:84cbee083bc7 212 /// Lectura del dato desde bluetooth
junmorenodi 0:84cbee083bc7 213 umil=umil*power(10,cont-1);
junmorenodi 0:84cbee083bc7 214 cent=cent*power(10,cont-2);
junmorenodi 0:84cbee083bc7 215 dec=dec*power(10,cont-3);
junmorenodi 0:84cbee083bc7 216 unid=unid*power(10,cont-4);
junmorenodi 0:84cbee083bc7 217 new_data=unid+dec+cent+umil;
junmorenodi 0:84cbee083bc7 218 deseado=new_data; //+++++++++++++++++++++FALTA ESTO+**
junmorenodi 0:84cbee083bc7 219 }//if Valor A
junmorenodi 0:84cbee083bc7 220 blue.printf("%.0f |",duty*100);
junmorenodi 0:84cbee083bc7 221 blue.printf("%.0f |",dataFromSensor);
junmorenodi 0:84cbee083bc7 222 pc.printf("=============MODO AUTO BLUETOOTH ==============\r\n");
junmorenodi 0:84cbee083bc7 223 pc.printf("Light intensity Sensor: %.4f Lux\r\n", dataFromSensor);
junmorenodi 0:84cbee083bc7 224 pc.printf("Contador: %d |\r\n",cont);
junmorenodi 0:84cbee083bc7 225 pc.printf("Deseado: %.0f |\r\n",deseado);
junmorenodi 0:84cbee083bc7 226 // pc.printf("Multiplicador = %d \r\n", contDe256);
junmorenodi 0:84cbee083bc7 227 // pc.printf("Valor enviado: %d Lux\r\n", valor_en);
junmorenodi 0:84cbee083bc7 228 pc.printf("PWM Duty Cycle: %.2f %\r\n", duty*100);
junmorenodi 0:84cbee083bc7 229 pc.printf("letra: \r\n");
junmorenodi 0:84cbee083bc7 230 pc.putc( valor_blue);
junmorenodi 0:84cbee083bc7 231 pc.printf("\r\n");
junmorenodi 0:84cbee083bc7 232 wait_ms(500);
junmorenodi 0:84cbee083bc7 233
junmorenodi 0:84cbee083bc7 234 } else { //Contro Bluetooth (Manual) sel_auto==false
junmorenodi 0:84cbee083bc7 235 //LEDs de Prueba
junmorenodi 0:84cbee083bc7 236 led_PIR=pir_obj;
junmorenodi 0:84cbee083bc7 237 led_auto=0;
junmorenodi 0:84cbee083bc7 238 //Lectura de Datos
junmorenodi 0:84cbee083bc7 239 dataFromSensor= lightSensor.readIntesity();
junmorenodi 0:84cbee083bc7 240 valor_blue=blue.getc();
junmorenodi 0:84cbee083bc7 241 if(valor_blue=='U') { //Cambio a automático
junmorenodi 0:84cbee083bc7 242 sel_auto=true;
junmorenodi 0:84cbee083bc7 243 }
junmorenodi 0:84cbee083bc7 244 //Interrupción de recepción de datos del bluetooth
junmorenodi 0:84cbee083bc7 245 if (valor_blue=='B') { //Envío de datos desde el bluetooth
junmorenodi 0:84cbee083bc7 246 unid=0;
junmorenodi 0:84cbee083bc7 247 dec=0;
junmorenodi 0:84cbee083bc7 248 cent=0;
junmorenodi 0:84cbee083bc7 249 data_sent=0;
junmorenodi 0:84cbee083bc7 250 umil=0;
junmorenodi 0:84cbee083bc7 251 for ( i=0; i<5; i++) {
junmorenodi 0:84cbee083bc7 252 data_sent=blue.getc();
junmorenodi 0:84cbee083bc7 253 if(data_sent=='b') { //Indica finalización anticipada del envío, mensajes de menos de 3 char
junmorenodi 0:84cbee083bc7 254 break;
junmorenodi 0:84cbee083bc7 255 } else {
junmorenodi 0:84cbee083bc7 256 data_sent=data_sent-'0';
junmorenodi 0:84cbee083bc7 257 if (i==1) {
junmorenodi 0:84cbee083bc7 258 umil=data_sent;
junmorenodi 0:84cbee083bc7 259 }
junmorenodi 0:84cbee083bc7 260 if (i==2) {
junmorenodi 0:84cbee083bc7 261 cent=data_sent;
junmorenodi 0:84cbee083bc7 262 }
junmorenodi 0:84cbee083bc7 263 if (i==3) {
junmorenodi 0:84cbee083bc7 264 dec=data_sent;
junmorenodi 0:84cbee083bc7 265 }
junmorenodi 0:84cbee083bc7 266 if(i==4) {
junmorenodi 0:84cbee083bc7 267 unid=data_sent;
junmorenodi 0:84cbee083bc7 268 }
junmorenodi 0:84cbee083bc7 269 } //cierre else para armar la iluminación enviada desde bluetooth
junmorenodi 0:84cbee083bc7 270 cont=i;
junmorenodi 0:84cbee083bc7 271 }// CIERRE FOR
junmorenodi 0:84cbee083bc7 272 /// Lectura del dato desde bluetooth
junmorenodi 0:84cbee083bc7 273 umil=umil*power(10,cont-1);
junmorenodi 0:84cbee083bc7 274 cent=cent*power(10,cont-2);
junmorenodi 0:84cbee083bc7 275 dec=dec*power(10,cont-3);
junmorenodi 0:84cbee083bc7 276 unid=unid*power(10,cont-4);
junmorenodi 0:84cbee083bc7 277 new_data=unid+dec+cent+umil;
junmorenodi 0:84cbee083bc7 278 duty=new_data/100; //+++++++++++++++++++++FALTA ESTO+**
junmorenodi 0:84cbee083bc7 279
junmorenodi 0:84cbee083bc7 280 } //if (valorBlue==A)
junmorenodi 0:84cbee083bc7 281 blue.printf("%.0f |",dataFromSensor);
junmorenodi 0:84cbee083bc7 282 pc.printf("=============MODO MANUAL BLUETOOTH ============== \r\n");
junmorenodi 0:84cbee083bc7 283 pc.printf("Duty: %.0f |",duty*100);
junmorenodi 0:84cbee083bc7 284 pc.printf("Contador: %d \r\n",cont);
junmorenodi 0:84cbee083bc7 285 pc.printf("Iluminacion: %.4f \r\n",dataFromSensor);
junmorenodi 0:84cbee083bc7 286 pc.printf("Letra: \r\n");
junmorenodi 0:84cbee083bc7 287 pc.putc(valor_blue);
junmorenodi 0:84cbee083bc7 288 pc.printf("\r\n");
junmorenodi 0:84cbee083bc7 289 wait_ms(500);
junmorenodi 0:84cbee083bc7 290 }//Else contro manual bluetooth
junmorenodi 0:84cbee083bc7 291 }
junmorenodi 0:84cbee083bc7 292 if(blue.readable()==false) { // If blue.readable() Indica si hay bluetooth conectado
junmorenodi 0:84cbee083bc7 293 sel_tactil=true;
junmorenodi 0:84cbee083bc7 294 }
junmorenodi 0:84cbee083bc7 295
junmorenodi 0:84cbee083bc7 296 // ==================================================================
junmorenodi 0:84cbee083bc7 297 // PWM
junmorenodi 0:84cbee083bc7 298 // ==================================================================
junmorenodi 0:84cbee083bc7 299
junmorenodi 0:84cbee083bc7 300 if(sel_auto) {
junmorenodi 0:84cbee083bc7 301
junmorenodi 0:84cbee083bc7 302
junmorenodi 0:84cbee083bc7 303 if (dataFromSensor<deseado-10) {
junmorenodi 0:84cbee083bc7 304 //duty=(1-(dataFromSensor/deseado));
junmorenodi 0:84cbee083bc7 305 duty=duty+0.01;
junmorenodi 0:84cbee083bc7 306 }
junmorenodi 0:84cbee083bc7 307 if(dataFromSensor>deseado+10) {
junmorenodi 0:84cbee083bc7 308 duty=duty-0.01;
junmorenodi 0:84cbee083bc7 309 } else {
junmorenodi 0:84cbee083bc7 310 //duty=0;
junmorenodi 0:84cbee083bc7 311 duty=duty;
junmorenodi 0:84cbee083bc7 312 }
junmorenodi 0:84cbee083bc7 313 }
junmorenodi 0:84cbee083bc7 314
junmorenodi 0:84cbee083bc7 315 led.period(period);
junmorenodi 0:84cbee083bc7 316 led.write(duty);
junmorenodi 0:84cbee083bc7 317
junmorenodi 0:84cbee083bc7 318
junmorenodi 0:84cbee083bc7 319 } else { //if PIR
junmorenodi 0:84cbee083bc7 320 duty=0;
junmorenodi 0:84cbee083bc7 321 led_PIR=0;
junmorenodi 0:84cbee083bc7 322 led_auto=0;
junmorenodi 0:84cbee083bc7 323 led.write(duty);
junmorenodi 0:84cbee083bc7 324 }//else PIR
junmorenodi 0:84cbee083bc7 325 int pir_int=pir_obj;
junmorenodi 0:84cbee083bc7 326 pc.printf("PIR: %d %\r\n", pir_int);
junmorenodi 0:84cbee083bc7 327 }//while
junmorenodi 0:84cbee083bc7 328 }//main