.

Dependencies:   RTC-DS1307 mbed

main.cpp

Committer:
Karrots3
Date:
2016-04-18
Revision:
0:3fa629914ea5
Child:
1:134750dc8585

File content as of revision 0:3fa629914ea5:

#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;
    }
}