]> git.piffa.net Git - sketchbook_andrea/commitdiff
Rover prima lezione
authorAndrea Manni <andrea@piffa.net>
Mon, 6 Mar 2017 15:24:17 +0000 (16:24 +0100)
committerAndrea Manni <andrea@piffa.net>
Mon, 6 Mar 2017 15:24:17 +0000 (16:24 +0100)
advanced_projects/state_machine/README [new file with mode: 0644]
advanced_projects/state_machine/blink/blink_1/blink_1.ino [new file with mode: 0644]
advanced_projects/state_machine/blink/blink_2_trans/blink_2_trans.ino [new file with mode: 0644]
advanced_projects/state_machine/blink_1/blink_1.ino
advanced_projects/state_machine/blink_2_trans/blink_2_trans.ino
basic/blinks/blink_2_2_funzioni_argomenti/blink_2_2_funzioni_argomenti.ino
basic/blinks/millis/millis.ino [new file with mode: 0644]
hardware/ultrasonic/ultrasonic_distance_simple/ultrasonic_distance_simple.ino

diff --git a/advanced_projects/state_machine/README b/advanced_projects/state_machine/README
new file mode 100644 (file)
index 0000000..15f5175
--- /dev/null
@@ -0,0 +1,23 @@
+FSM
+*******
+
+
+Risorse utili per le Macchine a stati.
+
+
+Tutorials
+===========
+
+* https://www.sparkfun.com/news/1801
+
+
+
+
+
+
+
+Elementi
+============
+
+* http://playground.arduino.cc/Code/Enum
+* https://www.arduino.cc/en/Reference/SwitchCase
diff --git a/advanced_projects/state_machine/blink/blink_1/blink_1.ino b/advanced_projects/state_machine/blink/blink_1/blink_1.ino
new file mode 100644 (file)
index 0000000..c119794
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+  Blink FSM
+
+  Accensione e spegnimanto di un LED utilizzando
+  una FSM 2 stati statici.
+
+Costrutto switch basato su uno struct.
+
+ */
+
+// Dichiarazione variabili
+int led = 13;
+int pausa = 500;  // Variabile richiambile nel corso dell'esecuzione
+
+void setup() {
+    // Inizializziamo il PIN 13 come OUTPUT
+    pinMode(led, OUTPUT);
+}
+
+enum fsm_stati { // Stati della FMS
+    on,
+    off
+};
+
+fsm_stati stato;
+
+void loop() {
+    switch (stato){
+    case on :
+        digitalWrite(led, HIGH);  // Mette il PIN del LED in stato acceso
+        delay(pausa);              // Aspetta un secondo (mille millisecondi)
+
+        stato = off ; // Setta il prossimo state
+        break;
+
+    case off:
+        digitalWrite(led, LOW);   // Mette il PIN del LED in stato spento
+        delay(pausa);               // Aspetta mezzo secondo
+
+        stato = on ;
+        break;
+    }
+}
diff --git a/advanced_projects/state_machine/blink/blink_2_trans/blink_2_trans.ino b/advanced_projects/state_machine/blink/blink_2_trans/blink_2_trans.ino
new file mode 100644 (file)
index 0000000..1841f87
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+  Blink FSM
+
+  Accensione e spegnimanto di un LED utilizzando
+  una FSM  con 4 stati, statici e di transizione.
+
+Costrutto switch basato su uno struct.
+
+ */
+
+// Dichiarazione variabili
+int led = 11; // PWM
+int pausa = 1000;  // Variabile richiambile nel corso dell'esecuzione
+byte lum = 0 ;
+
+void setup() {
+    // Inizializziamo il PIN 13 come OUTPUT
+    pinMode(led, OUTPUT);
+}
+
+enum fsm_stati { // Stati della FMS
+    on,     // Statico
+    to_off, // Transizione
+    off,
+    to_on
+};
+
+fsm_stati stato ;
+
+void loop() {
+    switch (stato) {
+    case on :
+       // Operativa: Machine
+        digitalWrite(led, HIGH);  // Mette il PIN del LED in stato acceso
+        delay(pausa);              
+
+       // Stati
+        stato = to_off ; // Setta il prossimo state
+        lum = 255;
+        break;
+
+    case to_off :
+        while (lum > 0) {
+            lum-- ;
+            analogWrite(led, lum);  // Mette il PIN del LED in stato acceso
+            delay(1);              
+        }
+
+        stato = off ; // Setta il prossimo state
+        break;
+
+    case off:
+        digitalWrite(led, LOW);   // Mette il PIN del LED in stato spento
+        delay(pausa);             
+
+        stato = to_on ;
+        lum = 0;
+        break;
+
+    case to_on :
+        while (lum < 255) {
+            lum++ ;
+            analogWrite(led, lum);  // Mette il PIN del LED in stato acceso
+            delay(1);              
+        }
+
+        stato = on ; // Setta il prossimo state
+        break;
+    }
+}
+
+/* Domande:
+
+ 1.Cosa comporta l'uso della funzione delay?
+ 2.Come si puo' modificare lo sketch per poter eseguire piu' conpiti contemporaneamente?
+
+Esercizi successivi:
+- Creare una FSM con un LED RGB avente due stati Red e Green, una transizione yellow tra i due
+- Creare una FSM per la gestione di un semaforo 
+       (esempio disponibile in sketchbook_andrea/advanced_projects/state_machine )
+
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ Soluzioni:
+
+ 1.Delay rende il codice blocking, null'altro puo' essere eseguito durante i delay
+ 2.Si potrebbe utilizzare millis(), vedi esercizi multitasking
+*/
index 8f1f3be40892de9f631ddaf6187b1a4cd616aad6..e5b13959ac4eb92f890b0c8caf83af13e5cace2b 100644 (file)
@@ -25,7 +25,7 @@ enum fsm_stati { // Stati della FMS
 fsm_stati stato;
 
 void loop() {
-    switch (stato){
+    switch (stato) {
     case on :
         // Machine: operazioni svolte
         digitalWrite(led, HIGH);  // Mette il PIN del LED in stato acceso
@@ -41,5 +41,8 @@ void loop() {
 
         stato = on ;
         break;
+
+    default: // Opzionale, quando non si verificano altre condizioni
+        break;
     }
 }
index 9a4fa757efc5ee04edbe7ec87716a505734c900a..4abe5995e1a984333761785aa9a4b8e28baa4280 100644 (file)
@@ -11,7 +11,7 @@ Costrutto switch basato su uno struct.
 // Dichiarazione variabili
 int led = 11; // PWM
 int pausa = 1000;  // Variabile richiambile nel corso dell'esecuzione
-byte lum = 0 ;
+byte lum = 255 ;
 
 void setup() {
     // Inizializziamo il PIN 13 come OUTPUT
@@ -36,7 +36,7 @@ void loop() {
 
        // Stati
         stato = to_off ; // Setta il prossimo state
-        lum = 255;
+        // lum = 255;
         break;
 
     case to_off :
@@ -54,7 +54,7 @@ void loop() {
         delay(pausa);             
 
         stato = to_on ;
-        lum = 0;
+        // lum = 0;
         break;
 
     case to_on :
@@ -66,6 +66,9 @@ void loop() {
 
         stato = on ; // Setta il prossimo state
         break;
+
+    default: // Opzionale, quando non si verificano altre condizioni
+        break;
     }
 }
 
@@ -103,4 +106,5 @@ Esercizi successivi:
 
  1.Delay rende il codice blocking, null'altro puo' essere eseguito durante i delay
  2.Si potrebbe utilizzare millis(), vedi esercizi multitasking
+   oppure: https://www.sparkfun.com/news/1801
 */
index 78f992e44bc24a21911fcd0d025e74f81a886b61..27f5ed32a4cdeae6dc92bc1337499a8abed392f4 100644 (file)
@@ -1,4 +1,6 @@
-
+void brilla(int velocita = 1000); // Function prototype con valore di default
+// _Deve_ essere dichiarato in alto, arduino sbaglia a creare i prototipi.
+// Altro modo: metterle in un "tab" functions.h e includere questo
 /*
   Blink v2
  
@@ -26,7 +28,7 @@ void setup() {
 void loop() {
   brilla(300);
   brilla(300);
-  brilla(600);
+  brilla(); // default
 }
 
 // Funzioni create dall'utente:
diff --git a/basic/blinks/millis/millis.ino b/basic/blinks/millis/millis.ino
new file mode 100644 (file)
index 0000000..d2d473d
--- /dev/null
@@ -0,0 +1,35 @@
+/* Blink without Delay - only led
+ Turns on and off a light emitting diode(LED) connected to a digital  
+ pin, without using the delay() function.  This means that other code
+ can run at the same time without being interrupted by the LED code.
+Schema: https://lab.piffa.net/schemi/circuito_led_bb.png
+ http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
+ */
+
+// constants won't change. Used here to 
+// set pin numbers:
+const int led = 13;      // Primo LED
+
+              
+unsigned long previousMillis = 0;        // will store last time LED was updated
+unsigned long interval = 1000;           // interval at which to blink (milliseconds)
+
+void setup() {
+  // set the digital pin as output:
+  pinMode(led, OUTPUT);      
+}
+
+void loop()
+{
+  if (millis() - previousMillis >= interval) {
+    // Timestamp + timestamp = delta temporale
+    previousMillis += interval ;
+
+    digitalWrite(led, !digitalRead(led));
+  }
+}
index 85b5ad629ab52b9e0fa78831bdeef15a458a664a..4bb971aacccd653f4ea7dfe8f1c5034d6ecead2b 100644 (file)
@@ -1,17 +1,20 @@
 /*
 HC-SR04 Ping distance sensor]
- VCC to arduino 5v GND to arduino GND
- Echo to Arduino pin 13 Trig to Arduino pin 12
+ VCC to arduino 5v GND to arduino GND
+ Echo to Arduino pin 13 Trig to Arduino pin 12
  Red POS to Arduino pin 11
  Green POS to Arduino pin 10
  560 ohm resistor to both LED NEG and GRD power rail
  More info at: http://goo.gl/kJ8Gl
  Original code improvements to the Ping sketch sourced from Trollmaker.com
  Some code and wiring inspired by http://en.wikiversity.org/wiki/User:Dstaub/robotcar
+
+Schema: http://www.instructables.com/id/Simple-Arduino-and-HC-SR04-Example/step2/Connect-the-components/
+
  */
 
-#define trigPin 8
-#define echoPin 7
+#define trigPin 12
+#define echoPin 13
 #define RED 11
 #define GREEN 10