descrizione nuovo progetto e codice da cui partire 5.05

Dependencies:   mbed

Committer:
Wonderjack996
Date:
Tue Sep 05 11:58:49 2017 +0000
Revision:
0:89b0715e5bdf
descrizione nuovo progetto e codice da cui partire

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wonderjack996 0:89b0715e5bdf 1 /*-----NEW PROJECT-----*/
Wonderjack996 0:89b0715e5bdf 2 /*Bisogna realizzare utilizzando la scheda ST nucleo F401RE un dispositivo che succesivamente verrà montato su varie macchine presenti
Wonderjack996 0:89b0715e5bdf 3 nel laboratorio di affidabilità.
Wonderjack996 0:89b0715e5bdf 4 Il compito di tale dispositivo è quello di verificare se la macchina sta lavorando oppure no e comunicare all'operatore lo stato della
Wonderjack996 0:89b0715e5bdf 5 macchina.
Wonderjack996 0:89b0715e5bdf 6 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
Wonderjack996 0:89b0715e5bdf 7 all'operatore attraverso una shield ethernet lo stato della macchina.
Wonderjack996 0:89b0715e5bdf 8 Il dispositivo lavora solo a macchina accesa.*/
Wonderjack996 0:89b0715e5bdf 9
Wonderjack996 0:89b0715e5bdf 10 /*gli stati che può assumere la macchina sono due:
Wonderjack996 0:89b0715e5bdf 11 - RUN macchina accesa e operativa
Wonderjack996 0:89b0715e5bdf 12 - IDLE macchina accesa ma non operativa*/
Wonderjack996 0:89b0715e5bdf 13
Wonderjack996 0:89b0715e5bdf 14
Wonderjack996 0:89b0715e5bdf 15 /*-----LIBRERIE-----*/
Wonderjack996 0:89b0715e5bdf 16 #include "mbed.h"
Wonderjack996 0:89b0715e5bdf 17 /*-----------------*/
Wonderjack996 0:89b0715e5bdf 18
Wonderjack996 0:89b0715e5bdf 19 /*-----COSTANTI-----*/
Wonderjack996 0:89b0715e5bdf 20 #define MIN_CONT 30 //specifico il numero di volte che ripeterò il processo di verifica dello stato del bottone/rele
Wonderjack996 0:89b0715e5bdf 21
Wonderjack996 0:89b0715e5bdf 22 #define TIME 100
Wonderjack996 0:89b0715e5bdf 23
Wonderjack996 0:89b0715e5bdf 24 #define NORMAL_OPEN 0 //specifico un valore da dare allo stato fisico "normalmente aperto"
Wonderjack996 0:89b0715e5bdf 25
Wonderjack996 0:89b0715e5bdf 26 #define NORMAL_CLOSE 1 //specifico un valore da dare allo stato fisico "normalmente chiuso"
Wonderjack996 0:89b0715e5bdf 27
Wonderjack996 0:89b0715e5bdf 28 /*a seconda del caso devo decidere se lo stato di RUN corrisponde allo stato fisico "normalmente aperto" oppure
Wonderjack996 0:89b0715e5bdf 29 "normalmente chiuso" specificandolo qui sotto*/
Wonderjack996 0:89b0715e5bdf 30 #define RUN NORMAL_OPEN //<---
Wonderjack996 0:89b0715e5bdf 31 /*------------------*/
Wonderjack996 0:89b0715e5bdf 32
Wonderjack996 0:89b0715e5bdf 33 /*-----VARIABILI-----*/
Wonderjack996 0:89b0715e5bdf 34 DigitalIn button(USER_BUTTON); //istanzio oggetto "button" per utilizzare il bottone/rele
Wonderjack996 0:89b0715e5bdf 35
Wonderjack996 0:89b0715e5bdf 36 DigitalOut myled(D11); //istanzio ogetto "myled" per gestire l'accensione e lo spegnimento di un led
Wonderjack996 0:89b0715e5bdf 37
Wonderjack996 0:89b0715e5bdf 38 /*variabili intere dove conto per quante volte di seguito lo stato del bottone/rele rimane uguale.
Wonderjack996 0:89b0715e5bdf 39 Se lo stato del bottone/rele è in RUN allora aumento la variabile "contRun", al contrario aumento la variabile
Wonderjack996 0:89b0715e5bdf 40 "contIdle" */
Wonderjack996 0:89b0715e5bdf 41 int contRun = 0, contIdle = 0;
Wonderjack996 0:89b0715e5bdf 42
Wonderjack996 0:89b0715e5bdf 43 /*flag che mi impediscono di comunicare lo stesso risultato più volte. Una volta comunicato lo stato di RUN
Wonderjack996 0:89b0715e5bdf 44 il flag dedicato (flagRun) passerà al valore "false" e non potrà più essere comunicato lo stato RUN prima
Wonderjack996 0:89b0715e5bdf 45 di ripassare dallo stato IDLE, idem dopo la comunicazione dello stato IDLE*/
Wonderjack996 0:89b0715e5bdf 46 bool flagRun = true, flagIdle = true;
Wonderjack996 0:89b0715e5bdf 47 /*-------------------*/
Wonderjack996 0:89b0715e5bdf 48
Wonderjack996 0:89b0715e5bdf 49 int main() {
Wonderjack996 0:89b0715e5bdf 50
Wonderjack996 0:89b0715e5bdf 51 while(true) { //attivo un ciclo infinito
Wonderjack996 0:89b0715e5bdf 52 if( button == RUN ){ //stato RUN
Wonderjack996 0:89b0715e5bdf 53 contRun++; //aumento di 1 la variabile "contRun"
Wonderjack996 0:89b0715e5bdf 54 contIdle = 0; /*una volta ritornato nello stato di RUN setto a 0 la variabile "contaIdle" in modo da
Wonderjack996 0:89b0715e5bdf 55 ripartire da capo una volta tornato in stato IDLE*/
Wonderjack996 0:89b0715e5bdf 56
Wonderjack996 0:89b0715e5bdf 57 /*una volta che la variabile "contaRun" raggiunge un valore minimo fissato dalla costate MIN_CONT allora considero
Wonderjack996 0:89b0715e5bdf 58 lo stato di RUN come attendibile e lo posso comunicare a utente.
Wonderjack996 0:89b0715e5bdf 59 dopo averlo comunicato la prima volta il "flagRun" passa al valore "false" e non verrà ritrasmesso prima di
Wonderjack996 0:89b0715e5bdf 60 passare nuovamente allo stato IDLE*/
Wonderjack996 0:89b0715e5bdf 61 if( contRun >= MIN_CONT && flagRun ){
Wonderjack996 0:89b0715e5bdf 62 flagRun = false; //setto "flagRun" a "false"
Wonderjack996 0:89b0715e5bdf 63 flagIdle = true; //setto "flagIdle" a "true"
Wonderjack996 0:89b0715e5bdf 64 myled = 1; /*comunico a utente che la macchina è in stato di RUN con l'accensione di un led.
Wonderjack996 0:89b0715e5bdf 65 Successivamente lo stato sarà comunicato al PC utilizzando una scheda di rete*/
Wonderjack996 0:89b0715e5bdf 66 }
Wonderjack996 0:89b0715e5bdf 67 }
Wonderjack996 0:89b0715e5bdf 68 else{ //stato IDLE, funzionamento logico uguale allo stato RUN
Wonderjack996 0:89b0715e5bdf 69 contRun = 0;
Wonderjack996 0:89b0715e5bdf 70 contIdle++;
Wonderjack996 0:89b0715e5bdf 71 if( contIdle >= MIN_CONT && flagIdle ){
Wonderjack996 0:89b0715e5bdf 72 flagRun = true;
Wonderjack996 0:89b0715e5bdf 73 flagIdle = false;
Wonderjack996 0:89b0715e5bdf 74 myled = 0;
Wonderjack996 0:89b0715e5bdf 75 }
Wonderjack996 0:89b0715e5bdf 76 }
Wonderjack996 0:89b0715e5bdf 77 wait_ms(TIME); //tra una lettura del bottone/rele e l'altra attendo un TOT tempo specificato nella costante TIME
Wonderjack996 0:89b0715e5bdf 78 }
Wonderjack996 0:89b0715e5bdf 79 }