Go Down

Topic: problema connessione Arduino Mega 2560 < Firmata > VisualBasic 2010 (Read 21614 times) previous topic - next topic

gpb01

... mi sono permesso di aggiustartelo ... ottimizzandolo un po' ...

Code: [Select]

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


Guglielmo

P.S. : Ricordati sempre di usare da menu dell'IDE ... Tools -> Auto Format ... che ti sistema le indentature del codice ;)
Search is Your friend ... or I am Your enemy !

GiacomoSam

Credo proprio di si

l'ho scaricata dal sito di Arduino qualche mese fa.

gpb01


Credo proprio di si ...


... beh ... fai presto a verificarlo ... è scritto in testa all'IDE ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

GiacomoSam

Ora sembra che funzioni perfettamente  :smiley-surprise: almeno mettendo i dati direttamente dalla seriale ;)
Sulla testa dell'IDE c'era scritto solo 1.0.5 e quindi ho cancellato tutto (anche Visual Basic però  :smiley-eek:) e rimesso tutto facendo attenzione che sia r2. Ho anche usato il switch/case che mi hai proposto. Sembra che vada alla grande. Ti farò sapere se va tutto perfettamente anche con VB.

Grazie mille del preziosissimo aiuto.

Giacomo.


icio

Il problema è che su arduino UNO si sono dimenticati di mettere il controllo di flusso hardware, in arduino2009 non c'era questo problema perchè il segnale  DSR è disponibile sul pin2 di X3,  basta collegare questo pin ad un qualsiasi pin di meg328  così quando arduino è impegnato abilita l'ingresso DSR per comunicare al PC l'interruzione del flusso.

La cosa identica l'ho fatta quì:   http://www.dmxpassion.altervista.org/pg015.html
vedi lo schema in PACK LNCNC

E' comunque possibile variare il firmware su mega16u2 aggiungendo le funzioni per la linea DSR,  non sò se è già disponibile in rete

zoomx

@GiacomoSam
l'errore "Una periferica collegata al sistema non è in funzione." sembrerebbe indicare che l'Arduino si sia bloccato che che quindi la COM corrispondente non funzioni più. Puoi controllare da gestione dispositivi se sparisce. Può anche essere colpa dell'USB sul PC, magari non fa bene contatto e si scollega. A me capita con un portatile.
Il secondo messaggio di errore che hai postato riguarda invece l'IDE e non il VB. Forse indica la stessa cosa.

Io avrei scritto lo sketch diversamente. Avrei raccolto tutti i dati analogici e digitali, li avrei stampati tutti in una volta (o in due se supero o mi avvicino ai 64 caratteri del buffer), avrei atteso un po', poi avrei controllato l'arrivo di comandi da seriale ed eventualmente li avrei eseguiti. Infine avrei riiniziato il ciclo.

@Guglielmo gpb01
La storia della seriale che lavora un carattere alla volta non l'ho capita.
Nelle comunicazioni Arduino->PC mando un stringa alla volta e su PC la ricevo senza problemi.
La differenza è nelle comunicazioni PC->Arduino dove, se supero il carattere, devo inventarmi qualcosa.
Potrebbe anche bastare di aspettare che nel buffer ci sia il numero di caratteri attesi ma invece mi son implementato una routine che aspetta un carattere terminatore. Intendevi questo caso?

GiacomoSam

Ok. quindi dici di accumulare  dati in una stringa con tutti i dati (analogici e digitali) e poi mandarli tutti per volta e poi mandarli via seriale al PC?
devo fare un array o va bene anche una semplice print.ln per ogni dato?
e per mandarle dal PC?

Quello che mi ha mandato Guglielmo sembra molto efficace e mettendo chat al posto di INT risparmio molto nella velocità mi sembra di capire. Ora appena metto VB (non so cosa ho combinato con internet) vedo se va tutto bene.

Anche io avevo notato che c'è un qualche problema di connessione tra i due sistemi e mi chiedevo se ci fosse qualche problema di Hardware (tipo contatto USB). Ora controllo un po'. Ho visto che collegando Arduino con un Mac tutto va bene (ma li non ho VB :0).

Grazie,

Giacomo.

gpb01


La storia della seriale che lavora un carattere alla volta non l'ho capita.
Nelle comunicazioni Arduino->PC mando un stringa alla volta e su PC la ricevo senza problemi.


Perché hai la "pappa fatta" da parte della Serial.print() che trasforma lei, i tipi che conosce, in una serie di caratteri ...
... prova a dover trasmettere una "struttura dati" ... poi mi dici come fai ;)


La differenza è nelle comunicazioni PC->Arduino dove, se supero il carattere, devo inventarmi qualcosa. ....


La trasmissione dei dati asincroni lungo una seriale funziona sempre allo stesso modo ...
... l'IDE di Arduino può venirti incontro in tante cose e nascondertene tante altre, ma se non sai ESATTAMENTE come funziona, appena ti allontanerai da Arduino ... avrai i tuoi problemi  ]:D ]:D ]:D

Guglielmo
Search is Your friend ... or I am Your enemy !

zoomx

@GiacomoSan
io suggerivo un approccio ma se già ti va bene quello proposto non c'è bisogno di cambiare, non è che il mio sia meglio.
In caso puoi usare un Array oppure anche una serie di print che alla fine termini con un carattere speciale. Se usi solo Ascii puoi terminare con /n e dal lato VB usare Stringa= SerialPort1.ReadLine() che, se non c'è una stringa che termina con il carattere /n restituisce Nothing altrimenti restituisce la stringa contenente tutte le letture. Devi poi interpretare la stringa.

@Gugliemo
mi è chiaro, adesso.
So quasi esattamente come funziona, con Arduino mi son riavvicinato ai microcontrollori ma mi è capitato di usare ST6 e ST9 qualche annetto fa, in assembler. Ma potevo non saperlo.

GiacomoSam

Rieccomi. Riassumo quello che ho fatto in questi giorni:

ho cambiato PC, vecchio lo stesso e sempre con Windows XP e ho scaricato il software per arduino e caricato lo sketch.

Ma come al solito non funziona. Ovvero quando Arduino deve solo mandare dati tutto va bene, il problema è che quando devo mandare i comandi (lo faccio direttamente digitando i chart dalla serial) si vede che i numeri che manda in seriale rallentano, come se il PC facesse fatica e poi si blocca tutto il PC.  Facendo la Task manager di Windows con citrl+alt+canc mi dice che Java non risponde. Non saprei più cosa fare.

@Icio Non riesco a scaricare il file e non ho capito bene quello che intendi.

Domani proverò a comprare un Arduino UNO (questa volta poi al massimo riprendo un Mega nuovo se vedo che funziona) e vedere se con lui funziona.


GiacomoSam

Un altra cosa

poi quando riapro lo sketch e provo a lanciarlo di nuovo mi dice che la COM3 (a cui è collegato Arduino) è già in uso. Così devo rinstallare i driver di Arduino per poi riprovare.

gpb01

Ricordo che con Win XP c'erano dei problemi ... hai già letto QUI ???

Guglielmo
Search is Your friend ... or I am Your enemy !

GiacomoSam

Si, scelgo anche io il driver manualmente. Ora però su questo computer non mi viene la schermata del driver che non ha passato il logo testing.

Giacomo.

nid69ita

@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.
my name is IGOR, not AIGOR

GiacomoSam

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

Go Up