Sono un grande appassionato di Arduino e di tutto il mondo dell'open source elettronico e da programmatore novello di Arduino vorrei realizzare un progetto dove i protagonisti sono n.2 Arduino 1 e farli interagire tra di loro nel senso che :
-Chiudo PIN x Arduino A ------- Accendo Led Pin x Arduino B
-Chiudo PIN y Arduino B ------- Accendo Led Pin y Arduino A
Ora mi chiedevo se tutto ciò era possibile con un semplice collegamento seriale RS232 e se in contemporanea riesco ad ascoltare e ricevere le informazione serial-read-write anche da un pc collegato in seriale usb.
( ...e poi anche se esiste un modo per indirizzare gli Arduino su una rete bus dati )
Grazie e spero di aver mosso i neuroni a qualcuno che come me da quando conosco questo giocattolino ho la mente col contagiri a palla....grazie e W Arduino...
per il dialogo fra i 2 arduini non dovrebbero esserci problemi, invece se vuoi anche una "copia" del traffico sul pc è un pò più complicato, cioè la seriale di un arduino dovrebbe parlare con una softwareserial dell'altro , poi dovresti copiarti i dati in arrivo e in uscita e spedirli anche alla seriale hardware che sarà impiegata nel dialogo con il pc.
Ma è una cosa fattibile (non ricordo però se newsoftwareserial gestisce il fullduplex) http://arduiniana.org/libraries/NewSoftSerial/
BrainBooster:
per il dialogo fra i 2 arduini non dovrebbero esserci problemi, invece se vuoi anche una "copia" del traffico sul pc è un pò più complicato, cioè la seriale di un arduino dovrebbe parlare con una softwareserial dell'altro ,
Se deve solo ascoltare il flusso dati non ci sono problemi, tutto quello che transita sulla seriale viene inviato anche alla seriale virtuale se è aperta.
L'FTDI o 8u2 che sia è collegato in parallelo tramite due resistenze da 1k a Tx e Rx, non puoi inviare nulla dalla seriale virtuale se c'è un utilizzatore esterno, ma puoi sempre visualizzare il traffico.
Se guardi lo schema di Arduino l'FTDI, o 8u2, è collegato su Tx e Rx dell'UART tramite due resistenze da 1k, se non è connesso nulla sulla seriale hardware la USB può dialogare con Arduino, se la seriale hardware è collegata ad un altro device seriale la USB può sempre vedere il traffico su Tx perché gli arriva tramite la resistenza da 1k al suo Rx, però non può mandare dati sul Rx di Arduino perché la resistenza da 1k non gli consente di "scavalcare" i livelli logici in arrivo dal device esterno.
Prova a fare un semplice esperimento, collega due Arduino tramite seriale incrociando Tx e Rx, invia dati dal primo verso il secondo tenendo aperto il serial monitor e vedrai tutto quello transita apparire su quest'ultimo, se provi ad inviare qualcosa dal serial monitor non succede nulla perché i dati non arriveranno mai alla UART.
Grazie delle vostre risposte ma forse ho frainteso qualcosa,difatti era mia intenzione collegare i due arduino fra di loro tramite i piedini "0" e "1" chiaramente invertendoli tra di loro con gnd comune e per questo che adesso non mi ritrovo forse...
Praticamente io vorrei fare questo e cerco di spiegarmi meglio:
Premesso che dovrei scrivere due sketch diversi per i due arduini....
-Chiudo pin x su Arduino A ----- serial.Write PINxH ------- su Arduino B --- if serial.Read PINxH ------ digitalWrite PINy High
-Apro pin x su Arduino A ----- serial.Write PINxL ------- su Arduino B --- if serial.Read PINxL ------ digitalWrite PINy Low
pietro78:
Praticamente io vorrei fare questo e cerco di spiegarmi meglio:
Dopo aver collegato i due Arduino tramite seriale non devi fare altro che inviare un byte, se ti bastano otto led e ogni volta che uno degli switch cambia stato, contenente lo stato di tutti gli switch, dalla parte opposta non fai altro che applicare il byte ricevuto ai vari pin, bit a bit, che comandano i led.
Dopo aver collegato i due Arduino tramite seriale non devi fare altro che inviare un byte
Per Astrobeed grazie per la delucidazione ma non saprei proprio da dove cominciare e cosa intendi per byte...potresti cortesemente citarmi qualche esempio o link dove qualcuno ha già realizzato qualcosa di simile che tu sappia...
La questione triste è che in rete non ho trovato nulla di simile oppure quello che ho trovato era semmai con delle soluzioni che usavano altri moduli ( zigbee,bluetooth,ir...) ma niente che fosse realizzato con interconnessioni filari tx-rx e poi farei tredici semmai ci fosse la possibilità di creare una rete rs485 con tanto di indirizzamento ad ogni modulo arduino...sarebbe l'estasi del mio pensiero...
Il mio problema è riuscire a scrivere lo sketch dell' Arduino A e dell'Arduino B,ovvero in mente ho un pensiero di come vorrei che funzionasse il progettino ma poi all'atto pratico non riesco a capire come far svolgere il colloquio delle informazioni tra i due terminali....
ARDUINO A ARDUINO B
if pin 5 Low ----- Serial print Pin51L if Serial.read Pin5L ---- digital.Write Pin8 Low
if pin 5 High ----- Serial print Pin5H if Serial.read Pin5H ---- digital.Write Pin8 High
Ora a mente mi viene da scrivere in questa maniera così farfugliata chiaramente senza rispettare le sintassi del linguaggio arduino....spero però di riuscire a dare unìidea di quello che ho in mente di fare ovvero l'Arduino A mette a disposizione 14 ingressi digitali e collegato con l'Arduino B avrei a disposizione 14 attuatori in uscita con le logiche macro da scrivere in maniera che magari l'and di tre ingressi sull'arduinoA mi fà muovere sull'ArduinoB un uscita< temporizzata per tre secondi bla bla...
Per favore aiutatemi con qualche sketch di prova ...grazie grazie grazie...
Questo è negli esempi dell'IDE 1.0.
Usa la SoftSerial.
/*
Software serial multple serial test
Receives from the two software serial ports,
sends to the hardware serial port.
In order to listen on a software port, you call port.listen().
When using two software serial ports, you have to switch ports
by listen()ing on each one in turn. Pick a logical time to switch
ports, like the end of an expected transmission, or when the
buffer is empty. This example switches ports when there is nothing
more to read from a port
The circuit:
Two devices which communicate serially are needed.
* First serial device's TX attached to digital pin 2, RX to pin 3
* Second serial device's TX attached to digital pin 4, RX to pin 5
created 18 Apr. 2011
by Tom Igoe
based on Mikal Hart's twoPortRXExample
This example code is in the public domain.
*/
#include <SoftwareSerial.h>
// software serial #1: TX = digital pin 2, RX = digital pin 3
SoftwareSerial portOne(2, 3);
// software serial #2: TX = digital pin 4, RX = digital pin 5
SoftwareSerial portTwo(4, 5);
void setup()
{
// Start the hardware serial port
Serial.begin(9600);
// Start each software serial port
portOne.begin(9600);
portTwo.begin(9600);
}
void loop()
{
// By default, the last intialized port is listening.
// when you want to listen on a port, explicitly select it:
portOne.listen();
Serial.println("Data from port one:");
// while there is data coming in, read it
// and send to the hardware serial port:
while (portOne.available() > 0) {
char inByte = portOne.read();
Serial.write(inByte);
}
// blank line to separate data from the two ports:
Serial.println();
// Now listen on the second port
portTwo.listen();
// while there is data coming in, read it
// and send to the hardware serial port:
Serial.println("Data from port two:");
while (portTwo.available() > 0) {
char inByte = portTwo.read();
Serial.write(inByte);
}
// blank line to separate data from the two ports:
Serial.println();
}
Ok per l'uso della libreria serial ...ma il mio problema è e rimane quello di utilizzare i pin di collegamento "0 e 1" tx-rx per connettere tra di loro due Arduino1 e potere così sfruttare tutti i pin rimanenti della scheda e soprattutto come formulare lo sketch per l'ArduinoA (solo ingressi) e per l'ArduinoB ( solo uscite) e ripeto far colloquiare le informazioni tra di loro con connessione :