From f9205d0003679ad5fbd07354219537b10abe23dd Mon Sep 17 00:00:00 2001 From: Andrea Manni Date: Sun, 7 Jun 2015 12:21:54 +0200 Subject: [PATCH] serial --- serial/comm_tx/comm_tx.ino | 6 +- .../serial_2_comm_tx_2_input.ino | 4 +- serial/serial_comm_rx/serial_comm_rx.ino | 8 +++ .../serial_comm_rx_state.ino | 58 +++++++++++++++++ serial/serial_comm_tx/serial_comm_tx.ino | 16 ++++- .../serial_comm_tx_debounce.ino | 62 +++++++++++++++++++ 6 files changed, 147 insertions(+), 7 deletions(-) create mode 100644 serial/serial_comm_rx_state/serial_comm_rx_state.ino create mode 100644 serial/serial_comm_tx_debounce/serial_comm_tx_debounce.ino diff --git a/serial/comm_tx/comm_tx.ino b/serial/comm_tx/comm_tx.ino index 2d0935c..2afb4e7 100644 --- a/serial/comm_tx/comm_tx.ino +++ b/serial/comm_tx/comm_tx.ino @@ -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); } diff --git a/serial/serial_2_comm_tx_2_input/serial_2_comm_tx_2_input.ino b/serial/serial_2_comm_tx_2_input/serial_2_comm_tx_2_input.ino index aa43a76..e33835f 100644 --- a/serial/serial_2_comm_tx_2_input/serial_2_comm_tx_2_input.ino +++ b/serial/serial_2_comm_tx_2_input/serial_2_comm_tx_2_input.ino @@ -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); diff --git a/serial/serial_comm_rx/serial_comm_rx.ino b/serial/serial_comm_rx/serial_comm_rx.ino index 56411e0..1dd67db 100644 --- a/serial/serial_comm_rx/serial_comm_rx.ino +++ b/serial/serial_comm_rx/serial_comm_rx.ino @@ -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 index 0000000..697a39d --- /dev/null +++ b/serial/serial_comm_rx_state/serial_comm_rx_state.ino @@ -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? + */ + + + diff --git a/serial/serial_comm_tx/serial_comm_tx.ino b/serial/serial_comm_tx/serial_comm_tx.ino index 1615fa2..e91df22 100644 --- a/serial/serial_comm_tx/serial_comm_tx.ino +++ b/serial/serial_comm_tx/serial_comm_tx.ino @@ -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 index 0000000..08d03e3 --- /dev/null +++ b/serial/serial_comm_tx_debounce/serial_comm_tx_debounce.ino @@ -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 +*/ + -- 2.39.2