Juan Moreno
/
CharlieProject
Nevera de Pollos
main.cpp
- Committer:
- junmorenodi
- Date:
- 2019-07-11
- Revision:
- 0:55cf71308e50
File content as of revision 0:55cf71308e50:
/* Electronica Digital II * Universidad Nacional de Colombia * Carlos Andrés Martínez Ríos * Nicold Michell Peña * Juan Camilo Ramirez * Gabriel Martinez * Nicolas Moreno */ #include "mbed.h" #include <stdint.h> #include "DHT.h" #include <math.h> // ================================================================== // Instanciando variables globales // ================================================================== typedef struct { double setTemp; //temperature to reach. float setHum; //humidity to reach. float Temp; //temperature float LM35Temp; //LM35 Temperature float Hum; //humidity float Co2; // CO2 // double state; //State } _attribute_ ((packed)) Tsetting; Tsetting status; // ================================================================== // Instanciando estructuras e indicadores // ================================================================== DHT dht22(A2,DHT22); DigitalOut led1(LED1); //Indicator less 25* DigitalOut led2(LED2); //Indicator more 25* DigitalOut led3(LED3); //Indicator more 80% hum DigitalOut peltier1(D0); //Peltier 1 DigitalOut peltier2(D1); //Peltier 2 //01 -> Caliente 10-> Enfrie AnalogIn LM35(A3); // LM35 AnalogIn MQ135(A1); //MQ135 DigitalOut humidifier(D2); // Humidifier DigitalOut humidifierFan(D3); // Humidifier Fan // ================================================================== // Instanciando SPIO y SerialPC // ================================================================== SPI spi(PB_5, PB_4, PB_3); // mosi, miso, sclk DigitalOut arduinoMega(PA_4); //Slave Selecter: Arduino Mega Serial pc(USBTX, USBRX, 9600); // tx, rx, baud // ================================================================== // ========================= MAIN ============================= // ================================================================== int main() { // ================================================================== // Instanciando variables iniciales // ================================================================== // status.state = 0; led1=0; led2=0; led3=0; peltier1 = 0; peltier2 = 0; humidifier = 0; humidifierFan = 0; int selEnv = 0; int valEnv = 0; int lineCounter = 1; float tempCLM35,arrayLM35[10]; double avgLM35,tempCo2; // float tempFLM35; int lm35Counter = 1; // ================================================================== // SPIO Config // ================================================================== spi.format(8,3); // Setup: bit data, SPImode3 spi.frequency(1000000); //1MHz // ================================================================== // Default State // ================================================================== status.setTemp = 25; status.setHum = 85; // Case0: // ================================================================== // Initialize // ================================================================== pc.printf("============= Climate Box V.2. ==================\r\n"); pc.printf("Press any key to start...\r\n"); pc.getc(); // wait for keyboard // goto Case1; // ================================================================== // ========================= LOOP ============================= // ================================================================== while (1) { // status.state = 1; // Case1: // ======================================================= // Control // ======================================================= int pel1,pel2,hum1,hum2; if (status.LM35Temp<status.setTemp-0.5) { peltier1 = 0; pel1=0; peltier2 = 1; pel2=1; } if (status.LM35Temp>status.setTemp+0.5) { peltier1 = 1; pel1=1; peltier2 = 0; pel2=0; } if (status.LM35Temp<status.setTemp+0.5 && status.LM35Temp>status.setTemp-0.5) { peltier1 = 0; pel1=0; peltier2 = 0; pel2=0; } if (status.Hum<status.setHum-3) { humidifier = 1; hum1=1; humidifierFan = 0; hum2=0; } if (status.Hum>status.setHum+3) { humidifier = 0; hum1=0; humidifierFan = 1; hum2=1; } if (status.Hum<status.setHum+3 && status.Hum>status.setHum-3) { humidifier = 0; hum1=0; humidifierFan = 0; hum2=0; } // ================================================================== // SPIO Comunication // ================================================================== if (selEnv==0){ valEnv=status.Co2/10; } if (selEnv==1){ valEnv=100+status.Hum; } if (selEnv==2){ valEnv=200+status.LM35Temp; } arduinoMega = 0; // Select device float dataFromSlave = spi.write(valEnv); arduinoMega = 1; // Deselect device selEnv++; if (selEnv==3){ selEnv=0; } pc.printf("Peltier %d y %d, Humidificador %d y %d\r\n", pel1,pel2,hum1,hum2); pc.printf("Arduino returns %.2f\r\n\n", dataFromSlave); // wait_ms(500); // Frecuency of data transfer in ms wait_ms(180); // ================================================================== // DHT22 // ================================================================== int err = dht22.readData(); if (err==0) { status.Temp=dht22.ReadTemperature(CELCIUS); status.Hum =dht22.ReadHumidity(); } // ================================================================== // LM35 // ================================================================== // LM35: avgLM35 = 0; for(lm35Counter = 0;lm35Counter<10;lm35Counter++) { arrayLM35[lm35Counter]=LM35.read(); wait(.02); } for(lm35Counter = 0;lm35Counter<10;lm35Counter++) { avgLM35 = avgLM35 + (arrayLM35[lm35Counter]/10); } tempCLM35 = (avgLM35*3.685503686*100); // tempFLM35 = (9.0*tempCLM35)/5.0 + 32.0; status.LM35Temp = tempCLM35; // wait(.5); // ================================================================== // MQ135 // ================================================================== tempCo2 = MQ135.read(); tempCo2=tempCo2*4.9/1023; tempCo2=(4.9-tempCo2)/tempCo2; tempCo2=pow(tempCo2,-0.112); status.Co2=2.2*537.2*tempCo2; // ================================================================== // Temperatura y humedad en pantalla // ================================================================== if (dataFromSlave==11) { status.setTemp=status.setTemp+1; } if (dataFromSlave==12) { status.setTemp=status.setTemp-1; } if (dataFromSlave==21) { status.setHum=status.setHum+1; } if (dataFromSlave==22) { status.setHum=status.setHum-1; } // ================================================================== // Serial Monitor Printer // ================================================================== pc.printf("%d DHT Co2 = %.2f C, DHT Hum = %.2f , LM35 Temp = %.2f C \n", lineCounter++, status.Co2, status.Hum, status.LM35Temp); pc.printf("SetTemp = %f C, SetHum = %f \n", status.setTemp, status.setHum); // ================================================================== // Indicators // ================================================================== // Led indicators DHT22 if (status.Temp < 25){ led1=1; led2=0; } else { led2=1; led1=0; } if (status.Hum > 80) { led3=1; } else { led3=0; } // int input = pc.getc(); // if (input == 2) { // status.state = 2; // goto Case2; // } // Case2: // ================================================================== // Input State // ================================================================== // status.state = 3; // goto Case3; // Case3: // ================================================================== // Control State // ================================================================== // status.state = 2; // goto Case2; // ========================================================================================================================================== // ================================================================== // Data concatenation // ================================================================== } // While (1) } // Main