Juan Moreno
/
FinalTest
FinalTest Proyect
main.cpp
- Committer:
- junmorenodi
- Date:
- 2019-07-19
- Revision:
- 0:84cbee083bc7
File content as of revision 0:84cbee083bc7:
#include "mbed.h" #include "BH1750.h" //#include "PIR.h" #include<string> // ================================================================== // Definición Puertos // ================================================================== BH1750 lightSensor(D14, D15); // Sensor (SDA,SCL) Serial pc(SERIAL_TX, SERIAL_RX); // Inicializacion Serial PC //PIR pir_obj(A0); // Objeto PIR DigitalIn pir_obj(A0); // PIR //DigitalIn automatico(A3); // Entrada para modo Auto DigitalOut led_PIR(LED1); // LED Prueba PIR DigitalOut led_auto(LED2); // LED Prueba LED Detección Automatico(ON) y Manual(OFF) // ================================================================== // Instanciando SPIO y SerialPC // ================================================================== SPI spi(PB_5, PB_4, PB_3); // mosi, miso, sclk DigitalOut arduinoMega(PA_4); //Slave Selecter: Arduino Mega PwmOut led(PB_11); // ================================================================== // Variables Bluetooth // ================================================================== Serial blue(D1,D0); //SERIAL_TX, SERIAL_RX float power(float base,int potencia); int func_pwm(); string estado; // ================================================================== // Funcion de potenciacion porque JD no pudo usar la por defecto.... // ================================================================== float power(float base,int potencia) { float resultado=0; if(potencia>1) { for(int i=1; i<potencia; i++) { resultado=resultado+base*base; } } else if(potencia==1) { resultado=base; } else { resultado=1; } return resultado; } int main() { // ================================================================== // Inicializacion Bluetooth // ================================================================== blue.baud(9600); pc.baud(9600); int i=0,cont=0; float data_sent=0; float unid=0; float dec=0; float cent=0; float umil=0; char valor_blue=NULL; float new_data=0; // ================================================================== // Niveles de Iluminación // ================================================================== float period=0.001; float duty=1.0f; float deseado=500; // ================================================================== // Variables Envío de Datos // ================================================================== float dataFromSensor; int contador=0; // bool contador_juancho=true; bool sel_tactil=true; bool sel_auto=true; float dataFromSlave=0; int valor_en=0; int contDe256=0; int Print=0; float Slave=0; float float_newdata; // ================================================================== // SPIO Config // ================================================================== spi.format(16,3); // Setup: bit data, SPImode3 spi.frequency(1000000); // // ================================================================== // BH1750 Config // ================================================================== lightSensor.init(); while(1) { // ================================================================== // Activación del PIR // ================================================================== if(pir_obj.read()==1) { //LEDs de Prueba led_PIR=pir_obj; led_auto=sel_auto; //Lectura de Datos dataFromSensor=lightSensor.readIntesity(); valor_en=dataFromSensor; contDe256=dataFromSensor/256; // Envío de Datos a Arduino if(sel_tactil==true) { arduinoMega = 0; // Select device if(contador_juancho) { Slave = spi.write(valor_en)/256; contador_juancho=false; } else { Slave = spi.write(contDe256)/256; contador_juancho=true; } arduinoMega = 1; // Deselect device wait_ms(180); dataFromSlave=Slave; wait_ms(10); if(dataFromSlave==19) { contador=1; } if(dataFromSlave==20) { contador=2; } if(contador==1) { Print=dataFromSlave; float_newdata=Print; duty=float_newdata/100; sel_auto=false; } if(contador==2) { Print=dataFromSlave*10; float_newdata=Print; deseado=float_newdata; sel_auto=true; } wait_ms(30); pc.printf("=============MODO PANTALLA TACTIL ==============\r\n"); pc.printf("Arduino returns %d\r\n", Print); pc.printf("Light intensity: %d Lux\r\n", valor_en); pc.printf("Duty: %.2f %\r\n", duty); wait_ms(500); } if (blue.readable()) { sel_tactil=false; if(sel_auto) { valor_blue=blue.getc(); if(valor_blue=='M') { sel_auto=false; } //Interrupción de recepción de datos del bluetooth if (valor_blue=='A') { //Envío de datos desde el bluetooth unid=0; dec=0; cent=0; data_sent=0; umil=0; for ( i=0; i<5; i++) { data_sent=blue.getc(); if(data_sent=='b') { //Indica finalización anticipada del envío, mensajes de menos de 3 char break; } else { data_sent=data_sent-'0'; if (i==1) { umil=data_sent; } if (i==2) { cent=data_sent; } if (i==3) { dec=data_sent; } if(i==4) { unid=data_sent; } } //cierre else para armar la iluminación enviada desde bluetooth cont=i; }// CIERRE FOR /// Lectura del dato desde bluetooth umil=umil*power(10,cont-1); cent=cent*power(10,cont-2); dec=dec*power(10,cont-3); unid=unid*power(10,cont-4); new_data=unid+dec+cent+umil; deseado=new_data; //+++++++++++++++++++++FALTA ESTO+** }//if Valor A blue.printf("%.0f |",duty*100); blue.printf("%.0f |",dataFromSensor); pc.printf("=============MODO AUTO BLUETOOTH ==============\r\n"); pc.printf("Light intensity Sensor: %.4f Lux\r\n", dataFromSensor); pc.printf("Contador: %d |\r\n",cont); pc.printf("Deseado: %.0f |\r\n",deseado); // pc.printf("Multiplicador = %d \r\n", contDe256); // pc.printf("Valor enviado: %d Lux\r\n", valor_en); pc.printf("PWM Duty Cycle: %.2f %\r\n", duty*100); pc.printf("letra: \r\n"); pc.putc( valor_blue); pc.printf("\r\n"); wait_ms(500); } else { //Contro Bluetooth (Manual) sel_auto==false //LEDs de Prueba led_PIR=pir_obj; led_auto=0; //Lectura de Datos dataFromSensor= lightSensor.readIntesity(); valor_blue=blue.getc(); if(valor_blue=='U') { //Cambio a automático sel_auto=true; } //Interrupción de recepción de datos del bluetooth if (valor_blue=='B') { //Envío de datos desde el bluetooth unid=0; dec=0; cent=0; data_sent=0; umil=0; for ( i=0; i<5; i++) { data_sent=blue.getc(); if(data_sent=='b') { //Indica finalización anticipada del envío, mensajes de menos de 3 char break; } else { data_sent=data_sent-'0'; if (i==1) { umil=data_sent; } if (i==2) { cent=data_sent; } if (i==3) { dec=data_sent; } if(i==4) { unid=data_sent; } } //cierre else para armar la iluminación enviada desde bluetooth cont=i; }// CIERRE FOR /// Lectura del dato desde bluetooth umil=umil*power(10,cont-1); cent=cent*power(10,cont-2); dec=dec*power(10,cont-3); unid=unid*power(10,cont-4); new_data=unid+dec+cent+umil; duty=new_data/100; //+++++++++++++++++++++FALTA ESTO+** } //if (valorBlue==A) blue.printf("%.0f |",dataFromSensor); pc.printf("=============MODO MANUAL BLUETOOTH ============== \r\n"); pc.printf("Duty: %.0f |",duty*100); pc.printf("Contador: %d \r\n",cont); pc.printf("Iluminacion: %.4f \r\n",dataFromSensor); pc.printf("Letra: \r\n"); pc.putc(valor_blue); pc.printf("\r\n"); wait_ms(500); }//Else contro manual bluetooth } if(blue.readable()==false) { // If blue.readable() Indica si hay bluetooth conectado sel_tactil=true; } // ================================================================== // PWM // ================================================================== if(sel_auto) { if (dataFromSensor<deseado-10) { //duty=(1-(dataFromSensor/deseado)); duty=duty+0.01; } if(dataFromSensor>deseado+10) { duty=duty-0.01; } else { //duty=0; duty=duty; } } led.period(period); led.write(duty); } else { //if PIR duty=0; led_PIR=0; led_auto=0; led.write(duty); }//else PIR int pir_int=pir_obj; pc.printf("PIR: %d %\r\n", pir_int); }//while }//main