Problemi ricezione byte dalla porta USB

Buonasera, sto diventando matto a risolvere questo problema :confused:

Sto cercando di leggere dei byte trasmessi dal PC con la porta USB di ArduinoMega.
Il codice che posto funziona e legge i byte provenienti dal software (dgt board setup Link), ma non ottengo alcuna ricezione con il software (dgt RabbitConnect 1.5 Link:)
La comunicazione è a 9600 baud, 8N1.
Posto il codice...

/*
  Rilevo i byte (47,45,46,41,4b,42)>(G,E,F,A,K,B)
*/
byte c;

void setup() {
  Serial.begin(9600); 
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  }

void loop() {
  if(Serial.available()) {   
      for(int k=8;k<14;k++) digitalWrite(k,LOW);
        c=Serial.read();
            switch (c) {
              case 0x41:
                digitalWrite(10,HIGH);
                break;
              case 0x4b:
                digitalWrite(9,HIGH);
                break;
              case 0x42:
                digitalWrite(8,HIGH);
                break;
              case 0x45:
                digitalWrite(12,HIGH);
                break;
              case 0x46:
                digitalWrite(11,HIGH);
                break;
              case 0x47:
                digitalWrite(13,HIGH);
                break;
      }
    }
  }

Praticamente con il software dgt board setup in esecuzione sul PC, Arduino riconosce i byte e vedo accendersi i relativi Led, mentre con il software dgt RabbitConnect niente. Qualcuno ha qualche idea ?

Posto anche il Polling con Arduino e i due Software...

Polling della comunicazione Arduino /Software dgt board setup (Arduino riesce a leggere i byte ricevuti (47 45 46 41 4B 42) :

COM è aperta
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0xFA, Xoff=0xFF
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Configura i tempi limite: Intervallo di lettura=-1, MultiploTempolimiteTotaleLettura=0, CostanteTempolimiteTotaleLettura=0, MultiploTempolimiteTotaleScrittura=0, CostanteTempolimiteTotaleScrittura=0
COM è chiusa
COM è aperta
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFA, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x74, Xoff=0xEB
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Configura i tempi limite: Intervallo di lettura=-1, MultiploTempolimiteTotaleLettura=0, CostanteTempolimiteTotaleLettura=0, MultiploTempolimiteTotaleScrittura=0, CostanteTempolimiteTotaleScrittura=0
COM è chiusa
COM è aperta
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0xFA, Xoff=0xFF
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Configura i tempi limite: Intervallo di lettura=-1, MultiploTempolimiteTotaleLettura=0, CostanteTempolimiteTotaleLettura=0, MultiploTempolimiteTotaleScrittura=0, CostanteTempolimiteTotaleScrittura=0
GEFAKB
COM è chiusa

Polling della comunicazione Arduino/Software dgt RabbitConnect 1.5 (Arduino non riesce a leggere i byte ricevuti (46 46…..) :

COM è aperta
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0x00, Error=0x00, Break=0x00, Event=0x00, Xon=0x59, Xoff=0xD9
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Configura i tempi limite: Intervallo di lettura=1, MultiploTempolimiteTotaleLettura=0, CostanteTempolimiteTotaleLettura=0, MultiploTempolimiteTotaleScrittura=0, CostanteTempolimiteTotaleScrittura=0
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x00, Xoff=0x00
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x10, Xoff=0x00
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x10, Xoff=0x00
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x10, Xoff=0x00
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x10, Xoff=0x00
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
FFF
COM è chiusa

Non so più che pesci pigliare... :disappointed_relieved:

Non conosco quelle librerie né gli oggetti con i quali comunicano, però diciamo che provo a dirti o chiederti qualcosa:

  1. non è che devi magari disabilitare totalmente l'handshake (né hardware RTS/CTS, né software XON XOFF)? A quelle velocità non credo serva ma magari il driver seriale fa qualcosa che non piace al RabbitConnect

  2. Perché con dgt board hai righe con "COM è aperta" e "COM è chiusa" mentre con RabbitConnect c'è solo un "COM è aperta" e un "COM è chiusa" alla fine? E cosa è quel "FFF" alla fine?

  3. per fare debug visto che non puoi usare il monitor seriale, ti consiglierei (se ce l'hai) di mettere un display LCD I2C e usare quello per vedere esattamente se Arduino riceve dei caratteri, e cosa riceve (mettendone la visualizzazione dopo la "c=Serial.read();").

Per ora non mi viene in mente altro...

Grazie docdoc per avermi risposto. Per monitorare il traffico sulla porta USB uso già il software Advanced Serial Port Monitor e i risultati gli ho postato sopra. Con in esecuzione sul PC il software dgt board setup riesco a leggere con arduino i byte trasmessi che sono in seguenza GEFAKB. Invece con il software dgt RabbitConnect 1.5 in esecuzione sul PC non c'è verso. Noto il lampeggio del led Rx sull'arduino ma non riesco a ricevere niente, dovrei leggere i byte FFF. Anche semplicemente il codice if(Serial.available()) accendi led su I/O di arduino non funziona.
Non so perché con il software dgt board setup ho più chiusure e aperture, ma comunque riesco a leggere i byte trasmessi. L'unica differenza che noto monitorando la comunicazione è questa : :
Con il software dgt board setup :Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0xFA, Xoff=0xFF
Con il software dgt RabbitConnect 1.5 :Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x10, Xoff=0x00... centra qualcosa ?
Per provare a disabilitare da software arduino il handshake hardware RTS/CTS e software XON XOFF come consigli te, come posso fare ?

Con la seriale di Arduino (che è simulata tramite device driver) non credo ci siano handshake di nessun tipo, per cui nel software che si connette ad Arduino a mio avviso va disabilitato qualsiasi handshake, perché potrebbe essere un problema di questo tipo.
Infatti non capisco bene il discorso dei parametri, vedo cambiare varie volte i caratteri speciali, come se "tentasse" di determinare la giusta combinazione, ed alla fine l'impostazione sembra diversa da quella del RabbitConnect (e non mi piace molto che Xon sia 0x10 che generalmente è il carattere CR, da standard XON deve essere 0x11 e XOFF 0x13).
L'uso o meno dell'handshake ovviamente deve essere concordato tra le due parti ed impostato identico, cerca bene nelle impostazioni di sto Rabbit se c'è qualcosa sull'handshake e prova a disattivarlo.

Grazie docdoc, purtroppo il software Rabbit non prevede alcun settaggio dei parametri di comunicazione della porta seriale. Non so più cosa fare .... :cry:
Comunque grazie e buona giornata.
Ciao

Non mi arrendo ancora...

Dialogo tra Arduino e DGTBoardSetup (funziona)
COM è aperta
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0xFA, Xoff=0xFF
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Configura i tempi limite: Intervallo di lettura=-1, MultiploTempolimiteTotaleLettura=0, CostanteTempolimiteTotaleLettura=0, MultiploTempolimiteTotaleScrittura=0, CostanteTempolimiteTotaleScrittura=0
GEFA (Caratteri trasmessi da DGTBoardSetup e ricevuti da Arduino, mi sono fermato al 4° carattere)
COM è chiusa


Dialogo tra Arduino e DGTRabbit ( Non funziona)
COM è aperta
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0x00, Error=0x00, Break=0x00, Event=0x00, Xon=0x59, Xoff=0xD9
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Configura i tempi limite: Intervallo di lettura=1, MultiploTempolimiteTotaleLettura=0, CostanteTempolimiteTotaleLettura=0, MultiploTempolimiteTotaleScrittura=0, CostanteTempolimiteTotaleScrittura=0
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x00, Xoff=0x00
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x10, Xoff=0x00
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x10, Xoff=0x00
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x10, Xoff=0x00
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Baud rate 9600
RTS on
DTR on
Pcchetti di bit=8, Bit di Stop =1, Parità=None
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x10, Xoff=0x00
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
FFF (Caratteri trasmessi da Rabbit ma non ricevuti da Arduino, mi sono fermato al 3° carattere)
COM è chiusa
...

Quando i software iniziano a trasmettere i byte trovo come impostazioni della seriale il seguente handshake:
Per DGTBoardSetup… che funziona >>
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0xFA, Xoff=0xFF
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Per Rabbit …che non funziona >>
Configura i caratteri: Eof=0xFF, Error=0xFF, Break=0xFF, Event=0xFF, Xon=0x10, Xoff=0x00
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=0, XoffLimit=0
Le differenze tra i due sono:
Xon=0xFA, Xoff=0xFF per DGTBoardSetup
Xon=0x10, Xoff=0x00 per Rabbit

Comunque da quello che ne so, il controllo HandShake dovrebbe prevedere come controllo di flusso questo : ControlHandShake=(DTR_CONTROL), FlowReplace=(AUTO_TRANSMIT, AUTO_RECEIVE, TRANSMIT_TOGGLE, RTS_CONTROL), XonLimit=4096, XoffLimit=4096 oppure questo :
ControlHandShake=(DTR_CONTROL, CTS_HANDSHAKE), FlowReplace=(AUTO_TRANSMIT, AUTO_RECEIVE, TRANSMIT_TOGGLE, RTS_HANDSHAKE), XonLimit=4096, XoffLimit=4096

Nel caso dei due software in esame invece trovo : XOFF_CONTINUE, XonLimit=0, XoffLimit=0 dunque desumo che non dovrebbero usare il controllo HandShake con Xon e Xoff.
Tu che ne pensi ?
Non sono un esperto della comunicazione asincrona, a me basta interpretare il bit di start e stop a secondo della velocità di trasmissione... quì invece per mia ignoranza non ne vengo fuori... help me ! :slight_smile:

Sarebbe interessante, secondo me, conoscere come trasmette il programma che non viene ricevuto, informazione che si dovrebbe trovare in rete. Al che si prende un cavo usb ulteriore (NON quello che si usa per programmare Arduino) e si collega a due pin sui quali si apre una software serial con tali impostazioni.
Non credo vi sia altra soluzione o possibile problema, anche se non conosco il gioco delle tensioni, e che nel momento il cui si attacca il cavo modificato Arduino deve essere alimentato da pc o in altro modo.
Comunque l'idea di usare due software per la comunicazione mi pare strana, credo sia meglio usarne uno solo o preferibilmente nessuno, per poter modificare il comportamento di Arduino.
Inoltre, scusi la domanda, ma come si capisce che non riceve i dati?

Chiedo scusa ma cosa forresti farci con arduino ?
Le potre Com FTDI sono ampiamente configurabili vedi proprietà avanzate della porta com.
Hai provato a monitorare la trasmissione con una scacchiera collegata ?

E' probabile che Arduino deva rispondere qualcosa al software di setup affinchè la comunicazione
prosegua e deve rispondere secondo il protocollo che il software si aspetta.

Salve, rispondo prima a Silente che ringrazio per il suo interessamento al mio problema.
Purtroppo pur avendo fatto una ricerca approfondita nel web, non ho trovato alcuna descrizione tecnica riguardo il funzionamento del programma Rabbit, se non la descrizione all'utilizzo con il programma di gioco degli scacchi Fritz.

Perché sto utilizzando questi due software ? Non essendo in possesso della scacchiera DGT, che cerco di auto costruirmela, sto cercando di capire come comunica con il programma scacchistico Fritz. Nel CD di installazione per usare la scacchiera DGT con il programma di gioco degli scacchi Fritz, trovo i due programmi. Il primo (Software dgt board setup, il quale trasmette dei byte che riesco a leggere con Arduino), è in sostanza un tool per verificare la funzionalità della scacchiera DGT collegata al PC. I byte ricevuti li ritengo corretti esaminandoli con il protocollo della DGT. Questo software non viene utilizzato dal programma Fritz.

Il secondo, quello più importante per me, è Rabbit. Rabbit è un plugin che viene utilizzato dal software Fritz per giocare con la scacchiera esterna DGT collegata alla porta usb del PC. La scacchiera DGT riceve e trasmette i comandi verso il programma Fritz passando tramite questo Rabbit. Fritz ha necessariamente bisogno di questo plugin per comunicare con la scacchiera, plugin che se non installato nel PC non permette la ricerca della scacchiera DGT sul software Fritz.

Con Arduino collegato alla porta usb e Fritz e Rabbit in esecuzione sul PC, noto che Fritz comunica con la usb, il led rx su Arduino lampeggia ad ogni ricezione del byte proveniente dal PC, ma la funzione Serial.available() non mi dà alcun risultato e dunque non riesco a gestire la comunicazione. Non so se utilizzando le porta rx-tx di Arduino per collegarle ad un'ulteriore USB e gestire il tutto con la libreria SoftwareSerial mi aiuterebbe a gestire meglio la comunicazione USB.
Saluti
Igor

Rispondo ora a PaoloF_60 che ringrazio. Arduino lo sto utilizzando per il riconoscimento dei pezzi scacchistici sulla scacchiera con tag nfc. Lo stesso Arduino deve trasmettere al programma scacchistico Fritz le mosse effettuate sulla scacchiera o sui vari chess_server. Questo deve essere fatto con le regole del protocollo DGT. Non sono in possesso della scacchiera DGT, non sarei qui a diventar matto :slight_smile: . La comunicazione da PC con il software Fritz e plugin Rabbit verso Arduino è costante,e viene interrotta solo da un mio comando sul software Rabbit. Ho postato sopra quanto monitorato durante la comunicazione con un software di monitor seriale.
Saluti
Igor

EtaBetaPot:
...Non so se utilizzando le porta rx-tx di Arduino per collegarle ad un'ulteriore USB e gestire il tutto con la libreria SoftwareSerial mi aiuterebbe a gestire meglio la comunicazione USB.

Sicuramente ti aiuterebbe a fare il "debug" visto che poterti usare la seriale HW per comunicare con il monitor seriale ed avere informazioni diagnostiche, ed usare la SoftwareSerial per le altre comunicazioni.

Guglielmo

EtaBetaPot:
Rispondo ora a PaoloF_60 che ringrazio. Arduino lo sto utilizzando per il riconoscimento dei pezzi scacchistici sulla scacchiera con tag nfc. Lo stesso Arduino deve trasmettere al programma scacchistico Fritz le mosse effettuate sulla scacchiera o sui vari chess_server. Questo deve essere fatto con le regole del protocollo DGT. Non sono in possesso della scacchiera DGT, non sarei qui a diventar matto :slight_smile: . La comunicazione da PC con il software Fritz e plugin Rabbit verso Arduino è costante,e viene interrotta solo da un mio comando sul software Rabbit. Ho postato sopra quanto monitorato durante la comunicazione con un software di monitor seriale.
Saluti
Igor

Ciao EtaBeta siamo sugli stessi fumetti ma se non conosci il protocollo di comunicazione fra il software e la scacchiera diventa difficile rispondere ad un programma che si aspetta delle risposte dalla scheda che sta cercando di utilizzare. Io gioco a scacchi ma sono un principiante. O forse poco più.
Però ti posso dire che per lavoro riparavo video giochi, Juke box, flipper, ecc. Quando ho avuto a che fare con Juke Box Pioner per testare la comunicazione seriale fra scheda del Juke Box e Lettore CD Multilettore con 24 CD a bordo mi sono fatto le mie schede Hardware per testare la comunicazione e capire come comunicavano. SE vuoi forse ritrovo ancora il sorgente in Quick Basic. Parliamo di Basic degli anni 80.

Solo dopo aver capito come comunicavano ho potuto scrivere un software per testare i lettori CD di Pioneer.

Ciao
Paolo

Salve Guglielmo, grazie per l'interessamento. Ma se tra la SoftwareSerial e la seriale HW di Arduino non ho una maggior flessibilità per definire personalmente lo handshake della comunicazione, penso che la cosa non mi giovi molto.

Rispondendo anche a Paolo dico che il problema non stà nel gestire il protocollo di comunicazione tra scacchiera e PC, di quello ne ho appreso una buona parte, almeno quello che mi serve ora per il mio progetto.

Forse nel mio post #8 non mi sono spiegato bene, ma il problema è che non riesco a leggere alcun byte o meglio rilevare alcun traffico dati sulla porta USB di Arduino, pur settando la comunicazione con i parametri richiesti.

Grazie al programma Advanced Serial Port Monitor, "spio" i byte trasmessi dai due programmi al mondo esterno, il led rx Arduino si accende per ogni carattere ricevuto... sto diventando pazzo nel capire perchè con il Rabbit, pur essendo sicuro che trasmetta grazie al programma "spia" e al lampeggio del led rx su Arduin.
Non ottengo nemmeno il TRUE dalla funzione Serial.available(), che sappiamo sia vera se il buffer di ricezione !=0, dunque qualcosa ricevuto in ingresso.

Ovviamente Rabbit trasmette in continuazione, per capire se ci sia collegata alla porta usb la scacchiera DGT, il carattere "F" [DGT_RETURN_BUSADRES] con cadenza di 0.5".

Ma come faccio a rispondere se nemmeno la funzione Serial.available() funziona ?

Ciao EtaBeta presumo che il software usato come monitor sia questo

io ho provato com il monitor di arduino ad inviare al programma che ho scriito l' altro giorno
la stringa binaria che arduino a convertito in decimale e mandato messaggio al monitor in risposta.

Apro il monitor di arduino.

<20180314021747.625 SYS>
COM è aperta
<20180314021747.641 SYS>
Baud rate 9600
<20180314021747.641 SYS>
RTS on
<20180314021747.641 SYS>
DTR on
<20180314021747.641 SYS>
Pcchetti di bit=8, Bit di Stop =1, Parità=None
<20180314021747.641 SYS>
Configura i caratteri: Eof=0x00, Error=0x00, Break=0x00, Event=0x00, Xon=0x11, Xoff=0x13
<20180314021747.641 SYS>
Controllo di flusso manuale: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL, XOFF_CONTINUE), XonLimit=2048, XoffLimit=512
<20180314021747.641 SYS>
Configura i tempi limite: Intervallo di lettura=0, MultiploTempolimiteTotaleLettura=0, CostanteTempolimiteTotaleLettura=0, MultiploTempolimiteTotaleScrittura=0, CostanteTempolimiteTotaleScrittura=0

<20180314021807.468 TX>

10101010
questa la stringa binaria da me introdotta

<20180314021808.482 RX>
Mystring = 10101010 [len=20]
<20180314021808.498 RX>
Binary (10101010) Converted To 170 [len=35]

questa la risposta di arduino

<20180314021911.974 SYS>
COM è chiusa

qui ho chiuso il monitor di arduino

Devo dire che la prima volta che ho installato il programma non ricevevo risposte nel senso che la
linea rx non funzionava, funzionava solo la tx. Anche a programma chiuso la linea rx di arduino non funzionava più. Anche fermando il servizio Aspmon che viene installato dal programma monitor la linea rx continuava a non funzionare. Riavviando l' IDE di Arduino niente.

Il servizio Aspmon lo trovi nei device non plug and play del device manager
selezionando mostra periferiche nascoste nella scheda visualizza del device manager

oppure con questi due comandi in una finestra CMD

set devmgr_show_nonpresent_devices=1
start devmgmt.msc

Comunque disinstallato riavviato rimosso il blocco dal download e reinstallato come amministratore - Riavvio

Ha funzionato correttamente. Ed ho potuto fare la prova postata.

Non ho impostato niente se non i terminatori di riga in tx e rx che sono diversi. In Tx niente in Rx CRLF

IO leggo così la seriale

void loop() {
  // put your main code here, to run repeatedly:
  while (Serial.available()==0) {//aspetta caratteri
  }
    Mystring=Serial.readStringUntil('/n');
    lcd.setCursor(1,1);
    lcd.print(Mystring);
    lcd.print(" =     ");
    Serial.print("Mystring = ");
    Serial.println(Mystring);
    
  Verifica();
  //Serial.println("Verifica");
  
  if (Check==true) {
    //Serial.println("If Check=True Then ...");
    BinToDec();
    lcd.setCursor(12,1);
    lcd.print(Mybyte);
    Serial.print("Binary (");Serial.print(Mystring);Serial.print(") Converted To ");Serial.println(Mybyte,DEC);
  }
}

Ma anche la tua non mi sembra sbaglaiata.

Ciao EtaBeta

Allora io ho provato alcune cose e ti comunico che riesco a comunicare con Rabbit Connect.

Apri il monitor serale di Ardino e scrivi GEFAKB premi invio dovresti dovresti vedere i led scorrere in
questa sequenza.

8 9 10 11 12 13 G 8 9 10 11 12 13 E 8 9 10 11 12 13 F

8 9 10 11 12 13 A 8 9 10 11 12 13 K 8 9 10 11 12 13 B

IO non ho led collegati alla scheda e non ho potuto verificare questa cosa ma ho modificato il tuo programma inserendo al posto delle accensioni led delle Serial.print

byte c;
byte k;

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  }

void loop() {
  if(Serial.available()) {
         
      for(k=8;k<14;k++) Serial.println(k);
        c=Serial.read();
        Serial.print("c = ");Serial.println(c);
            switch (c) {
              case 0x41:
                Serial.println("case 0x41");
                break;
              case 0x4b:
                Serial.println("Case 0x4B");
                break;
              case 0x42:
                Serial.println("Case 0x42");
                break;
              case 0x45:
                Serial.println("Case 0x45");
                break;
              case 0x46:
                Serial.println("Case 0x46");
                break;
              case 0x47:
                Serial.println("Case 0x47");
                break;
      }
    }
  }

allego il file del serial monitor.

quindi ho provato anche con il Rabbit Connect.

Allego il file di Advance Serial Port Monitor.

Se a te non funziona a sto punto prova a disinstallare Advance Serial Port Monitor.

Eventualmente riprovi dopo il riavvio. Se poi lo vuoi reinstallare fai come ti accennato prima.

Sul file scaricato Click destro - prprietà - Annulla Blocco (se c'è)

Click col destro - esegui come amministratore. Per fare una installazzione con privilegi elevati.

Riavvio e riprovi col Port Monitor a vedere se ti funziona.

Ciao
Paolo

Serial Monitor.txt (246 Bytes)

Serial Port Out.pdf (31.5 KB)

Ciao Paolo, innanzitutto devo ringraziarti molto per il tempo speso per me, sei davvero gentile.
Ho seguito i tuoi post con molta attenzione, ma purtroppo sono lusingato nel comunicarti che a me la ricezione da Rabbit continua a non funziona con Arduino :confused: . Ho provato anche come mi hai consigliato, di disinstallare il software Advanced Serial Port Monitor per poi riprovare con Rabbit, ma senza alcun effetto. Ho pensato che non sia un problema di compatibilità con Windows 10, provando ad eseguire Rabbit in varie modalità di compatibilità senza alcun successo. Ho collegato Arduino sulle altre porte del PC, ma niente.
Semplicemente utilizzando il seguente codice non mi si accende il led, dunque desumo che la funzione Serial.available() per qualche stranissimo motivo sul mio PC non viene

void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
if(Serial.available()) digitalWrite(13,HIGH);
}

Per quanto riguarda il software di monitoraggio delle porte, non ho avuto problemi ne di ricezione ne di trasmissione sin dalla prima installazione sul PC.
Proverò comunque a lavorare sul pc dove risiede windows 7..... non so più cosa pensare.
Ciao e grazie.
Igor

P.S.Ti dirò che mi hai ricordato con piacere quando si lavorava in GWBasic con open com,input# e print# eof e loc... erano altri tempi ed era più facile far funzionare le cose :slight_smile:

Ma la prova dal monitor seriale di Arduino l' hai fatta ? Con che risultato ?

Paolo da monitor seriale di Arduino naturalmente non ho problemi ad interpretare i comandi, tutto funziona altrimenti darei la causa a un malfunzionamento di Arduino.
L'unica cosa che devo ancora provare è di sperimentare il tutto su altro PC. Tu con che sistema operativo hai fatto le tue prove ?
Ciao e buona giornata

Windows 7 Pro 64 bit Rabbit 64 1.5 Aspmon 4.4.13 buil 307

Se ho capito bene tu hai windows 10.