Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
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 }
Generated on Thu Jul 14 2022 15:32:47 by
1.7.2