Unrealizer
24-05-2011, 19:18
Salve a tutti :D sto aiutando un amico a fare un progetto con un PIC collegato via porta seriale al pc, usando un semplice programmino in C# contenente i controlli essenziali per selezionare la porta, la velocità ed avviare la connessione e 8 pulsanti che controllano altrettanti led sul pic... alla pressione del pulsante il pc invia un byte via seriale con il comando, ed il pic dopo averlo elaborato manda un secondo byte di conferma. Fin qui tutto ok, funziona alla perfezione, i guai arrivano quando provo ad inviare un altro byte dal pic al pc, contenente dati sul convertitore analogico/digitale, in modo da visualizzarli su una progress bar:
Usando realterm va tutto bene, ma con C# sembra che non funzioni niente! riceve entrambi i byte sbagliati!
ecco il codice:
private void Update(byte led)
{
byte[] bah = new byte[3];
bah[0] = led;
try
{
comPort.Write(bah, 0, 1);
}
catch (NullReferenceException)
{
statusLabel.Text = "Devi prima connetterti";
return;
}
catch (InvalidOperationException)
{
statusLabel.Text = "Devi prima riconnetterti";
return;
}
try
{
comPort.Read(bah, 1, 2);
}
catch (TimeoutException)
{
statusLabel.Text = "Errore di timeout! Nessuna risposta dal PIC!";
}
if ((byte)(bah[0] ^ lastStatus) == bah[1])
statusLabel.Text = "Comando inviato con successo!";
else
statusLabel.Text = "Errore!";
adcProgressBar.Value = bah[2];
lastStatus = bah[1];
statusLabel.Text = bah[0].ToString() + ", " + bah[1].ToString() + ", " +
bah[2].ToString();
updateCheckBoxes(bah[1]);
}
Usando realterm va tutto bene, ma con C# sembra che non funzioni niente! riceve entrambi i byte sbagliati!
ecco il codice:
private void Update(byte led)
{
byte[] bah = new byte[3];
bah[0] = led;
try
{
comPort.Write(bah, 0, 1);
}
catch (NullReferenceException)
{
statusLabel.Text = "Devi prima connetterti";
return;
}
catch (InvalidOperationException)
{
statusLabel.Text = "Devi prima riconnetterti";
return;
}
try
{
comPort.Read(bah, 1, 2);
}
catch (TimeoutException)
{
statusLabel.Text = "Errore di timeout! Nessuna risposta dal PIC!";
}
if ((byte)(bah[0] ^ lastStatus) == bah[1])
statusLabel.Text = "Comando inviato con successo!";
else
statusLabel.Text = "Errore!";
adcProgressBar.Value = bah[2];
lastStatus = bah[1];
statusLabel.Text = bah[0].ToString() + ", " + bah[1].ToString() + ", " +
bah[2].ToString();
updateCheckBoxes(bah[1]);
}