descrizione nuovo progetto e codice da cui partire 5.05
Dependencies: mbed
main.cpp@0:89b0715e5bdf, 2017-09-05 (annotated)
- 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?
User | Revision | Line number | New 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 | } |