Comunicazione Arduino - C#

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 :slight_smile:

Non so perché hai questo problema di ripetizione dati; Hai guardato col terminale del IDe se Arduino da i dati giusti e non invia sempre la stessa cosa?

So dirti che con l' invio dei dati in questo modo:

   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();

Devi separare i dati perché a secondo della lunghezza del numeri hai piú o meno caratteri. usa per esempio una virgola per separare i valori.

Ciao Uwe

La cosa strana è proprio questa: sul monitor seriale dell'programma di Arduino i dati sono corretti! Per farti un'esempio:
Primo invio: Monitor seriale: [owx~=] C#: [owx~=]
Invio successivo: Monitor Seriale: [owx~€] C#: [owx~=]
E via dicendo..