Offline
Jr. Member
Karma: 2
Posts: 92
|
 |
« on: March 13, 2012, 01:42:26 am » |
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...
|
|
|
|
|
Logged
|
|
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #2 on: March 13, 2012, 02:32:30 am » |
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/
|
|
|
|
« Last Edit: March 13, 2012, 02:34:46 am by BrainBooster »
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7359
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #3 on: March 13, 2012, 02:37:28 am » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #4 on: March 13, 2012, 02:41:02 am » |
@astro non ho capito 
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7359
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #5 on: March 13, 2012, 03:25:55 am » |
@astro non ho capito  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.
|
|
|
|
|
Logged
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #6 on: March 13, 2012, 03:57:45 am » |
aaaaaaaah ecco, adesso ho capito, ma era per quello che consigliavo di usare una newsoftwareserial per essere più libero.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 2
Posts: 92
|
 |
« Reply #7 on: March 13, 2012, 04:35:05 am » |
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
Chiedo troppo o forse manco in qualche passaggio?
Grazie intanto delle vostre risposte...
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7359
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #8 on: March 13, 2012, 04:44:53 am » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 2
Posts: 92
|
 |
« Reply #9 on: March 13, 2012, 06:13:22 am » |
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... Ciao arduinomani...
|
|
|
|
|
Logged
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #10 on: March 13, 2012, 06:19:51 am » |
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 2
Posts: 92
|
 |
« Reply #11 on: March 14, 2012, 01:35:05 am » |
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...
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3015
|
 |
« Reply #12 on: March 14, 2012, 04:38:45 am » |
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(); }
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 2
Posts: 92
|
 |
« Reply #13 on: March 15, 2012, 01:52:55 am » |
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 :
ARDUINO A ARDUINO B TX PIN1 -------------------- RX PIN0 RX PIN0 ---------------------TX PIN1
Forse lo faccio più difficile di quello che sembra ma in rete non si trova nulla...grazie ...
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3015
|
 |
« Reply #14 on: March 15, 2012, 08:59:14 am » |
GND -------- GND
|
|
|
|
|
Logged
|
|
|
|
|
|