Pages: [1]   Go Down
Author Topic: Interconnessione tra due arduino 1 in RS232  (Read 1315 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 2
Posts: 105
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Torino
Offline Offline
Full Member
***
Karma: 0
Posts: 133
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

..certo che puoi, usi un integrato apposito e così liberi i PIN0 e PIN1 :

http://www.arduino.cc/en/Tutorial/ArduinoSoftwareRS232
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Tesla Member
***
Karma: 129
Posts: 9492
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@astro non ho capito  smiley-red
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9492
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@astro non ho capito  smiley-red

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 Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

aaaaaaaah ecco, adesso ho capito, ma era per quello che consigliavo di usare una newsoftwareserial per essere più libero.
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 105
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Tesla Member
***
Karma: 129
Posts: 9492
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Full Member
***
Karma: 2
Posts: 105
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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 Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se ti piace rs485 e ti trovi comodo nel maneggiare quel protocollo perchè lo conosci meglio ecc... perchè non ti compri uno di questi?
http://www.ebay.it/itm/UNO-V5-IO-Expansion-Xbee-Bluetooth-Shield-Arduino-Compatible-/280842860916?pt=LH_DefaultDomain_0&hash=item416389f974
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 105
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7122
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Questo è negli esempi dell'IDE 1.0.
Usa la SoftSerial.
Code:
/*
  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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Full Member
***
Karma: 2
Posts: 105
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7122
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

GND -------- GND
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: [1]   Go Up
Jump to: