Ragazzi ho un problema.
Devo far comunicare insieme una WheaterShield ( temperatura, pressione , umidita ) contemporaneamente con l'xbee.
Praticamente ho l'arduino con sopra la WheterShield e sopra ci metto l'xbee.
solo che ovviamente quando collego a Rx\Tx l'xbee mi sballa i valori provenienti dalla WheterShield perchè con molta probabilità usano tutti e 2 la Rx\Tx.
Link della wheatershield: WeatherShield Pressure, Temperature, Humidity : EtherMania, The store for network enthusiasts
Ideas? =S=S Helpppp pls ![]()
ita4fun:
solo che ovviamente quando collego a Rx\Tx l'xbee mi sballa i valori provenienti dalla WheterShield perchè con molta probabilità usano tutti e 2 la Rx\Tx.
Esatto, tutti e due usano la UART hardware del micro, pin 0 e 1, e ovviamente due TX non possono stare in parallelo tra loro.
La soluzione è collegare uno dei due dispositivi a due pin alternativi tramite una seriale emulata a software, meglio se colleghi a questa il canale di comunicazione più lento.
Grazie x l'aiutoooo
![]()
Dimenticavo, se i due dispositivi non devono comunicare in contemporanea ed hai un modo per capire se i dati in ingresso arrivano dalla shield o dall'Xbee c'è una soluzione alternativa che ti permette di usare l'UART hardware per tutti e due.
Collega i due Rx, shield e Xbee, in parallelo e vanno sul Tx di Arduino, ai Tx, shield e Xbee, metti in serie un diodo schottky per piccoli segnali, p.e. un comunissimo BAT48, contropolarizzato, cioè catodo verso il Tx, collega in parallelo i due anodi dei diodi, metti una resistenza di pull up da 10k e porta il tutto al Rx di Arduino.
Applicando il metodo sopra descritto l'Rx di Arduino normalmente si trova a 1 logico per effetto della pull up, i due Tx sono tra loro isolati dai diodi, in condizione di Idle si trovano a 1 logico e dato che i diodi sono contropolarizzati risultano interdetti.
Quando uno dei due Tx va a 0 logico il relativo diodo entra in conduzione portando l'Rx di Arduino a 0 logico, se tutti e due i Tx vanno a 0 logico assieme non c'è nessun problema a livello elettrico, però si perdono i dati in transito.
Questa soluzione è utile se devi gestire i due canali seriali ad elevate velocità, sopratutto se Arduino deve fare molte altre cose, l'emulazione software della seriale è abbastanza gravosa e può creare non pochi problemi se la velocità di comunicazione è elevata.
infatti avevo letto ma i miei devono viaggiare in contemporanea =S
ora xo ho un dubbio... posso emulare qualsiasi piedino sia analogico che digitale?
e mi potresti passare il link x scaricare la libreria software serial?
Dipende dalla libreria che usi, quella di serie mi pare sia limitata ai soli pin digitali mentre la NewSoftSerial (arduiniana.org) dovrebbe permettere di usare qualunque pin di Arduino.
ho preso quella su arduiniana ![]()
altro problemino...
ho preso la libreria e l'ho implementata cosi sul mio codice...
#include <NewSoftSerial.h>
#dfine rxpin 2
#define txpin3
SoftwareSerial mySerial = SoftwareSerial(rxpin, txpin);
void setup()
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
mySerial.begin(9600);
}
ma quando vado ad usare l'istanza mySerial sotto sul codice per esempio con mySerial.println("...");
non va e mi da errore:
call of overloaded 'print(float&)' is ambiguous
=(
note l'errore call of overloaded 'print(float&)' is ambiguous crede che tu fli abbia passato un float, perciò forzalo a essere stringa, per esempio printf(String("..."));