Mandare array byte con seriale

Ciao ragazzi, sicuramente è una cazzata ma ci sto sbattendo troppo la testa quindi chiedo :slight_smile:
Io dovrei mandare i seguenti byte per avviare un'antenna:

byte bytes[] = { 0x0A, 0xFF, 0x02, 0x90, 0x65 };

il mio codice è il seguente:

void setup()  
{
  Serial.begin(9600);
  byte bytes[] = { 0x0A, 0xFF, 0x02, 0x90, 0x65 };
  
  Serial.print(bytes[0]);
  Serial.print(bytes[1]);
  Serial.print(bytes[2]);
  Serial.print(bytes[3]);
  Serial.print(bytes[4]);
}

il problema è che l'antenna non si avvia... Probabilmente non arrivano gli stessi byte rispetto al programma originale.
Consigli?

Prova con Serial.print(bytes[..], BYTE);

Come lo hai scritto tu lo spedisci in formato ASCII, cioè ad esempio 150 arriva come "1", "5", "0"

Io ho connesso il piedino RX al TX dell antenna, TX ad RX dell antenna ed il piedino GND alla massa dell'antenna.
Inoltre ho collegato un altra seriale che torna al pc mediante un convertitore usb-seriale negli stessi morsetti è un problema?

Sto utilizzando un programma che dovrebbe farmi vedere i byte in arrivo dal convertitore e mi mostra:

#01#BF#02

il programma su arduino è fatto così ora:

void setup()  
{
  Serial.begin(9600);
  
  
}

void loop()                     // run over and over again
{
  byte bytes[] = { 0x0A, 0xFF, 0x02, 0x90, 0x65 };
  
  Serial.print(bytes[0], BYTE);
  Serial.print(bytes[1], BYTE);
  Serial.print(bytes[2], BYTE);
  Serial.print(bytes[3], BYTE);
  Serial.print(bytes[4], BYTE);
  
  delay(10000);

}

leo72:
Prova con Serial.print(bytes[..], BYTE);

Come lo hai scritto tu lo spedisci in formato ASCII, cioè ad esempio 150 arriva come "1", "5", "0"

fondamentalmente giusto. TUTTE le print trasformano in ascii, ovvero in modo leggibile all'uomo, i dati, perchè print è pensata per comunicare appunto con l'uomo. la write invece nasce per le comunicazioni "grezze", senza questa brutta trasformazione nel mezzo

Ho provato anche così:

 byte bytes[] = { 0x0A, 0xFF, 0x02, 0x90, 0x65 };
  
  Serial.write(bytes[0]);
  Serial.write(bytes[1]);
  Serial.write(bytes[2]);
  Serial.write(bytes[3]);
  Serial.write(bytes[4]);

ma niente... ma può funzionare anche se ho attacato un altra seriale ai morsetti? In pratica ho la seriale di arduino piedino 0 e 1 che si collegano all'antenna tramite dei morsetti, in questi morsetti ho collegato un altra seriale per vedere i dati che arrivano al pc. E' giusto?

Ma hai provato come ti ho detto?

D4ng3R92:
Io ho connesso il piedino RX al TX dell antenna, TX ad RX dell antenna ed il piedino GND alla massa dell'antenna.
Inoltre ho collegato un altra seriale che torna al pc mediante un convertitore usb-seriale negli stessi morsetti è un problema?

Sto utilizzando un programma che dovrebbe farmi vedere i byte in arrivo dal convertitore e mi mostra:

#01#BF#02

il programma su arduino è fatto così ora:

void setup()  

{
  Serial.begin(9600);
 
 
}

void loop()                     // run over and over again
{
  byte bytes[] = { 0x0A, 0xFF, 0x02, 0x90, 0x65 };
 
  Serial.print(bytes[0], BYTE);
  Serial.print(bytes[1], BYTE);
  Serial.print(bytes[2], BYTE);
  Serial.print(bytes[3], BYTE);
  Serial.print(bytes[4], BYTE);
 
  delay(10000);

}

Ho fatto così, ho capito giusto?

D4ng3R92:
ma niente... ma può funzionare anche se ho attacato un altra seriale ai morsetti? In pratica ho la seriale di arduino piedino 0 e 1 che si collegano all'antenna tramite dei morsetti, in questi morsetti ho collegato un altra seriale per vedere i dati che arrivano al pc. E' giusto?

secondo me no. La seriale è per comunicazioni a 2

Immaginavo...Ho staccato i cavi provenienti dall antenna in modo che ora ho l arduino collegato al convertore USB/Seriale.

Mi era sfuggita questa cosa.
Usa la NewSoftSerial per implementare un altro canale seriale verso il PC.

PS: ma hai risolto il comando dell'antenna?

Ho implementato NewSoft ora il codice è così:

  mySerial.print(189);
  mySerial.print(0);
  mySerial.print(191);
  mySerial.print(83);
  mySerial.print(2);
  mySerial.print(0);

Questi numeri li ho letti collegando in seriale arduino al pc e avviando il programma "originale" dell antenna.

Ho fatto un semplice programmino in c# che manda in seriale la sequenza di byte:

0x0A, 0xFF, 0x02, 0x90, 0x95

e l'antenna si accende senza problemi, pensavo che con arduino fosse stato piu facile xD

D4ng3R92:
Io ho connesso il piedino RX al TX dell antenna, TX ad RX dell antenna ed il piedino GND alla massa dell'antenna.
Inoltre ho collegato un altra seriale che torna al pc mediante un convertitore usb-seriale negli stessi morsetti è un problema?

A ogni seriale puó essere collegato solo 1 altra seriale.
L'arduino sulla seriale (nel caso del UNO) o sulla seriale 0 (nel caso del MEGA) é collegato tramite un convertitore USB al PC. Per cui deci usare o la libreria NewSoftSerial oppure un altra seriale del MEGA, Se la seriale non é livelli TTL ma é RS232 serve anche un convertitore tipo il MAX232.

Ciao Uwe

L'antenna dice che ho un collegamento RS232 quindi non si può utilizzare direttamente con arduino ma serve un convertitore? Ho capito bene?

Eh sì, perché cambiano i livelli di tensione delle logiche.
L'Arduino lavora con logiche TTL: 0V -> 0, 5V ->1. La RS232 lavora con tensioni differenti, ed a logiche invertite: +12V -> 0, -12V ->1

vi ringrazio :slight_smile: