Esempio per carlo

Dependencies:   mbed

Revision:
1:2ca9dd78e30c
Parent:
0:d388a00e3820
--- a/main.cpp	Thu Jan 25 10:30:24 2018 +0000
+++ b/main.cpp	Wed Mar 28 07:59:20 2018 +0000
@@ -1,31 +1,60 @@
 #include "mbed.h"
 #include <stdlib.h>
 
+/*
+Abilitando il 
+*/
 
-InterruptIn encoder(USER_BUTTON); //FACCIO FINTA CHE L'encoder sia il bottone attento ne servono due uno per ruota
 
-long int count1;
-int scattiPerGiro = 3;
- 
-void ruota1() {
-    count1++;
+Ticker sonar_tick;
+float distanza_misurata = 0;
+
+//Qui va messa la routine per misurare la distanza con il sonar
+void sonar_measure() {
+    //distanza_misurata = qui va messo il codice di misura 
 }
 
 
-float numeroGiri(){
-   return count1 / scattiPerGiro;
-}
-
-
-
-
-
-int main()
-{
-    encoder.rise(&ruota1);
-
-    while (1) {
-        led = !led;
-        wait(delay);
+int main(){
+    
+    /*
+    Con questo codice fai in modo che ogni due secondi venga 
+    chiamata la funzione di misura della distanza.
+    C'è un problema di fondo immagina che il processore stia usando una periferica 
+    lenta come ad esempio la seriale per scrivere a terminale.
+    
+    Ora immagina che questa funzione di scrittura ci metta più di due secondi per scrivere a terminale
+    il risultato sarà che ad un certo punto la scrittura video verrà interrotta verrà eseguita la 
+    funzione di misura che magari vuole stampare a video qualcosa con risultati impredibili
+    
+    
+    Altro problema immagina che la funzione di misura impiegi più di due secondi ad essere eseguita
+    il risultato sarà che parte la funzione prima di essere finita verrà interrotta per far partire 
+    ancora la stessa funzione con il risultato di andare a bloccare il processore
+    */
+    sonar_tick.attach(&sonar_measure, 2.0); 
+    
+    
+    
+    /*
+    Fatto il preambolo le strade sono le seguenti da valutare caso per caso
+    1) bloccare il ticker con il risultato che il robot potrebbe andare a schiantarsi funzione detach con attach per riparetire
+    2) sospendere gli interrupt vedi sopra con le funzioni __disable_irq(); __enable_irq();
+    3) usare le code in modo da non avere sovrapposizione con le periferiche https://os.mbed.com/docs/v5.8/tutorials/the-eventqueue-api.html
+    4) usi il DMA ma questo non è accessibile direttamente da mbed 
+    
+    
+    Morale della favola la 3 è la soluzione più fattbile ed elegante ;)
+    
+    */
+    
+    
+    
+    
+    
+    //Qui ho tutte le mie cosette
+    while(1) {
+        wait(0.2);
     }
-}
+    
+}
\ No newline at end of file