3FEN / Mbed 2 deprecated new_project

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /*-----NEW PROJECT-----*/
00002 /*Bisogna realizzare utilizzando la scheda ST nucleo F401RE un dispositivo che succesivamente verrà montato su varie macchine presenti
00003 nel laboratorio di affidabilità.
00004 Il compito di tale dispositivo è quello di verificare se la macchina sta lavorando oppure no e comunicare all'operatore lo stato della
00005 macchina. 
00006 Per fare ciò il dipositivo viene collegato a un rele presente nella macchina. La scheda st deve verifiare lo stato di tale rele e comunicare
00007 all'operatore attraverso una shield ethernet lo stato della macchina.
00008 Il dispositivo lavora solo a macchina accesa.*/
00009 
00010 /*gli stati che può assumere la macchina sono due:
00011 - RUN macchina accesa e operativa
00012 - IDLE macchina accesa ma non operativa*/
00013 
00014 
00015 /*-----LIBRERIE-----*/
00016     #include "mbed.h"
00017 /*-----------------*/
00018 
00019 /*-----COSTANTI-----*/
00020     #define MIN_CONT 30 //specifico il numero di volte che ripeterò il processo di verifica dello stato del bottone/rele
00021     
00022     #define TIME 100
00023     
00024     #define NORMAL_OPEN 0 //specifico un valore da dare allo stato fisico "normalmente aperto"
00025     
00026     #define NORMAL_CLOSE 1 //specifico un valore da dare allo stato fisico "normalmente chiuso"
00027     
00028     /*a seconda del caso devo decidere se lo stato di RUN corrisponde allo stato fisico "normalmente aperto" oppure
00029       "normalmente chiuso" specificandolo qui sotto*/
00030     #define RUN NORMAL_OPEN //<---
00031 /*------------------*/
00032 
00033 /*-----VARIABILI-----*/
00034     DigitalIn button(USER_BUTTON); //istanzio oggetto "button" per utilizzare il bottone/rele
00035     
00036     DigitalOut myled(D11); //istanzio ogetto "myled" per gestire l'accensione e lo spegnimento di un led
00037     
00038     /*variabili intere dove conto per quante volte di seguito lo stato del bottone/rele rimane uguale.
00039       Se lo stato del bottone/rele è in RUN allora aumento la variabile "contRun", al contrario aumento la variabile 
00040       "contIdle" */
00041     int contRun = 0, contIdle = 0;
00042     
00043     /*flag che mi impediscono di comunicare lo stesso risultato più volte. Una volta comunicato lo stato di RUN
00044       il flag dedicato (flagRun) passerà al valore "false" e non potrà più essere comunicato lo stato RUN prima
00045       di ripassare dallo stato IDLE, idem dopo la comunicazione dello stato IDLE*/
00046     bool flagRun = true, flagIdle = true;
00047 /*-------------------*/
00048 
00049 int main() {
00050     
00051     while(true) { //attivo un ciclo infinito
00052         if( button == RUN ){ //stato RUN
00053             contRun++; //aumento di 1 la variabile "contRun"
00054             contIdle = 0; /*una volta ritornato nello stato di RUN setto a 0 la variabile "contaIdle" in modo da
00055                             ripartire da capo una volta tornato in stato IDLE*/
00056                             
00057             /*una volta che la variabile "contaRun" raggiunge un valore minimo fissato dalla costate MIN_CONT allora considero
00058               lo stato di RUN come attendibile e lo posso comunicare a utente.
00059               dopo averlo comunicato la prima volta il "flagRun" passa al valore "false" e non verrà ritrasmesso prima di
00060               passare nuovamente allo stato IDLE*/
00061             if( contRun >= MIN_CONT && flagRun ){ 
00062                 flagRun = false; //setto "flagRun" a "false"
00063                 flagIdle = true; //setto "flagIdle" a "true"
00064                 myled = 1; /*comunico a utente che la macchina è in stato di RUN con l'accensione di un led.
00065                              Successivamente lo stato sarà comunicato al PC utilizzando una scheda di rete*/
00066             }
00067         }   
00068         else{ //stato IDLE, funzionamento logico uguale allo stato RUN
00069             contRun = 0;
00070             contIdle++;
00071             if( contIdle >= MIN_CONT && flagIdle ){
00072                 flagRun = true;
00073                 flagIdle = false;
00074                 myled = 0;
00075             }
00076         }
00077         wait_ms(TIME); //tra una lettura del bottone/rele e l'altra attendo un TOT tempo specificato nella costante TIME
00078     }
00079 }