arduino non riesce a comunicare

ho questo problema...ho un applicazione c# che va in crash quando cerco di aprire la porta sull'arduino...la cosa strana è che su un altro pc l'applicazione va (cambiando il numero della com) cosa può essere?

di quale applicazione si tratta? hai il codice sorgente? in che modo va in crash? F

ora sono riuscito a far aprire la porta com ma spesso e volentieri il programma crasha(di solito durante la lettura del buffer)

il programma arduino è questo

int fine_carica_uno_pin = 10;
int spinotto_carica_uno_pin = 3;
int rele1_pin = 11;
int uscita_connessione_veicolo_uno_pin = 7;

int fine_carica_due_pin = 2;
int spinotto_carica_due_pin = 4;
int rele2_pin = 12;
int uscita_connessione_veicolo_due_pin = 8;

int presenza_persone_pin = 9; //pin presenza
int bat_uno_pin = 0; //pin batteria uno
int bat_due_pin = 0; // pin batteria due

int inByte = 0;
unsigned int presenza_persone = 0;

unsigned int carica_completa1 = 0;
unsigned int fine_carica_uno = 0;
unsigned int spinotto_carica_uno = 0;
unsigned int rele1 = 0;
unsigned int bat_uno = 0;

unsigned int carica_completa = 0;
unsigned int fine_carica_due = 0;
unsigned int spinotto_carica_due = 0;
unsigned int rele2 = 0;
unsigned int bat_due = 0;

void setup()
{
  pinMode(fine_carica_uno_pin, INPUT);  /* LED dello stato di carica batteria */
  pinMode(spinotto_carica_uno_pin, INPUT);  /* Veicolo collegato == 1, veicolo scollegato == 0 */
  pinMode(rele1_pin, INPUT);
  pinMode(uscita_connessione_veicolo_uno_pin, OUTPUT);  /* Pilotaggio relè */

  pinMode(fine_carica_due_pin, INPUT);  /* LED dello stato di carica batteria */
  pinMode(spinotto_carica_due_pin, INPUT);  /* Veicolo collegato == 1, veicolo scollegato == 0 */
  pinMode(rele2_pin, INPUT); /* Ingresso stato rele */
  pinMode(uscita_connessione_veicolo_due_pin, OUTPUT);  /* Pilotaggio relè */
  
  pinMode(presenza_persone_pin, INPUT);
  pinMode(bat_uno_pin , INPUT);
  pinMode(bat_due_pin, INPUT);
  
  Serial.begin(9600);
}

void loop()
{
  digitalWrite (uscita_connessione_veicolo_uno_pin, LOW);  /* Uscita rele = 0 */
  digitalWrite (uscita_connessione_veicolo_due_pin, LOW);  /* Uscita rele = 0 */
  delay(250);
  rele1 = digitalRead (rele1_pin);
  rele2 = digitalRead (rele2_pin);
  if (rele1 == 0)  /* Inizializzo il rele nella posizione 1 */
  {
    digitalWrite (uscita_connessione_veicolo_uno_pin, HIGH);
    delay(1500);
    digitalWrite (uscita_connessione_veicolo_uno_pin, LOW);
  }

  if (rele2 == 0)  /* Inizializzo il rele nella posizione 1 */
  {
    digitalWrite (uscita_connessione_veicolo_due_pin, HIGH);
    delay(1500);
    digitalWrite (uscita_connessione_veicolo_due_pin, LOW);
  }


  while(1)
  {
    presenza_persone = digitalRead(presenza_persone_pin); //sensore presenza
    bat_uno = analogRead(bat_uno_pin);
    bat_due = analogRead(bat_due_pin);
    delay(2000);
    spinotto_carica_uno = digitalRead(spinotto_carica_uno_pin);
    spinotto_carica_due = digitalRead(spinotto_carica_due_pin);
    delay(2000);
    fine_carica_uno = digitalRead(fine_carica_uno_pin);
    fine_carica_due = digitalRead(fine_carica_due_pin);
    delay(50);
    rele1 = digitalRead(rele1_pin);
    rele2 = digitalRead(rele2_pin);
    
    if (Serial.available() > 0)
  {
    inByte = Serial.read();
    Serial.println(presenza_persone);
    Serial.println(spinotto_carica_uno);
    Serial.println(spinotto_carica_due);
    Serial.println(fine_carica_uno);
    Serial.println(fine_carica_due);
    Serial.println(bat_uno);
    Serial.println(bat_due);
  }
    delay(500);

    if (spinotto_carica_uno == 1)  /* Veicolo connesso */
    {
      if (fine_carica_uno == 1)  /* Carica finita, LED verde acceso */
      {
        if (rele1 == 1)  /* Genera un solo impulso per la commutazione del relè, disattivazione della carica */
        {
          digitalWrite (uscita_connessione_veicolo_uno_pin, HIGH);
          delay(1500);
          digitalWrite (uscita_connessione_veicolo_uno_pin, LOW);
          delay(750);
        }
      }
      if (fine_carica_uno == 0)
      {
        if (rele1 == 0)
        {
          digitalWrite (uscita_connessione_veicolo_uno_pin, HIGH);
          delay(1500);
          digitalWrite (uscita_connessione_veicolo_uno_pin, LOW);
          delay(750);
        }
      }        
    }

    if (spinotto_carica_due == 1)  /* Veicolo connesso */
    {
      if (fine_carica_due == 1)  /* Carica finita, LED verde acceso */
      {
        if (rele2 == 1)  /* Genera un solo impulso per la commutazione del relè, disattivazione della carica */
        {
          digitalWrite (uscita_connessione_veicolo_due_pin, HIGH);
          delay(1500);
          digitalWrite (uscita_connessione_veicolo_due_pin, LOW);
          delay(750);
        }
      }
      if (fine_carica_due == 0)
      {
        if (rele2 == 0)
        {
          digitalWrite (uscita_connessione_veicolo_due_pin, HIGH);
          delay(1500);
          digitalWrite (uscita_connessione_veicolo_due_pin, LOW);
          delay(750);
        }
      }        
    }


    if (spinotto_carica_uno == 0) /* Veicolo non collegato */
    {
      if (rele1 == 0)
      {
        digitalWrite (uscita_connessione_veicolo_uno_pin, HIGH);
        delay(1500);
        digitalWrite (uscita_connessione_veicolo_uno_pin, LOW);
        delay(750);
      }
    }

    if (spinotto_carica_due == 0) /* Veicolo non collegato */
    {
      if (rele2 == 0)
      {
        digitalWrite (uscita_connessione_veicolo_due_pin, HIGH);
        delay(1500);
        digitalWrite (uscita_connessione_veicolo_due_pin, LOW);
        delay(750);
      }
    }
  }
}

e il codice per leggere il buffer dal pc è

//string val;
            //int lengthDati;
            //porta.Write("A");
            //val = porta.ReadExisting();
            //if (val != "")
            //{
            //    //    System.Console.WriteLine(val);
            //    string[] DatiArdiuno = val.Split(new string[] { "\r\n" }, StringSplitOptions.None);
            //    lengthDati = DatiArdiuno.Length;
            //    if (lengthDati > 6)
            //    {
            //        presenza_persone = DatiArdiuno[0];
            //        spinotto_carica_sx = DatiArdiuno[1];
            //        spinotto_carica_dx = DatiArdiuno[2];
            //        fine_carica_sx = DatiArdiuno[3];
            //        fine_carica_dx = DatiArdiuno[4];
            //        bat_box_sx = DatiArdiuno[5];
            //        bat_box_dx = DatiArdiuno[6];
            //    }
            //}

ho capito qual'è il problema...il pezzo del sottoprogramma che richiama l'arduino se viene richiamato più di una volta il programma sul pc crasha.

come risolvo?

a quanto è settato il buffer della seriale sul pc? che dice il debugger?

se intendi il boud rate è settato a 9600 per il debugger oggi non l'ho potuto provare perchè dovevo scappare...in mattinata vi farò sapere...

la panoramica del programma è questa...schermata principale con tre scelte, se scelgo quella che comunica in seriale tutto ok, se torno alla home e la riapro il programma crasha, ho provato anche a chiudere la seriale ma non sembra funzionare