Salve a tutti, ho dei problemi riguardanti la comunicazione tra arduino e c# tramite la porta seriale:
Con arduino elaboro dei dati che poi invio alla seriale attraverso il seguente codice:
Serial.write('[');
Serial.write(luce);
Serial.write(gas);
Serial.write(ultras);
Serial.write((char)val_temperatura);
Serial.write((char)val_umidita);
Serial.write(']');
Serial.flush();
Fin qui nessun problema, i dati vengono inviati nel modo corretto.
Il problema è lato C# dove utilizzo l'oggetto SerialPort e uso il seguente codice per leggere:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
SerialPort Arduino = new SerialPort();
Arduino.BaudRate = 9600;
Arduino.PortName = "COM17";
Arduino.Open();
if (Arduino.IsOpen)
{
while (true)
{
char temp = (char)Arduino.ReadChar();
if (temp == '[')
{
System.Console.WriteLine(temp);
for (int i = 0; i < 6; i++)
{
if (i == 4 || i == 3) //Valori numerici
System.Console.WriteLine(Arduino.ReadChar());
else
System.Console.WriteLine((char)Arduino.ReadChar());
}
System.Console.ReadLine(); //Usata per interrompere il while e avere tempo di leggere i valori su Console
}
}
}
}
}
}
Ora il problema è: Ogni volta mi viene riletta la prima ricezione e dato che i valori cambiano di volta in volta io mi ritrovo sempre la prima ricezione!
Qualcuno riesce a spiegarmi il perche?? Grazie