]> git.piffa.net Git - sketchbook_andrea/commitdiff
serial
authorAndrea Manni <andrea@piffa.net>
Sun, 7 Jun 2015 10:21:54 +0000 (12:21 +0200)
committerAndrea Manni <andrea@piffa.net>
Sun, 7 Jun 2015 10:21:54 +0000 (12:21 +0200)
serial/comm_tx/comm_tx.ino
serial/serial_2_comm_tx_2_input/serial_2_comm_tx_2_input.ino
serial/serial_comm_rx/serial_comm_rx.ino
serial/serial_comm_rx_state/serial_comm_rx_state.ino [new file with mode: 0644]
serial/serial_comm_tx/serial_comm_tx.ino
serial/serial_comm_tx_debounce/serial_comm_tx_debounce.ino [new file with mode: 0644]

index 2d0935cc19f42ac6a87739bdf45bd6b8b20572ab..2afb4e73f6cce2b5b09bbc23f63a5d13220d841e 100644 (file)
@@ -9,13 +9,13 @@
  */
 
 // Prima scheda: input
-int led = 13;
+int led = 13;  // Debug
 int input = 2;  // Questa e' la scheda con un input
 int TX = 3 ; // Pin di trasmissione
 
 void setup() {                
   // initialize the digital pin as an output.
-  pinMode(led, OUTPUT);       // Il PIN e' attivato come output
+  pinMode(led, OUTPUT);       // Il PIN e' attivato come output per DEBUG
   pinMode(TX, OUTPUT);       // Il PIN e' attivato come output
   pinMode(input, INPUT);        // Il PIN e' attivato come output
 }
@@ -23,7 +23,7 @@ void setup() {
 // the loop routine runs over and over again forever:
 void loop() {
   if (digitalRead(input) == HIGH) { // Verifica se il PIN input e' +5v
-    digitalWrite(led, HIGH);
+    digitalWrite(led, HIGH); // Debug
     digitalWrite(TX, HIGH);
     delay(50);
   } 
index aa43a760e00d939a7bb0dee504fdc436fbfdc85b..e33835f91d9fb22b18cb17274a91905e8acce89b 100644 (file)
@@ -29,12 +29,12 @@ void setup() {
 void loop() {
   if (digitalRead(input) == HIGH) { // Verifica se il PIN input e' +5v
     digitalWrite(led, HIGH);
-    Serial.write(2);
+    Serial.write(2); // Indicatore per accendere il LED 2
     delay(50);
   } 
   if (digitalRead(inputRed) == HIGH) { // Verifica se il PIN input e' +5v
     digitalWrite(led, HIGH); 
-    Serial.write(3);
+    Serial.write(3); // Idicatore per accendere il LED 3
     delay(50);
   } 
   digitalWrite(led, LOW);
index 56411e0835f8e09a6abc923f02282a6055df7f98..1dd67dba5787dad8bf459722140c90c5d7039112 100644 (file)
@@ -32,3 +32,11 @@ void loop() {
   }
 }
 
+/* Domande
+Una connessione analogica permette di passare un solo tipo di segnale
+con eventuale modulazione (8bit in output da PWM e 10bit di scansione 
+come analog input).
+
+- Quanti tipi di dati permette di trasmettere la seriale?
+- Comandare un LED RGB via PWM via seriale (da una Arduino o da un PC).
+*/
diff --git a/serial/serial_comm_rx_state/serial_comm_rx_state.ino b/serial/serial_comm_rx_state/serial_comm_rx_state.ino
new file mode 100644 (file)
index 0000000..697a39d
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+  Serial comm: RX
+ Comunicazione seriale tra due schede arduino.
+ La prima scheda ha un bottone come input e 
+ comunica con un altra scheda che monta un LED come output.
+ Il led della seconda si accende quando rileva
+ la pressione del bottone della prima.
+ */
+
+// Seconda scheda: output
+// PIN 0 = RX
+int led = 13; // Questa scheda ha spolo l'output
+int ledState = 0;         // stato attuale del LED
+int incomingByte;   // Dato ricevuto via seriale
+
+
+// the setup routine runs once when you press reset:
+void setup() {                
+  // initialize the digital pin as an output.
+  pinMode(led, OUTPUT);       // Il PIN e' attivato come output
+
+  Serial.begin(9600); // Attiviamo la seriale
+}
+
+// the loop routine runs over and over again forever:
+void loop() {
+  if (Serial.available() > 0) {
+incomingByte = Serial.read();
+    if (incomingByte == 1) { // Verifica se viene ricevuto il dato 1
+      ledState = !ledState ; // Cambia lo stato del LED
+
+      // debug
+      Serial.print("I received: ");
+      Serial.println(incomingByte);
+    }
+  }
+  digitalWrite(led, ledState); // Aggiorna lo stato del LED
+}
+
+/* Domande
+ Una connessione analogica permette di passare un solo tipo di segnale
+ con eventuale modulazione (8bit in output da PWM e 10bit di scansione 
+ come analog input).
+ - Quanti tipi di dati permette di trasmettere la seriale?
+ - Comandare un LED RGB via PWM via seriale (da una Arduino o da un PC).
+ - Che caratteristiche di latenza si hanno rispetto 
+ a una connessione analogica?
+ - Rifare lo sketch utilizzando una STATE MACHINE: quando il
+ il LED viene ACCESO / SPENTO alternativamente alla pressione
+ del bottone.
+ - Dove dovremo implementare il DEBOUNCE?
+ - Dove implementare la gestione dello STATO?
+ */
+
+
+
index 1615fa24372d928feb624db780eb8e0a577074b0..e91df2233252f6cbcdfdfcad5d254cc4ffcb1828 100644 (file)
@@ -17,14 +17,14 @@ int input = 2;  // Questa e' la scheda con un input
 void setup() {                
   // initialize the digital pin as an output.
   pinMode(led, OUTPUT);       // Il PIN e' attivato come output
-  pinMode(input, INPUT);        // Il PIN e' attivato come output
+  pinMode(input, INPUT_PULLUP);        // Il PIN e' attivato come output
   
   Serial.begin(9600); // Attiviamo la seriale
 }
 
 // the loop routine runs over and over again forever:
 void loop() {
-  if (digitalRead(input) == HIGH) { // Verifica se il PIN input e' +5v
+  if (digitalRead(input) == LOW) { // Verifica se il bottone e' premuto
     digitalWrite(led, HIGH);
     Serial.write(1);
     delay(50);
@@ -36,5 +36,17 @@ void loop() {
   }
 }
 
+/* Domande
+Una connessione analogica permette di passare un solo tipo di segnale
+con eventuale modulazione (8bit in output da PWM e 10bit di scansione 
+come analog input).
 
+- Quanti tipi di dati permette di trasmettere la seriale?
+- Comandare un LED RGB via PWM via seriale (da una Arduino o da un PC).
+- Che caratteristiche di latenza si hanno rispetto 
+  a una connessione analogica?
+- Rifare lo sketch utilizzando una STATE MACHINE: quando il
+  il LED viene ACCESO / SPENTO alternativamente alla pressione
+  del bottone.
+*/
 
diff --git a/serial/serial_comm_tx_debounce/serial_comm_tx_debounce.ino b/serial/serial_comm_tx_debounce/serial_comm_tx_debounce.ino
new file mode 100644 (file)
index 0000000..08d03e3
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+  Serial comm: TX
+ Comunicazione seriale tra due schede arduino.
+ La prima scheda ha un bottone come input e 
+ comunica con un altra scheda che monta un LED come output.
+ Il led della seconda si accende quando rileva
+ la pressione del bottone della prima.
+ */
+
+// Prima scheda: input
+// PIN 1 = TX
+int led = 13;
+int input = 2;  // Questa e' la scheda con un input           
+int statoAttuale;                        // variable for reading the pin status
+int ultimoStato;                // variable to hold the last button state
+long ultimoCambio = 0;  // Momento in cui e' stato attivato il PIN input
+long debounceDelay = 100;    // Tempo di debounce
+
+// the setup routine runs once when you press reset:
+void setup() {                
+  // initialize the digital pin as an output.
+  pinMode(led, OUTPUT);       // Il PIN e' attivato come output
+  pinMode(input, INPUT_PULLUP);        // Il PIN e' attivato come output
+  
+  Serial.begin(9600); // Attiviamo la seriale
+}
+
+// the loop routine runs over and over again forever:
+void loop() {
+  statoAttuale = digitalRead(input);      // read input value and store it in var
+
+  if (statoAttuale == LOW && statoAttuale != ultimoStato && millis() - ultimoCambio > debounceDelay ) {
+    // 
+    Serial.write(1); // Invia il dato via seriale
+    //Serial.write(49); // Invia il dato via seriale: 49 e' ASCII per 1
+    //Serial.print(1); // Invia il dato via seriale in ASCII 
+    
+     ultimoCambio = millis() ;    // Registra il tempo attuale
+  }
+  ultimoStato = statoAttuale;                 // save the new state in our variable
+  Serial.flush();
+}
+
+/* Domande
+Una connessione analogica permette di passare un solo tipo di segnale
+con eventuale modulazione (8bit in output da PWM e 10bit di scansione 
+come analog input).
+
+- Quanti tipi di dati permette di trasmettere la seriale?
+- Comandare un LED RGB via PWM via seriale (da una Arduino o da un PC).
+- Che caratteristiche di latenza si hanno rispetto 
+  a una connessione analogica?
+- Rifare lo sketch utilizzando una STATE MACHINE: quando il
+  il LED viene ACCESO / SPENTO alternativamente alla pressione
+  del bottone.
+- Dove dovremo implementare il DEBOUNCE?
+- Dove implementare la gestione dello STATO?
+
+HINT: Vedere lo script basc/buttons/debounce-2_and_contratto
+*/
+