Buongiorno.
Spero di essere nella sezione giusta.
Dopo tanto tempo sono tornato, sempre con lo stesso progetto (sono lento ma potendolo sviluppare solo nei ritagli di tempo e di quelli ne ho pochi ci metto un po ).
Grazie ai consigli di gbp01, ilguarda e andreaber sono riuscito a realizzare il progetto. Ha ancora qualche problema di linearità dovuto principalmente a operazionali (non proprio lineari) e alimentazione che devo rivedere. Ma funziona.
Realizzato il programma adesso voglio interfacciarlo con il computer tramite un programma sviluppato in VB6 (è vecchio, obsoleto non più gestito ma è l'unico che conosco a grandi linee dalla scuola).
Il programma funziona e la sequenza con cui comunico è la seguente:
- VB6 invia Char(1)
- Arduino risponde con Char(5)
- VB6 invia Char(2)
- Arduino invia ciclicamente Char(6) ogni volta che finisce un ciclo di letture analogiche (circa ogni 1,5 secondi)
- VB6 intercetta questo invio seriale e manda dei codici per avere le variabili interessate (es : VB6 invia Char(64) e Arduino reinvia la variabile1 e via discorrendo).
- VB6 finite le richieste invia Char(126) per dire che non ha bisogno di altri valori e il ciclo ricomincia dal punto 4.
- Per chiudere la comunicazione invio Char(127)
Il tutto funziona senza problemi ma quello che vorrei, essendo un programma campione, è poter avere dei parametri diversi sulla seriale lato VB6 e se sono sbagliati semplicemente non comunica con Arduino. Solo che se invio i dati magari con un baudrate diverso da 9600 Arduino non risponde ma se rimetto il baudrate corretto non risponde più e devo resettarlo per farlo comunicare e non capisco perchè. Mi manca qualche cosa o probabilmente non ricordo qualche cosa.
Il codice che uso lato Arduino è questo:
byte data = 255; // carattere iniziale della variabile data (serve per dialogare con VB6)
boolean b_accettazione = false;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
//qui parte il programma e inizio a leggere il valore che mi arriva dalla seriale
if ((data == 255) && (b_accettazione == false)){
data = Serial.read(); // leggo dalla seriale
}
// se il dato che mi arriva dalla seriale è uguale a char(1) invio al computer il valore char(5) per dire che ci sono e ho accettato la richiesta di essere collegato
if ((data == char(1)) && (b_accettazione == false)){
Serial.println(accettazione);
//Serial.flush(); //non so se metterlo prima della lettura
b_accettazione = true; //da mettere a false alla fine
}
}
Non ho messo il codice per intero perchè sono circa 600 righe ma lui si ferma proprio all'inizio. Non vedo risposte dal LED TX della scheda.
Stò usando un Arduino mega 2560 per le prove e non un Arduino Due che ho sul progetto e funziona.
Quando rimetto i valori corretti lato VB6, dopo aver tentato la comunicazione con i dati errati, Arduino non risponde più e devo resettarlo mentre io vorrei che semplicemente non comunica e basta ma se poi lo chiamo con i valori della seriale giusti torni a comunicare senza resettarlo.
Spero di essermi spiegato e di non essere stato troppo lungo.