Reset automatico su connessione seriale?!?

Ho scritto uno sketch molto semplice che fa accendere un po’ di led quando arriva una “A” sulla seriale:

void setup() {                
  Serial.begin(9600);
for (int i=5;i<=13;i++){
  pinMode(i, OUTPUT);     
}  
}

void loop() {
  if (Serial.available()) {
    char comando = Serial.read();
    Serial.flush();
    delay(1000);
    if (comando=='A') {
      for (int i=5;i<=13;i++){
        digitalWrite(i,HIGH);
      }
    } 
   if (comando=='0') {
      for (int i=5;i<=13;i++){
         digitalWrite(i,LOW);
      }
    }
  }
}

Per funzionare funziona… il problema è che ogni volta che apro la seriale dal PC, i LED si spengono, prima ancora di inviare qualunque comando! E’ normale?!? Si puo’ evitare? E’ come se la scheda si resettasse appena apro la porta. E’ una Arduino UNO.

è normale; Il terminale provoca un reset per farTi partire lo sketch caricato dall'inizio. È comunque possibile disattivarlo. http://www.arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection Ciao Uwe

ma se lo disabilito, poi avro' problemi nell'upload degli sketch, se il programma che sta girando accde alla seriale?

Ah, risolto tramite SW: basta disabilitare il segnale DTR sulla porta prima di aprirla.

Esempio in VBA:

Connect your source to Microsoft Comm Control (MSCOMM32.OCX) , then:

Dim MSComm1 As Object

Sub ArduinoOpen() Set MSComm1 = CreateObject("MSCOMMLib.MSComm") MSComm1.Settings = "9600,n,8,1" MSComm1.CommPort = 4 MSComm1.InBufferCount = 0 ** MSComm1.DTREnable = False** MSComm1.PortOpen = True If Err Then MsgBox "COM" & MSComm1.CommPort & ": not opened, Sorry!" Exit Sub End If End Sub

Sub ArduinoClose() MSComm1.PortOpen = False Set MSComm1 = Nothing End Sub

Testato su ArduinoUno.

Come si fa ad aggiungere questa cosa alle FAQ di Arduino?