.

Dependencies:   RTC-DS1307 mbed

Revision:
0:3fa629914ea5
Child:
1:134750dc8585
diff -r 000000000000 -r 3fa629914ea5 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Apr 18 16:08:43 2016 +0000
@@ -0,0 +1,178 @@
+#include "mbed.h"
+#include "Servo.h"
+#include "Rtc_Ds1307.h"
+#include "note.h"
+
+
+
+DigitalIn bottone1(p23);
+DigitalOut ledR(p30);
+DigitalOut ledG(p29);
+DigitalOut ledB(p28);
+AnalogIn sensore_lum(p20);
+AnalogIn potenziometro(p15);
+PwmOut piezo(p20);
+
+Serial pc(USBTX, USBRX, "pc");
+
+bool flag1=0, flag2=0;
+int  ultimo_giorno=0;
+double temp_lum;
+int orario;
+long long int c;
+/*
+struct orario {
+    int ora;
+    int minuti;
+};
+*/
+
+void setOrario_Pastiglia();
+void suono(int frequenza, int beat);
+void scesa_della_pastiglia();
+void seriale(Rtc_Ds1307::Time_rtc time);
+
+int main()
+{
+    Rtc_Ds1307::Time_rtc time= {};
+    setOrario_Pastiglia();
+    while(1) {
+        if(ultimo_giorno!=time.date) {      //if ultimo giorno è oggi
+            if(orario == time.hour) {       //if è l'ora della pappa
+                scesa_della_pastiglia();
+                ultimo_giorno=time.date;
+            } else if(bottone1 && time.hour==(orario-1) && time.min>=30) {    //30 min prima
+                scesa_della_pastiglia();
+                ultimo_giorno=time.date;
+            } else if(bottone1 && time.hour>orario) {       //l'ora è gia passata ma devo ancora prenderlo
+                scesa_della_pastiglia();
+                ultimo_giorno=time.date;
+            } else {
+                if(bottone1) {      //l'ora deve ancora venire e premo bottone
+                    ledR=1;
+                    suono(NOTE_B4,1);
+                    wait(1);
+                    ledR=0;
+                }
+            }
+        } else {      //gia fatto oggi e premo bottone
+            if(bottone1) {
+                ledR=1;
+                suono(NOTE_B4,1);
+            }
+        }
+    }//while(1)
+}//main
+
+void scesa_della_pastiglia()
+{
+    ledB=1;
+    suono(440,1);
+    do {
+        /*pastiglia*/
+        c++;
+        if(bottone1) {
+            flag1=1;
+            /////funzione del servo che gira per far scendere la pastiglia
+            ledG=1;
+            ledB=0;
+            wait_ms(10);
+            temp_lum=sensore_lum;
+            c=0;
+        } else if(c>0 && c%1000==0) {
+            suono(NOTE_D5, 1);
+        }
+    } while(!flag1) ;
+    flag1=0;
+    do {
+        c++;
+        if(sensore_lum<=temp_lum/20) {
+            flag1=1;
+            ledG=0;
+            suono(NOTE_A3,1);
+        } else if(c>0 && c%1000==0) {
+            suono(NOTE_D5, 1);
+        }
+        wait_ms(10);
+    } while(!flag1);
+}
+
+void setOrario_Pastiglia()
+{
+    bool pot=0;
+    bool seri=0;
+    bool Fpot=0;
+
+    do {
+        if(bottone1)
+            pot=1;
+        wait_ms(1);
+    } while(!pot);
+
+    if(pot) {
+        wait(0.2);
+        ledR=1;
+        ledG=1;
+        ledB=1;
+        suono(NOTE_A3, 2);
+
+        do {
+            if(bottone1) {
+                ledR=0;
+                ledG=0;
+                ledB=0;
+                orario=(potenziometro/1024)*24;
+                Fpot=1;
+                suono(NOTE_A3, 1);
+            }
+        } while(!Fpot);
+
+    }
+}
+
+void suono(int frequenza, int beat)
+{
+    piezo.period(1.0 / frequenza);
+    piezo.write(0.5);
+    wait(1.0 / beat);
+    piezo.write(0);
+    wait(0.05);
+}
+
+
+
+void seriale(Rtc_Ds1307::Time_rtc time) {
+    int c;
+
+
+    pc.printf("**********************************\n");
+    pc.printf("* Menu :                            *\n");
+    pc.printf("* 1 - imposta ora orologio       *\n");
+    pc.printf("* 2 - imposta ora pastiglia          *\n");
+    pc.printf("* 3 - mostra settaggi           *\n");
+    pc.scanf("%d", &c);
+
+    switch(c) {
+        case 1:
+            pc.printf("Giorno (0..31)");
+            pc.scanf("%d", &time.date);
+            pc.printf("Mese (1..12)");
+            pc.scanf("%d", &time.mon);
+            pc.printf("Anno ");
+            pc.scanf("%d", &time.year);
+            pc.printf("Ore (0..23)");
+            pc.scanf("%d", &time.hour);
+            pc.printf("Minuti (0..59)");
+            pc.scanf("%d", &time.min);
+            pc.printf("Secondi (0..59)");
+            pc.scanf("%d", &time.sec);
+            break;
+        case 2:
+            pc.printf("Orario pastiglia");
+            pc.scanf("%d", &orario);
+            break;
+        case 3:
+            pc.printf("Ora sono le : %02d:%02d:%02d del %02d/%02d/%04d \n", time.hour, time.min, time.sec, time.mon, time.date, time.year);
+            break;
+    }
+}