Senago - Milano
Offline
God Member
Karma: 3
Posts: 507
Arduino rocks
|
 |
« on: April 18, 2010, 02:42:25 pm » |
ciao a tutti questo è il mio primo post sul forum. Sto iniziando un progetto nel quale mi devo interfacciare via seriale ad un altro componente, ma ho già dei problemi solo con l'invio dei comandi... ho scritto il seguente codice: int incomingByte = 0; // for incoming serial data int ledPin = 13; byte select[] = {0x02,0x00,0x04,0x04,0x00,0x00,0x02};
void setup() { Serial.begin(9600); // opens serial port, sets data rate to 9600 bps pinMode(ledPin, OUTPUT); }
void loop() {
Serial.write(select,7); if (Serial.available() > 0) { incomingByte = Serial.read(); digitalWrite(ledPin, HIGH); } delay(500); digitalWrite(ledPin, LOW); delay(500); }
che dovrebbe mandare un select e accendermi un led se ricevo una risposta. Non vedendo la comunicazione funzionare mi sono messo a guardare nel serial monitor cosa mandavo.. e non è quello che mi aspetto! il mio messaggio inizia con 0x02 cioè un STX, invece nel serial monitor vedo tutt'altro (credo fosse un 0xBF), non riesco a capirne la ragione. Volevo capire se crea conflitto avere il cavo usb collegato e avere le uscite tx e rx collegate ad un'altra seriale. Infine non capisco come mai mi trasmette sulla seriale solo con il cavo usb collegato e non quando alimento con la batteria, è perché al serial.begin non sente nessuna periferica collegata alla seriale? grazie.
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 160
Posts: 15641
+39 349 2158303
|
 |
« Reply #1 on: April 18, 2010, 04:24:23 pm » |
ciao lollotek Suppongo che hai un Arduino 2009. Il problema é che hai attacato 2 cose sulla seriale (TX e RX); quei 2 pin vengono usati anche dal interfaccia USB-RS232 presente sulla scheda. Il codice funziona, anche se non ho capito cosa vuoi spedire col comando Serial.write(select,7); Vedo che a ogni loop aspetti 1 secondo; l' hai voluto cosí? Usa la libreria http://arduino.cc/en/Reference/SoftwareSerial per collegare il Tuo "altro componente". L' ultima domanda non so rispondere. Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Senago - Milano
Offline
God Member
Karma: 3
Posts: 507
Arduino rocks
|
 |
« Reply #2 on: April 18, 2010, 04:53:02 pm » |
Si, l'attesa di un secondo l'ho messa volutamente per non mitragriare troppo velocemente sulla seriale e riuscire a vedere il led di "debug". nella parte: byte select[] = {0x02,0x00,0x04,0x04,0x00,0x00,0x02}; Serial.write(select,7);
Voglio inviare la serie di byte, non è corretto? Ho visto ora la libreria seriale, proverò con quella. grazie mille.
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 160
Posts: 15641
+39 349 2158303
|
 |
« Reply #3 on: April 18, 2010, 07:02:40 pm » |
Ciao lollotek Quel code dovrebbe essere giusto. mi ripeto: Il problema é che hai attacato 2 cose sulla seriale (TX e RX); quei 2 pin vengono usati anche dal interfaccia USB-RS232 presente sulla scheda. Usa la libreria http://arduino.cc/en/Reference/SoftwareSerial per collegare il Tuo "altro componente". Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Senago - Milano
Offline
God Member
Karma: 3
Posts: 507
Arduino rocks
|
 |
« Reply #4 on: April 19, 2010, 02:05:50 am » |
ok, grazie mille, stasera ci provo... altro componente è così terribile quello che ho detto? comunque è un modulo rfid mifare, come potrei definirlo?
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 160
Posts: 15641
+39 349 2158303
|
 |
« Reply #5 on: April 19, 2010, 03:17:50 am » |
ciao lollotek Non é terribile , ti ho solo citato e per questo messo fra virgolette.  Ciao e buona fortuna. Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Senago - Milano
Offline
God Member
Karma: 3
Posts: 507
Arduino rocks
|
 |
« Reply #6 on: April 19, 2010, 12:35:39 pm » |
Ok sto usando la libreria e funziona, però in uscita non ti trovo quello che mi aspetto.. io faccio : mySerial.print(2,BYTE); mySerial.print(0,BYTE); mySerial.print(4,BYTE); mySerial.print(4,BYTE); mySerial.print(0,BYTE); mySerial.print(0,BYTE); mySerial.print(2,BYTE);
Aspettandomi in uscita per esempio come primo carattere un STX, cioè il secondo carattere della tabella ascii. invece leggendo il canale mi ritrovo in Hex i seguenti caratteri: BF F7 F7 FF FF FB 00 00
sbaglio qualcosa? io sono in ascolto con le seguenti impostaizoni: Baud rate: 9600 Parity: none bit per data: 8 Stop bit: 1 che sono le stesse usate dal modulo rfid con il quale devo andare a comunicare..
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 160
Posts: 15641
+39 349 2158303
|
 |
« Reply #7 on: April 20, 2010, 03:47:19 am » |
ciao lollotek
La funzione mySerial.print(2,BYTE); da dove la prendi? l' hai definta tu o fa parte di una libreria? Non so dirti niente se non so cosa fa la funzione. ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Senago - Milano
Offline
God Member
Karma: 3
Posts: 507
Arduino rocks
|
 |
« Reply #8 on: April 20, 2010, 03:54:47 am » |
purtroppo non ho il codice a portata di mano altrimenti te lo posto tutto.. comunque myserial è derivato dalla SoftwareSerial. sono partito dall'esempio della sotware serial, ed ho visto che si utilizza il metodo print per inviare i dati. Io dovrei riuscire a mandare il secondo carattere della tabella ascii che sarebbe un STX, fatto questo penso che poi di conseguenza riuscirei a fare tutto il resto..
|
|
|
|
|
Logged
|
|
|
|
|
Senago - Milano
Offline
God Member
Karma: 3
Posts: 507
Arduino rocks
|
 |
« Reply #9 on: April 20, 2010, 07:54:31 am » |
allora stando a quanto dice quicon questo comando Serial.print(byte(78)) gives "N" (whose ASCII value is 78) oppure Serial.print(78, BYTE) gives "N" io mando il carattere numero "78" che è il metodo che appunto ho usato come indicato di sopra.. anche qui indica lo stesso genere di problema. è possibile che basglio qualcosa a livello hardware? io mi sono collegato con l'rx di una seriale aggiuntiva al pin che uso come tx con la software serial, e le cose non mi quadrano, potrebbe esserci per qualche strano motivo un disallineamento dei bit? questa sera faccio altre prove e posto il codice completo.
|
|
|
|
|
Logged
|
|
|
|
|
Senago - Milano
Offline
God Member
Karma: 3
Posts: 507
Arduino rocks
|
 |
« Reply #10 on: April 20, 2010, 12:41:01 pm » |
#include <SoftwareSerial.h>
#define rxPin 4 #define txPin 5
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
void setup() {
pinMode(rxPin, INPUT); // imposto rx in entrata pinMode(txPin, OUTPUT); // imposto tx in uscita mySerial.begin(9600); // apro la software serial }
void loop() { mySerial.print(byte(2)); // dovrei ritrovarmi STX delay(2000); } questo è il codice, e mettendomi in ascolto mi spara fuori il carattere "?" cioè 0x3F, anziché 0x02. qualcuno sa darmi qualche spiegazione? [edit]..inizia a venirmi il dubbio che sia la mia porta da usb a seriale che uso per controllare l'uscita che funzioni male..[/edit]
|
|
|
|
« Last Edit: April 20, 2010, 12:57:34 pm by lollotek »
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 160
Posts: 15641
+39 349 2158303
|
 |
« Reply #11 on: April 20, 2010, 03:35:13 pm » |
ciao lollotek Alcune domande cretine. L' ordine dei Bit é giusto? Il baudrate sono uguali? Tu hai collegato la seriale del PC con i piedini 4 e 5 del Arduino? direttamente o hai messo qualche elettronica in mezzo? Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Senago - Milano
Offline
God Member
Karma: 3
Posts: 507
Arduino rocks
|
 |
« Reply #12 on: April 21, 2010, 02:07:21 am » |
si si, i baudrate è uguale, ripeto, io sono in scolto con le seguenti impostazioni: Baud rate: 9600 Parity: none bit per data: 8 Stop bit: 1
dal piedino 5 faccio partire un filo che va a toccare l'rx del cavo usb-seriale al qule però ho messo un mini attacco incrociato in modo da avere la parte "femmina" dove mettere il mio filo.
ho provato anche ad attaccare il cavo usb seriale ad un'altra porta usb, ed ad usare la libreria NewSoftwareSerial, ma i risultati sono comunque identici.
tu per ordine dei bit che intendi? mandandogli solo un carattere mi aspetto di leggere solo quello. mi pare di aver provato di tutto, per questo mi viene da accusare il cavo usb-seriale. ah, poi la massa è quella del pc, perchè comunque l'arduino è alimentato dal suo cavo usb. Devo forse fare qualche altra impostazione di pinMode o impostare come alta o bassa l'uscita?
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 160
Posts: 15641
+39 349 2158303
|
 |
« Reply #13 on: April 21, 2010, 09:11:05 am » |
Ciao lollotek Le uscite RX-Tx delArduino non hanno i livelli di tensione conforme alla RS232. Il arduino ha i livelli HIGH: 5V e LOW: 0V mentre la RS232 i livelli sono definiti HIGH +3V a +25V e LOW -3 a -25V Ti serve un adattatore tipo MAX232. o equivalente che Ti produce dai 5V +/- 8V. Non so che adattatore USB-RS232 usi. Se usi uno da PC hai questo problema; Potresti usare per un telefonino; alcuin modelli hanno dalla parte telefonino il livelli logici adatti (non so dirti quale adattatore per quale modello di telefonino va bene.
L'ordine dei bit é se viene mandato prima quello la cifra piú bassa (1) o prima quella piú alta (128).
Ciao Uwe
|
|
|
|
« Last Edit: April 21, 2010, 09:12:30 am by uwefed »
|
Logged
|
|
|
|
|
Senago - Milano
Offline
God Member
Karma: 3
Posts: 507
Arduino rocks
|
 |
« Reply #14 on: April 22, 2010, 02:37:15 am » |
ah caspita, mi tocca farmi il circuitino quindi? però mi sorge spontaneo un dubbio.. ma allora quelli che usano il Parallax (lettore rdif 125Khz) dovrebbero anche loro fare questa modifica? non mi pare di averlo mai visto.. collegano in reader e basta.
Anche nel mio caso vedere la comunicazione sulla seriale del pc sarebbe un "extra" l'importante è comunicare con il mio modulo rfid, che però usando anch'esso un'alimentazione da 5v credo che anche lui viaggi sugli stessi livelli di tensione dell'arduino per la comunicazione 232..
|
|
|
|
|
Logged
|
|
|
|
|
|