![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
1 step for smart green house
main.cpp
- Committer:
- belloula
- Date:
- 2019-05-22
- Revision:
- 0:fcce3b1e1dec
File content as of revision 0:fcce3b1e1dec:
#include "mbed.h" // MBED LIBRARY #include "string.h" #include "DHT.h" // SETUP (ASSIGN) SERIAL COMMUNICATION PINS ON MBED Serial pc(USBTX, USBRX); // PC SERIAL OVER USB PORT ON MBED Serial HC06(p9, p10); DHT sensor(p23, DHT11); DigitalOut Relais1(p17); DigitalOut Relais2(p18); DigitalOut Relais3(p16); DigitalOut Relais4(p20); #define SBIT_CLKEN 0 /* RTC Clock Enable*/ #define SBIT_CTCRST 1 /* RTC Clock Reset */ #define SBIT_CCALEN 4 /* RTC Calibration counter enable */ int32_t TempsUnix = 0; int32_t TempsArrosage = 5;// en seconde uint8_t AlarmHOUR = 8; // Alarme hour value uint8_t AlarmMIN = 1; // Alarme min value bool alarmstate = false;// Determines whether the alarm is set or not bool ringflag = false; // Determines if alarm is ringing Ticker myTicker; void setclock() { pc.printf("Entrer Temps Unix actuel from https://www.timestampconvert.com/:\r\n"); pc.scanf("%u", &TempsUnix);//https://www.timestampconvert.com/ pc.printf("Temps Unix actuel %d:\r\n",TempsUnix); set_time(TempsUnix); // Set time to actual time } void readHC06() { int a = HC06.getc(); pc.printf("Le chifre est: %d \n\r",a); switch(a) { case '1': Relais1=0; break; case '2': Relais2=0; break; case '3': Relais3=0; break; case '4': Relais4=0; break; case 'A': Relais1=1; break; case 'B': Relais2=1; break; case 'C': Relais3=1; break; case 'D': Relais4=1; break; case '9': // A changer pour le rendre normalement ouvert Relais1=0; Relais2=0; Relais3=0; Relais4=0; break; case 'I': Relais1=1; Relais2=1; Relais3=1; Relais4=1; break; // operator doesn't match any case constant (+, -, *, /) default: printf("Error! operator is not correct"); } } void ResetRelais() { Relais1=1; Relais2=1; Relais3=1; Relais4=1; } /****************************************************************** * Arrosage * * This function rings while alarm by power pompe *****************************************************************/ void alarm_ring() { Relais1=0;//pompe en marche ringflag = true;//indicateur arrossage active --TempsArrosage; //decremettion temps d'arrosage de 1 secaonde if(TempsArrosage == 0 ) { Relais1=1; //Arret de la pompe myTicker.detach();// blocage des interruptions de la larme } } /****************************************************************** * Alarm_check * * This function compares the alarm time vs the current time. Once * alarm time and real time match it begins ringing the alarm. * Once the times differ then it turns off the alarm. *****************************************************************/ void alarm_check() { if ((LPC_RTC->HOUR == AlarmHOUR) && (LPC_RTC->MIN == AlarmMIN)) { if ((alarmstate == true) && (ringflag == false)) { myTicker.attach_us(&alarm_ring,1000000.0f); // run every 40us, Could use .attach(&onTick,0.00004) if you prefer. } } else { } } int main() { uint16_t year; uint8_t hour, min, sec, date, month; int error = 0; float h = 0.0f, c = 0.0f, f = 0.0f, k = 0.0f, dp = 0.0f, dpf = 0.0f; pc.baud(115200); HC06.baud(9600); ResetRelais(); pc.printf("Start Programme\n\r"); /* Disable RTC clock, reset clock, Enable RTC calibration */ LPC_RTC->CCR = ((1 << SBIT_CTCRST ) | (1 << SBIT_CCALEN)); LPC_RTC->CALIBRATION = 0x00; LPC_RTC->CCR = (1 << SBIT_CLKEN); /* Enable the clock for RTC */ // setclock(); /* Set Date and Time only once, comment these lines after setting the time and date */ // Set Date 23th Mai 2019 LPC_RTC->DOM = 23; // Update date value LPC_RTC->MONTH = 05; // Update month value LPC_RTC->YEAR = 2019; // Update year value // Set Time 10:40:25 AM LPC_RTC->HOUR = 8; // Update hour value LPC_RTC->MIN = 00; // Update min value LPC_RTC->SEC = 00; // Update sec value //set_time(1558477269); // Set time to Wed, 28 Oct 2009 11:35:37 alarmstate = true; HC06.attach(readHC06); // time_t seconds = time(NULL); // printf ("Time as seconds since January 1, 1970 = %d\n", seconds); //https://time.is/Unix_time_now // printf ("Time as a basic string = %s", ctime(&seconds)); // char buffer [32]; // strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds)); // printf ("Time as a custom formatted string = %s", buffer); while(1) { wait(1.0f); /* Read Time */ hour = LPC_RTC->HOUR; min = LPC_RTC->MIN; sec = LPC_RTC->SEC; /* Read Date */ date = LPC_RTC->DOM; month = LPC_RTC->MONTH; year = LPC_RTC->YEAR; pc.printf("Date: %2d/%2d/%4u\n\r",date,month,year); pc.printf("Time: %2d:%2d:%2d\n\r",hour,min,sec); error = sensor.readData(); if (0 == error) { c = sensor.ReadTemperature(CELCIUS); f = sensor.ReadTemperature(FARENHEIT); k = sensor.ReadTemperature(KELVIN); h = sensor.ReadHumidity(); dp = sensor.CalcdewPoint(c, h); dpf = sensor.CalcdewPointFast(c, h); printf("Temperature in Kelvin: %4.2f, Celcius: %4.2f, Farenheit %4.2f\n", k, c, f); printf("Humidity is %4.2f, Dewpoint: %4.2f, Dewpoint fast: %4.2f\n\r\n\r", h, dp, dpf); } else { printf("Error: %d\n", error); } /* Check to see if the alarm should be started/stopped */ alarm_check(); } }