From ed1b9da5056321699fb9b693142df42befccca43 Mon Sep 17 00:00:00 2001 From: Andrea Manni Date: Mon, 8 Jun 2015 17:48:54 +0200 Subject: [PATCH] serial + i2c --- .../debug_1_preprocessor_simple.ino | 0 .../debug_2_preprocessor_advanced.ino | 0 .../analog_rx_1.ino} | 2 + .../analog_tx_1.ino} | 2 + serial/i2c/master_2_led/master_2_led.ino | 74 ++++++++++++++++ .../master_3_feedback/master_3_feedback.ino | 81 ++++++++++++++++++ .../i2c/master_writer_1/master_writer_1.ino | 37 ++++++++ serial/i2c/slave_2_state/slave_2_state.ino | 70 ++++++++++++++++ .../i2c/slave_3_feedback/slave_3_feedback.ino | 81 ++++++++++++++++++ .../i2c/slave_receiver_1/slave_receiver_1.ino | 45 ++++++++++ serial/serial_2_rx/serial_2_rx.ino | 84 +++++++++++++++++++ .../serial_2_tx.ino} | 49 +++++++++-- .../serial_3_rx_state.ino} | 47 +++++++---- .../serial_3_tx_debounce.ino} | 47 +++++++---- .../serial_4_rx_2_led.ino} | 0 .../serial_4_tx_2_input.ino} | 0 serial/serial_comm_rx/serial_comm_rx.ino | 42 ---------- 17 files changed, 584 insertions(+), 77 deletions(-) rename {serial => basic/serial_debug}/debug_1_preprocessor_simple/debug_1_preprocessor_simple.ino (100%) rename {serial => basic/serial_debug}/debug_2_preprocessor_advanced/debug_2_preprocessor_advanced.ino (100%) rename serial/{comm_rx/comm_rx.ino => analog_rx_1/analog_rx_1.ino} (94%) rename serial/{comm_tx/comm_tx.ino => analog_tx_1/analog_tx_1.ino} (94%) create mode 100644 serial/i2c/master_2_led/master_2_led.ino create mode 100644 serial/i2c/master_3_feedback/master_3_feedback.ino create mode 100644 serial/i2c/master_writer_1/master_writer_1.ino create mode 100644 serial/i2c/slave_2_state/slave_2_state.ino create mode 100644 serial/i2c/slave_3_feedback/slave_3_feedback.ino create mode 100644 serial/i2c/slave_receiver_1/slave_receiver_1.ino create mode 100644 serial/serial_2_rx/serial_2_rx.ino rename serial/{serial_comm_tx/serial_comm_tx.ino => serial_2_tx/serial_2_tx.ino} (51%) rename serial/{serial_comm_rx_state/serial_comm_rx_state.ino => serial_3_rx_state/serial_3_rx_state.ino} (60%) rename serial/{serial_comm_tx_debounce/serial_comm_tx_debounce.ino => serial_3_tx_debounce/serial_3_tx_debounce.ino} (67%) rename serial/{serial_2_comm_rx_2_led/serial_2_comm_rx_2_led.ino => serial_4_rx_2_led/serial_4_rx_2_led.ino} (100%) rename serial/{serial_2_comm_tx_2_input/serial_2_comm_tx_2_input.ino => serial_4_tx_2_input/serial_4_tx_2_input.ino} (100%) delete mode 100644 serial/serial_comm_rx/serial_comm_rx.ino diff --git a/serial/debug_1_preprocessor_simple/debug_1_preprocessor_simple.ino b/basic/serial_debug/debug_1_preprocessor_simple/debug_1_preprocessor_simple.ino similarity index 100% rename from serial/debug_1_preprocessor_simple/debug_1_preprocessor_simple.ino rename to basic/serial_debug/debug_1_preprocessor_simple/debug_1_preprocessor_simple.ino diff --git a/serial/debug_2_preprocessor_advanced/debug_2_preprocessor_advanced.ino b/basic/serial_debug/debug_2_preprocessor_advanced/debug_2_preprocessor_advanced.ino similarity index 100% rename from serial/debug_2_preprocessor_advanced/debug_2_preprocessor_advanced.ino rename to basic/serial_debug/debug_2_preprocessor_advanced/debug_2_preprocessor_advanced.ino diff --git a/serial/comm_rx/comm_rx.ino b/serial/analog_rx_1/analog_rx_1.ino similarity index 94% rename from serial/comm_rx/comm_rx.ino rename to serial/analog_rx_1/analog_rx_1.ino index eea5540..bc3de98 100644 --- a/serial/comm_rx/comm_rx.ino +++ b/serial/analog_rx_1/analog_rx_1.ino @@ -6,6 +6,8 @@ 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. + + Schema: http://lab.piffa.net/schemi/analog_io_bb.png */ // Seconda scheda: output diff --git a/serial/comm_tx/comm_tx.ino b/serial/analog_tx_1/analog_tx_1.ino similarity index 94% rename from serial/comm_tx/comm_tx.ino rename to serial/analog_tx_1/analog_tx_1.ino index 2afb4e7..9cb5498 100644 --- a/serial/comm_tx/comm_tx.ino +++ b/serial/analog_tx_1/analog_tx_1.ino @@ -6,6 +6,8 @@ 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. + + Schema: http://lab.piffa.net/schemi/analog_io_bb.png */ // Prima scheda: input diff --git a/serial/i2c/master_2_led/master_2_led.ino b/serial/i2c/master_2_led/master_2_led.ino new file mode 100644 index 0000000..f2ecdf8 --- /dev/null +++ b/serial/i2c/master_2_led/master_2_led.ino @@ -0,0 +1,74 @@ +/* + I2C comm: Master + + Comunicazione I2C tra due schede Arduino. + La scheda master ha un bottone come input e + comunica con altre schede che monta un LED come output. + Il led della seconda si accende quando rileva + la pressione del bottone della prima. + + Questo script implementa il debounce con Millis(), + */ + +#include + +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 per debug + Wire.begin(); // join i2c bus (address optional for master) +} + + +void loop() { + statoAttuale = digitalRead(input); // Legge lo stato del bottone + + if (statoAttuale == LOW && statoAttuale != ultimoStato && millis() - ultimoCambio > debounceDelay ) { + // Trasmissione I2C + Wire.beginTransmission(2); // Invia il messaggio al device slave con id 2 + Wire.write("1"); + Wire.endTransmission(); // stop transmitting + + // Gestone stato + ultimoCambio = millis() ; // Registra il tempo attuale + } + ultimoStato = statoAttuale; // save the new state in our variable +} + +/* Domande + + 1. Implementare piu' bottoni per controllare piu' schede + 2. Implementare un messaggio di feedback dallo slave al master per uk cambio di stato del led + + Links: + + + + + + + + + + + Risposte in fondo: + 1. Vedere i links proposti: .write scrive un byte mentre + .print manda un codice ASCII + 2. 49 + 3. No, dato solo il cavo dalla TX alla RX . + Provare a fare un script con comunicazione bilaterale + 4. No perche' non ci sarebbe sincronia tra i segnali, + vedere gli esercizi su I2C + */ + + diff --git a/serial/i2c/master_3_feedback/master_3_feedback.ino b/serial/i2c/master_3_feedback/master_3_feedback.ino new file mode 100644 index 0000000..877ffd4 --- /dev/null +++ b/serial/i2c/master_3_feedback/master_3_feedback.ino @@ -0,0 +1,81 @@ +/* + I2C comm: Master + + Comunicazione I2C tra due schede Arduino. + La scheda master ha un bottone come input e + comunica con altre schede che monta un LED come output. + Il led della seconda si accende quando rileva + la pressione del bottone della prima. + + Questo script implementa il debounce con Millis() + + Schema: http://lab.piffa.net/schemi/i2c_bb.jpg + */ + +#include + +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 per debug + Serial.flush(); + Serial.println("Master Debug:"); + + // Serial.begin(9600); // Attiviamo la seriale per debug + Wire.begin(); // join i2c bus (address optional for master) +} + + +void loop() { + statoAttuale = digitalRead(input); // Legge lo stato del bottone + + if (statoAttuale == LOW && statoAttuale != ultimoStato && millis() - ultimoCambio > debounceDelay ) { + // Trasmissione I2C + Wire.beginTransmission(2); // Invia il messaggio al device slave con id 2 + Wire.write("1"); + Wire.endTransmission(); // stop transmitting + + // Gestone stato + ultimoCambio = millis() ; // Registra il tempo attuale + + + // Request per lo stato del LED + delay(100); + Wire.requestFrom(2,1); + while(Wire.available()) // slave may send less than requested + { + char statoRemoto = Wire.read(); // receive a byte as character + Serial.print("Stato del LED sul device 2: "); + Serial.println(statoRemoto,DEC); // print the character + } + } + ultimoStato = statoAttuale; // save the new state in our variable + + + +} + +/* Domande + + 1. Implementare piu' bottoni per controllare piu' schede + 2. Isolare (per quanto possibile) la gestione di un BOTTONE-LED in una funzione + (es multitasking/BlinkWithoutDelay_3_funzione ) + 3. Costruire una classi (programmazione ad oggetti) per l'oggetto BOTTONE-LED + (es: multitasking/BlinkWithoutDelay_6_class/ ) + + */ + + + + + diff --git a/serial/i2c/master_writer_1/master_writer_1.ino b/serial/i2c/master_writer_1/master_writer_1.ino new file mode 100644 index 0000000..4692b52 --- /dev/null +++ b/serial/i2c/master_writer_1/master_writer_1.ino @@ -0,0 +1,37 @@ +/* Wire Master Writer + +Invio dati via I2C + + Schema: http://lab.piffa.net/schemi/i2c_bb.jpg + This example code is in the public domain. + +*/ + + +#include + +void setup() +{ + Wire.begin(); // join i2c bus (address optional for master) +} + +byte x = 0; + +void loop() +{ + // Wire.beginTransmission(4); // transmit to device #4 + // Wire.write("DAto inviato dal master"); // sends five bytes + // + // Wire.endTransmission(); // stop transmitting + // + // + // delay(500); + Wire.beginTransmission(4); // transmit to device #4 + Wire.write("Tora Tora!"); // sends five bytes + // sends one byte + Wire.endTransmission(); // stop transmitting + + + delay(500); +} + diff --git a/serial/i2c/slave_2_state/slave_2_state.ino b/serial/i2c/slave_2_state/slave_2_state.ino new file mode 100644 index 0000000..53a3ed9 --- /dev/null +++ b/serial/i2c/slave_2_state/slave_2_state.ino @@ -0,0 +1,70 @@ +/* + I2C comm: Slave LED + + Comunicazione I2C tra due schede Arduino. + La scheda master ha un bottone come input e + comunica con altre schede che monta un LED come output. + Il led della seconda si accende quando rileva + la pressione del bottone della prima. + + Schema: http://lab.piffa.net/schemi/i2c_bb.jpg + */ + +#include +// slave +// 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 per debug + Serial.flush(); + Serial.println("Slave / RX Debug:"); + + Wire.begin(2); // join i2c bus (address optional for master) + Wire.onReceive(receiveEvent); // Evento in ricezione +} + + +void loop() { + digitalWrite(led, ledState); // Aggiorna lo stato del LED + delay(200); +} + +/// Funzioni +void receiveEvent(int howMany) +{ + Serial.print("Lo slave ha ricevuto il seguente messaggio: "); + while( Wire.available()) // loop through all but the last + { + incomingByte = Wire.read(); // receive byte as a character + Serial.print(incomingByte, DEC); // print the character + + if (incomingByte == 49) { // Verifica se viene ricevuto il dato 1 + ledState = !ledState ; // Cambia lo stato del LED + } + Serial.println(""); + } +} + +/* Domande + + 1. Implementare piu' bottoni per controllare piu' schede + 2. Implementare un messaggio di feedback dallo slave al master per uk cambio di stato del led + + Links: + + */ + + + + + + + diff --git a/serial/i2c/slave_3_feedback/slave_3_feedback.ino b/serial/i2c/slave_3_feedback/slave_3_feedback.ino new file mode 100644 index 0000000..6d01e58 --- /dev/null +++ b/serial/i2c/slave_3_feedback/slave_3_feedback.ino @@ -0,0 +1,81 @@ +/* + I2C comm: Slave LED + + Comunicazione I2C tra due schede Arduino. + La scheda master ha un bottone come input e + comunica con altre schede che monta un LED come output. + Il led della seconda si accende quando rileva + la pressione del bottone della prima. + + Schema: http://lab.piffa.net/schemi/i2c_bb.jpg + */ + +#include +// slave +// 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 per debug + Serial.flush(); + Serial.println("Slave / RX Debug:"); + + Wire.begin(2); // join i2c bus (address optional for master) + Wire.onReceive(receiveEvent); // Evento in ricezione dati + Wire.onRequest(requestCallback); // Evento su richiesta +} + + +void loop() { + digitalWrite(led, ledState); // Aggiorna lo stato del LED + delay(200); +} + +/// Funzioni +void receiveEvent(int howMany) +{ + Serial.print("Lo slave ha ricevuto il seguente messaggio: "); + while( Wire.available()) // loop through all but the last + { + incomingByte = Wire.read(); // receive byte as a character + Serial.print(incomingByte, DEC); // print the character + + if (incomingByte == 49) { // Verifica se viene ricevuto il dato 1 + ledState = !ledState ; // Cambia lo stato del LED + } + Serial.println(""); + } +} + +void requestCallback() +{ + // Rimanda lo stato del LED + Serial.println("Comunicato lo stato del LED a MASTER"); // Debug + + Wire.write(ledState); +} + +/* Domande + + 1. Implementare piu' bottoni per controllare piu' schede + 2. Isolare (per quanto possibile) la gestione di un BOTTONE-LED in una funzione + (es multitasking/BlinkWithoutDelay_3_funzione ) + 3. Costruire una classi (programmazione ad oggetti) per l'oggetto BOTTONE-LED + (es: multitasking/BlinkWithoutDelay_6_class/ ) + + */ + + + + + + + + diff --git a/serial/i2c/slave_receiver_1/slave_receiver_1.ino b/serial/i2c/slave_receiver_1/slave_receiver_1.ino new file mode 100644 index 0000000..34040d6 --- /dev/null +++ b/serial/i2c/slave_receiver_1/slave_receiver_1.ino @@ -0,0 +1,45 @@ +/* Wire Slave Receiver + +Ricezine di una stringa di testo via I2C + + This example code is in the public domain. + + Schema: http://lab.piffa.net/schemi/i2c_bb.jpg +*/ + +char input ; + +#include + +void setup() +{ + Wire.begin(4); // join i2c bus with address #4 + Wire.onReceive(receiveEvent); // register event + + // Debug seriale + Serial.begin(9600); // start serial for output + Serial.println("Slave / RX Debug:"); + Serial.flush(); +} + +void loop() +{ + + delay(100); +// Nel Loop non succede niente, tutta l'azione e nella funzione receiveEvent() +// Innescata dall'evento Wire.onReceive +} + +// function that executes whenever data is received from master +// this function is registered as an event, see setup() +void receiveEvent(int howMany) +{ + Serial.print("Lo slave ha ricevuto il seguente messaggio: "); + while( Wire.available()) // loop through all but the last + { + input = Wire.read(); // receive byte as a character + Serial.print(input); // print the character + } // print the integer + Serial.println(""); +} + diff --git a/serial/serial_2_rx/serial_2_rx.ino b/serial/serial_2_rx/serial_2_rx.ino new file mode 100644 index 0000000..4f9feec --- /dev/null +++ b/serial/serial_2_rx/serial_2_rx.ino @@ -0,0 +1,84 @@ +/* + 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. + + Scema: http://lab.piffa.net/schemi/serial_common_bb.png + http://lab.piffa.net/schemi/serial_common_schem.png + */ + +// Seconda scheda: output +// PIN 0 = RX +int led = 13; // Questa scheda ha spolo l'output + +// 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.read() == 1) { // Verifica se il PIN input e' +5v + digitalWrite(led, HIGH); + delay(50); + } + else if (Serial.read() == 0) { // Alterativa: se non e' +5v + digitalWrite(led, LOW); + delay(50); + } +} + +/* 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). + +1. Quanti tipi di dati permette di trasmettere la seriale? +2 Comandare un LED RGB via PWM via seriale (da una Arduino o da un PC). +2.1 Come si comportano le latenze? +2.2 C'e' perdita di segnale? +3. 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? + +Risposte in fondo: + + + + + + + + + + + + + + + + + +1. Qualunque tipo di dati, anche lunghi flussi di dati +2. Si dovra' trasmettere un segnale da 0-255 e sulla ricevente + interpretarlo con http://www.arduino.cc/en/Reference/ParseInt +2.1 Tra buffer di trasmissione, timeout e conversione dei valori + ci sara' una latenza nel trasferimento dei dati, + a differenza di una connessione analigica che e' instantanea + ma soggetta a degradazione del segnale. +2.2 Non c'e' degradazione o perdita del segnale essendo una +trasmissione di dati digitale (fin tanto che non si deteriora +la connessione). +3. Vedere lo sketch sucessivo, basandosi su gli sketch della + state machine per il bottne: basic/buttons/button_state_4_state_and_condition/ + +*/ diff --git a/serial/serial_comm_tx/serial_comm_tx.ino b/serial/serial_2_tx/serial_2_tx.ino similarity index 51% rename from serial/serial_comm_tx/serial_comm_tx.ino rename to serial/serial_2_tx/serial_2_tx.ino index e91df22..08a59c0 100644 --- a/serial/serial_comm_tx/serial_comm_tx.ino +++ b/serial/serial_2_tx/serial_2_tx.ino @@ -6,6 +6,9 @@ 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. + + Scema: http://lab.piffa.net/schemi/serial_common_bb.png + http://lab.piffa.net/schemi/serial_common_schem.png */ // Prima scheda: input @@ -41,12 +44,46 @@ 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 +1. Quanti tipi di dati permette di trasmettere la seriale? +2 Comandare un LED RGB via PWM via seriale (da una Arduino o da un PC). +2.1 Come si comportano le latenze? +2.2 C'e' perdita di segnale? +3. 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? + +Risposte in fondo: + + + + + + + + + + + + + + + + + +1. Qualunque tipo di dati, anche lunghi flussi di dati +2. Si dovra' trasmettere un segnale da 0-255 e sulla ricevente + interpretarlo con http://www.arduino.cc/en/Reference/ParseInt +2.1 Tra buffer di trasmissione, timeout e conversione dei valori + ci sara' una latenza nel trasferimento dei dati, + a differenza di una connessione analigica che e' instantanea + ma soggetta a degradazione del segnale. +2.2 Non c'e' degradazione o perdita del segnale essendo una +trasmissione di dati digitale (fin tanto che non si deteriora +la connessione). +3. Vedere lo sketch sucessivo, basandosi su gli sketch della + state machine per il bottne: basic/buttons/button_state_4_state_and_condition/ + +*// diff --git a/serial/serial_comm_rx_state/serial_comm_rx_state.ino b/serial/serial_3_rx_state/serial_3_rx_state.ino similarity index 60% rename from serial/serial_comm_rx_state/serial_comm_rx_state.ino rename to serial/serial_3_rx_state/serial_3_rx_state.ino index 697a39d..6422c40 100644 --- a/serial/serial_comm_rx_state/serial_comm_rx_state.ino +++ b/serial/serial_3_rx_state/serial_3_rx_state.ino @@ -6,8 +6,12 @@ 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. + + Scema: http://lab.piffa.net/schemi/serial_common_bb.png + http://lab.piffa.net/schemi/serial_common_schem.png */ + // Seconda scheda: output // PIN 0 = RX int led = 13; // Questa scheda ha spolo l'output @@ -39,20 +43,35 @@ incomingByte = Serial.read(); } /* 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? - */ + +1. Che differenza c'e' tra Serial.write() e Serial.print()? +2. Qual'e' il codice ASCII per indicare il numero decimale 1? +3. Servono entrambi i cavi per la connessione? +4. Potrei attaccare una terza arduino? + +Links: +- http://www.arduino.cc/en/Serial/Print +- http://www.arduino.cc/en/Tutorial/ASCIITable + + + + + + + + + + +Risposte in fondo: +1. Vedere i links proposti: .write scrive un byte mentre + .print manda un codice ASCII +2. 49 +3. No, dato solo il cavo dalla TX alla RX . + Provare a fare un script con comunicazione bilaterale +4. No perche' non ci sarebbe sincronia tra i segnali, + vedere gli esercizi su I2C +*/ + diff --git a/serial/serial_comm_tx_debounce/serial_comm_tx_debounce.ino b/serial/serial_3_tx_debounce/serial_3_tx_debounce.ino similarity index 67% rename from serial/serial_comm_tx_debounce/serial_comm_tx_debounce.ino rename to serial/serial_3_tx_debounce/serial_3_tx_debounce.ino index 08d03e3..d6f431d 100644 --- a/serial/serial_comm_tx_debounce/serial_comm_tx_debounce.ino +++ b/serial/serial_3_tx_debounce/serial_3_tx_debounce.ino @@ -6,6 +6,11 @@ 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. + + Questo script implementa il debounce con Millis(), + + Scema: http://lab.piffa.net/schemi/serial_common_bb.png + http://lab.piffa.net/schemi/serial_common_schem.png */ // Prima scheda: input @@ -43,20 +48,32 @@ 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. -- Dove dovremo implementare il DEBOUNCE? -- Dove implementare la gestione dello STATO? - -HINT: Vedere lo script basc/buttons/debounce-2_and_contratto + +1. Che differenza c'e' tra Serial.write() e Serial.print()? +2. Qual'e' il codice ASCII per indicare il numero decimale 1? +3. Servono entrambi i cavi per la connessione? +4. Potrei attaccare una terza arduino? + +Links: +- http://www.arduino.cc/en/Serial/Print +- http://www.arduino.cc/en/Tutorial/ASCIITable + + + + + + + + + + +Risposte in fondo: +1. Vedere i links proposti: .write scrive un byte mentre + .print manda un codice ASCII +2. 49 +3. No, dato solo il cavo dalla TX alla RX . + Provare a fare un script con comunicazione bilaterale +4. No perche' non ci sarebbe sincronia tra i segnali, + vedere gli esercizi su I2C */ diff --git a/serial/serial_2_comm_rx_2_led/serial_2_comm_rx_2_led.ino b/serial/serial_4_rx_2_led/serial_4_rx_2_led.ino similarity index 100% rename from serial/serial_2_comm_rx_2_led/serial_2_comm_rx_2_led.ino rename to serial/serial_4_rx_2_led/serial_4_rx_2_led.ino diff --git a/serial/serial_2_comm_tx_2_input/serial_2_comm_tx_2_input.ino b/serial/serial_4_tx_2_input/serial_4_tx_2_input.ino similarity index 100% rename from serial/serial_2_comm_tx_2_input/serial_2_comm_tx_2_input.ino rename to serial/serial_4_tx_2_input/serial_4_tx_2_input.ino diff --git a/serial/serial_comm_rx/serial_comm_rx.ino b/serial/serial_comm_rx/serial_comm_rx.ino deleted file mode 100644 index 1dd67db..0000000 --- a/serial/serial_comm_rx/serial_comm_rx.ino +++ /dev/null @@ -1,42 +0,0 @@ -/* - 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 - -// 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.read() == 1) { // Verifica se il PIN input e' +5v - digitalWrite(led, HIGH); - delay(50); - } - else if (Serial.read() == 0) { // Alterativa: se non e' +5v - digitalWrite(led, LOW); - delay(50); - } -} - -/* 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). -*/ -- 2.39.2