Buongiorno a tutti,
sto cercando di inviare 180 byte da una applicazione in C# verso il mio arduino uno per poi inserirli in una struct di uguale grandezza, il problema è che non conosco bene il C#.
Quello che faccio è :
Lato C#
Apertura porta
SerialPort port = new SerialPort(ports[ck], 115200, Parity.None, 8, StopBits.One);
port.Open();
Creo il mio array da un memory mapped file
Scrivo il mio array sulla seriale
port.Write(bytes, 0, bytes.Length);
port.DiscardOutBuffer();
Per debug faccio inviare ad arduino tutti i byte che ho inviato e li scrivo in console
Console.Write("Data output : \n");
int k = 0;
for (i = 0; i < bytes.Length; i++)
{
if (k % 12 == 0 && k != 0)
{
Console.Write("\n");
}
Console.Write(String.Format("0x{0:X}", bytes[i]) + " ");
k++;
}
Lato arduino
byte Data[180]; //180 byte di dati in ingresso
//dichiaro la mia struct MemData... non la riporto per brevità
MemData Gtr2;
void setup() {
Serial.begin(115200);
digitalWrite(12,HIGH);//led test
delay(1000);
digitalWrite(12,LOW);
}
void loop() {
if(Serial.available()){
for(int i = 0; i<sizeof(Data) ; i++)
{
Data[i] = Serial.read();
}
memcpy(&Gtr2, Data, sizeof(Data));
for(int i = 0; i<sizeof(Data) ; i++)
{
Serial.print(((unsigned char*)&Gtr2)[i],HEX);
}
delay(1000);
}
}
Su arduino creo il mio array di dati in ingresso Data[180], la mia struttura tramite
struct MemData{
...
...
};
Nel Loop comincio la lettura,ho fatto due prove, una volta con il ciclo for e una volta con la funzione Serial.readBytes(Data,sizeof(Data));
Copio i dati presenti nell'array nella struct con memcpy(&Gtr2, Data, sizeof(Data));
Ed in fine invio i dati sulla seriale un byte alla volta per effettuare la verifica dei dati inseriti nella struct con
Serial.print(((unsigned char*)&Gtr2),HEX);[/b]
Purtroppo facendo partire l'applicazione C# quello che ottengo è uno stream di dati in uscita diverso da quello in ingresso, in particolare quello riportato nel file allegato.
La logica di questo progetto è piuttosto semplice ma credo di fare errori nell'invio o ricezione dei tipi di dato, o nel modo in cui sto inviando il tutto.
Sapreste darmi un consiglio o correggere il mio errore?