From 412fa124a8e9482bb252ba40f2619f6c7880e221 Mon Sep 17 00:00:00 2001 From: Andrea Manni Date: Thu, 5 Mar 2015 14:31:30 +0100 Subject: [PATCH] Serial and eeprom --- .../eeprom_1_write_read.ino | 46 +++++++++++++++++++ .../eeprom_2_stringa_avr.ino | 35 ++++++++++++++ serial/comm_rx/comm_rx.ino | 32 +++++++++++++ serial/comm_tx/comm_tx.ino | 39 ++++++++++++++++ .../serial_2_comm_rx_2_led.ino | 46 +++++++++++++++++++ .../serial_2_comm_tx_2_input.ino | 44 ++++++++++++++++++ serial/serial_comm_rx/serial_comm_rx.ino | 34 ++++++++++++++ serial/serial_comm_tx/serial_comm_tx.ino | 40 ++++++++++++++++ 8 files changed, 316 insertions(+) create mode 100644 advanced_projects/eeprom_1_write_read/eeprom_1_write_read.ino create mode 100644 advanced_projects/eeprom_2_stringa_avr/eeprom_2_stringa_avr.ino create mode 100644 serial/comm_rx/comm_rx.ino create mode 100644 serial/comm_tx/comm_tx.ino create mode 100644 serial/serial_2_comm_rx_2_led/serial_2_comm_rx_2_led.ino create mode 100644 serial/serial_2_comm_tx_2_input/serial_2_comm_tx_2_input.ino create mode 100644 serial/serial_comm_rx/serial_comm_rx.ino create mode 100644 serial/serial_comm_tx/serial_comm_tx.ino diff --git a/advanced_projects/eeprom_1_write_read/eeprom_1_write_read.ino b/advanced_projects/eeprom_1_write_read/eeprom_1_write_read.ino new file mode 100644 index 0000000..55d051e --- /dev/null +++ b/advanced_projects/eeprom_1_write_read/eeprom_1_write_read.ino @@ -0,0 +1,46 @@ +/* + EEPROM + + Storaggio di un valore e sucessiva lettura. + */ + +#include + +// the current address in the EEPROM (i.e. which byte +// we're going to write to next) +int addr = 12; + +void setup() +{ + Serial.begin(9600); + Serial.println("Storaggio valore"); + // EEPROM.write(addr, 124); + // Eseguire una volta sola, caricare lo sketch + // e immediatamente commetare e ripetere l'upload. +} + +void loop() +{ + Serial.print("Lettura Valore: "); + Serial.println(EEPROM.read(12)); + Serial.flush(); + exit(0) ; + // need to divide by 4 because analog inputs range from + // 0 to 1023 and each byte of the EEPROM can only hold a + // value from 0 to 255. + int val = analogRead(0) / 4; + + // write the value to the appropriate byte of the EEPROM. + // these values will remain there when the board is + // turned off. + EEPROM.write(addr, val); + + // advance to the next address. there are 512 bytes in + // the EEPROM, so go back to 0 when we hit 512. + addr = addr + 1; + if (addr == 512) + addr = 0; + + delay(100); +} + diff --git a/advanced_projects/eeprom_2_stringa_avr/eeprom_2_stringa_avr.ino b/advanced_projects/eeprom_2_stringa_avr/eeprom_2_stringa_avr.ino new file mode 100644 index 0000000..e3cf875 --- /dev/null +++ b/advanced_projects/eeprom_2_stringa_avr/eeprom_2_stringa_avr.ino @@ -0,0 +1,35 @@ +/* + EEPROM + + Storaggio di un stringa di caratteri in EEPROM e sucessiva lettura + usando le libreire AVR: /usr/lib/avr/include/avr/eeprom.h + */ + +#include // + +// the current address in the EEPROM (i.e. which byte +// we're going to write to next) +int addr = 100; +char testo[23] ; +void setup() +{ + char message[] = "Testo messaggio"; + Serial.begin(9600); + Serial.println("Storaggio valore"); + + //eeprom_write_block(message, (void *)addr, strlen(message) + 1); + // Pointer all'array di carattere, punto in cui scrivere (su 1023), lunghezza + // Eseguire una volta sola, caricare lo sketch + // e immediatamente commetare e ripetere l'upload. +} + +void loop() +{ + Serial.print("Lettura Valore: "); + eeprom_read_block(&testo, (void *)addr,23); + Serial.println(testo); + Serial.flush(); + exit(0) ; +} + + diff --git a/serial/comm_rx/comm_rx.ino b/serial/comm_rx/comm_rx.ino new file mode 100644 index 0000000..59a7d79 --- /dev/null +++ b/serial/comm_rx/comm_rx.ino @@ -0,0 +1,32 @@ +/* + Analog 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 +int led = 13; // Questa scheda ha spolo l'output +int RX = 3 ; // Pin di ricezione + +void setup() { + // initialize the digital pin as an output. + pinMode(led, OUTPUT); // Il PIN e' attivato come output + pinMode(RX, INPUT); // Il PIN e' attivato come output +} + +// the loop routine runs over and over again forever: +void loop() { + if (digitalRead(RX) == 1) { // Verifica se il PIN input e' +5v + digitalWrite(led, HIGH); + delay(50); + } + else if (digitalRead(RX) == 0) { // Alterativa: se non e' +5v + digitalWrite(led, LOW); + delay(50); + } +} + diff --git a/serial/comm_tx/comm_tx.ino b/serial/comm_tx/comm_tx.ino new file mode 100644 index 0000000..2d0935c --- /dev/null +++ b/serial/comm_tx/comm_tx.ino @@ -0,0 +1,39 @@ +/* + Analog 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 +int led = 13; +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(TX, OUTPUT); // Il PIN e' attivato come output + pinMode(input, INPUT); // Il PIN e' attivato come output +} + +// 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(TX, HIGH); + delay(50); + } + else { // Alterativa: se non e' +5v + digitalWrite(led, LOW); + digitalWrite(TX, LOW); + delay(50); + } +} + + + + diff --git a/serial/serial_2_comm_rx_2_led/serial_2_comm_rx_2_led.ino b/serial/serial_2_comm_rx_2_led/serial_2_comm_rx_2_led.ino new file mode 100644 index 0000000..286e489 --- /dev/null +++ b/serial/serial_2_comm_rx_2_led/serial_2_comm_rx_2_led.ino @@ -0,0 +1,46 @@ +/* + Serial comm: RX due output + + Comunicazione seriale tra due schede arduino. + La prima scheda ha due botton1 come input e + comunica con un altra scheda che monta due LED come output. + Il led della seconda si accende quando rileva + la pressione del bottone della prima. + + La RX deve distinguere l'input ricevuto. + */ + +// Seconda scheda: output +// PIN 0 = RX +int led = 13; // Questa scheda ha spolo l'output +int red = 12; // Questa scheda ha spolo l'output +int incomingByte ; +// 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(red, 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) { + // read the incoming byte: + incomingByte = Serial.read(); + + if (incomingByte == 2) { // Verifica se il PIN input e' +5v + digitalWrite(led, HIGH); + delay(50); + digitalWrite(led, LOW); + } + else if (incomingByte == 3) { // Alterativa: se non e' +5v + digitalWrite(red, HIGH); + delay(50); + digitalWrite(red, LOW); + } + } +} + + + 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 new file mode 100644 index 0000000..aa43a76 --- /dev/null +++ b/serial/serial_2_comm_tx_2_input/serial_2_comm_tx_2_input.ino @@ -0,0 +1,44 @@ +/* + Serial comm: TX due bottoni + + Comunicazione seriale tra due schede arduino. + La prima scheda ha due bottoni come input e + comunica con un altra scheda che monta due LED come output. + Il led della seconda si accende quando rileva + la pressione del bottone della prima. + + La TX deve mandare due segnali diversi. + */ + +// Prima scheda: input +// PIN 1 = TX +int led = 13; +int input = 2; // Questa e' la scheda con un input +int inputRed = 3; // Questa e' la scheda con un input + +// 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); // 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 + digitalWrite(led, HIGH); + Serial.write(2); + delay(50); + } + if (digitalRead(inputRed) == HIGH) { // Verifica se il PIN input e' +5v + digitalWrite(led, HIGH); + Serial.write(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 new file mode 100644 index 0000000..56411e0 --- /dev/null +++ b/serial/serial_comm_rx/serial_comm_rx.ino @@ -0,0 +1,34 @@ +/* + 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); + } +} + diff --git a/serial/serial_comm_tx/serial_comm_tx.ino b/serial/serial_comm_tx/serial_comm_tx.ino new file mode 100644 index 0000000..1615fa2 --- /dev/null +++ b/serial/serial_comm_tx/serial_comm_tx.ino @@ -0,0 +1,40 @@ +/* + 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 + +// 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); // 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 + digitalWrite(led, HIGH); + Serial.write(1); + delay(50); + } + else { // Alterativa: se non e' +5v + digitalWrite(led, LOW); + Serial.write(0); + delay(50); + } +} + + + -- 2.39.2