problema connessione Arduino Mega 2560 < Firmata > VisualBasic 2010

@Giacomo, uso Windows XP è ho già mandato dati da serial monitor ad Arduino Uno (IDE 1.0.5), non in maniera intensiva, ma non mi ha mai dato questi problemi. Con la Mega mi sembra non ho provato.

ho provato anche con un Arduino UNO nuovo ma niente da fare =(

@nid69ita

io sto usando l'IDE 1.0.5-r2 e mando i comandi direttamente dalla seriale, ma anche andando piano (distanza di qualche secondo) mi si impalla tutto.

ho provato anche a copiare lo sketch di Guglielmo così com'è ma nulla.

P.s. Non è che c'è qualche problema con Java? :relaxed:

Giacomo.

Se voi, pubblica lo sketch, e provo anche io con la mia Arduino Uno e Windows XP.
Quali valori bisogna mandare da monitor seriale?

Grazie mille, così mi tolgo il dubbio e capisco se il problema è nel mio PC

ecco lo sketch:

int pH1;
int pH2;
int DO;
int Co2 = 8;
int O2 = 12;

char iniezione;

void setup(){
   Serial.begin(57600);
   pinMode(Co2, OUTPUT);
   pinMode(O2, OUTPUT);
}

void loop(){
   pH1 = analogRead(A1);
   Serial.println(pH1);
   delay(50);
   Serial.flush();
   
   pH2 = analogRead(A0);
   Serial.println(pH2);
   delay(50);
   Serial.flush();
   
   DO = analogRead(A2);
   Serial.println(DO);
   delay(50);
   Serial.flush();
 
   if (Serial.available() > 0){
      iniezione = Serial.read();
      switch (iniezione) {
      case '1':
         digitalWrite(Co2, HIGH);
         digitalWrite(O2, LOW);
         break;
      case '2':
         digitalWrite(Co2, LOW);
         digitalWrite(O2, HIGH);
         break;
      case '0':
         digitalWrite(Co2, LOW);
         digitalWrite(O2, LOW);
         break;
      default:
         break;
      }
      
      while (Serial.available()){
         Serial.read();
         delay(1);
      }
   }
}

bisogna mandare i valori '1', '2' o '0' per attivare o meno le uscite 8 e 12.

Giacomo.

Fatto. A me non sembra dare problemi. Io però non ho nulla di collegato agli analogici.
Su 8 e 12 ho messo 2 led e funzionano.
P.S. uso la 1.0.5 non credo r2 però.
Allego immagine del monitor seriale prima di inviare 2

Se vi può essere utile, una volta caricato lo sketch, sotto la scritta "Caricamento terminato"

mi esce questa scritta

Dimensione del file binario dello sketch: 5.110 bytes (su un massimo di 258.048 bytes)
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer

Vi dice qualcosa.

Grazie ancora,

Giacomo

Banalmente, hai provato a cambiare il cavo USB ?

Ho provato anche con versione 1.5.5 nessun problema.
Quegli errori non mi dicono nulla ma a me non li da.

provo subito :wink:

Allora

ho cambiato il Cavo

cambiato PC

cambiato Arduino

cambiato IDE (1.0.5, 1.0.5-r2, 1.5.6-r2)

e nulla da fare.

LA cosa più curiosa è che mettendo tutto su un Mac va tutto bene, ma non posso usare VB sul Mac

Se hai qualche altro dispositivo che funziona in serale collegalo al PC e fai un test con la console seriale dell'IDE, giusto per vedere se non è un problema dell'IDE.

Oppure invece di usare il terminale seriale dell'IDE usa Hyperterminal o questo Terminal.

Fra l'altro il terminale dell'IDE non manda nulla finché non si preme il return mentre quello che ho linkato manda il carattere immediatamente.

@ zoomx.

ho provato a fare come dici tu (credo :~).

Ho scaricato il terminal che mi hai postato. Su l'arcuino nuovo con cavo nuovo ho caricato uno sketch come quello postato in precedenza ma togliendo la parte di read, mettendo solo la parte di ricezione, tramite il mac.

int avanti = 8;
int indietro = 12;

char movimento;

void setup(){
 Serial.begin(9600);
 pinMode(avanti, OUTPUT);
 pinMode(indietro, OUTPUT);
 
 
}

void loop(){
  
  if (Serial.available() > 0){
    movimento = Serial.read();
    switch(movimento){
    case '1':
    digitalWrite(avanti, HIGH);
    digitalWrite(indietro, LOW);
    break;
    
    case '2':
    digitalWrite(avanti, LOW);
    digitalWrite(indietro, HIGH);
    break;
    
    case '3':
    digitalWrite(avanti, LOW);
    digitalWrite(indietro, LOW);
    break;
    }
    while (Serial.available()){
      Serial.read();
      delay(1);
    }
  }
}

testato e funziona perfettamente. Poi ho spostato il cavo USB dal mac al PC, aperto il programma, scelto la porta COM4, premuto "Connect" e dato gli ordini dalla text box con di fianco scritto "+CR e -> Send". Ho messo nello sketch il baou rate a 9600 e lasciato nel terminal 9600 senza toccare altro. Come al solito mi prende i primi 3 o 4 comandi e poi si impianta e devo fare Citrl+alt+canc. Una cosa: a me non li manda subito, ma devo premere invio e poi cancellare il carattere prima di mettere quello nuovo, che poi mi mette tutto nel box sotto.

Un'altra cosa: ma è normale che il led 13 rimanga sempre acceso a meno che io non gli dica di spegnersi?

Per collegare altri dispositivi alla seriale per vedere se funziona, non mi viene in mente nulla. Mi consigli di provare con altro?

Grazie mille per i consigli.

Giacomo

Attenzione! 8) :slight_smile:

mandando i comandi da Hyperterminal di Windows tutto funziona quasi perfettamente (forse era lui che mandava i carateri direttamente :~). si blocca solo quando mando comandi molto velocemente (ora sto usando 9600 baud)

Cosa vuol dire?

GiacomoSam:
...e dato gli ordini dalla text box con di fianco scritto "+CR e -> Send". Ho messo nello sketch il baou rate a 9600 e lasciato nel terminal 9600 senza toccare altro.

Ma anche da monitor seriale fai aggiungere CR ? Perchè nelle mie prove (vedi la mia foto) non aggiungo nulla, invio il carattere puro senza aggiunte. Tu nel tuo codice dopo lo switch() hai un ulteriore ciclo di lettura.

E' chiaro che perde caratteri!

Hai considerato il mio post in questo argomento? E' il 5 messaggio nella seconda pagina

GiacomoSam:
premuto "Connect" e dato gli ordini dalla text box con di fianco scritto "+CR e -> Send". Ho messo nello sketch il baou rate a 9600 e lasciato nel terminal 9600 senza toccare altro. Come al solito mi prende i primi 3 o 4 comandi e poi si impianta e devo fare Citrl+alt+canc. Una cosa: a me non li manda subito, ma devo premere invio e poi cancellare il carattere prima di mettere quello nuovo, che poi mi mette tutto nel box sotto.

Devi scrivere direttamente nel box sotto dove poi ti appaiono i caratteri, il box sopra che hai usato serve proprio a comporre una stringa prima di mandarla, come succede con l'IDE. Non devi mettere la spunta su +CR in quanto il tuo programma su arduino non si aspetta alcun CR.

@icio
In effetti sembrerebbe il problema che hai descritto ma non si capisce come mai si pianti invece di ignorare i caratteri.

GiacomoSam,
ma tu quanti caratteri alla volta mandi?

Dipende da come è gestito il flusso in ingresso da arduino, non scarta il CR ma nemmeno lo elabora più quando la coda è terminata , probabilmente e dico probabilmente durante l'elaborazione del messaggio viene toccato qualche registro dell'USART

Mi quoto. Magari perderà anche un carattere ma a me (anche con +CR) non si inchioda Windows XP ne l'IDE

Allora:

@nid69ita:

io mandavo semplicemente un '1', poi dopo qualche secondo un '2' e così via, se nessun CR o altro, credo come hai fatto tu.

io mando un solo carattere alla volta, almeno per ora, ma poi dovrò marne una decina, ma visto che non funzionava ha tolto tutto dallo sketch e provato solo a mettere i comandi in ricezione.

Comunque ho chiamato il tecnico del dipartimento che ha portato via il PC incriminato. Ha detto che lo formatta, gli mette un po più di dam e se riesce installa Windows 7 8). Anche lui non si capacitava di questi problemi

Spero per settimana prossima di avere di nuovo il PC e di arrivare a un punto.

Ringrazio tutti voi per l'aiuto e la pazienza

Giacomo

@ icio

Purtoppo il mio PC non riesce ad aprire il video (provo ad aprirlo con VLC, può andare bene? :roll_eyes:).

E sinceramente non ho capito bene: dovrei collegare il pin 2 a un ingresso di Arduino?

quando arrivo a casa provo ad aprire il file con il computer di casa.

Grazie

Giacomo