Salve a tutti, devo fare un progetto per la scuola che consiste in un braccio robot che scrive delle parole su una lavagna su cui è appoggiato. Ho finito il braccio e il programma per arduino e per controllarlo ho deciso di fare un'interfaccia in VB. Dato che in VB non avevo idea di come si potessero scambiare i dati in seriale ho trovato un programma su internet che metto allegato.(non so se l'ho allegato correttamente non l'ho mai fatto)
In teoria dovrebbe funzionare così:
Arduino dice che è pronto a ricevere delle istruzioni; VB comincia ad inviare dei numeri che significano dei comandi. E questo in teoria.
In realtà succede che VB invia un numero che gli dico io e arduino lo prende e fa tutto quello che deve fare per bene ma quando VB invia il secondo numero arduino non lo riconosce come un istruzione e rimanda indietro "richiesta non valida" (adesso lo vedrete meglio nel codice che imposto qua sotto).
Non so proprio più come fare, dal monitor seriale del programma Arduino funziona alla grande ma quando i dati vengono scambiati con VB si blocca tutto dopo un'istruzione.
Codice Arduino UNO: (semplificato con l'accensione e lo spegnimento di un led in modo che possiate vedere subito quello che succede)
Alla fine di ogni istruzione va messa una \ per dire ad arduino che quella istruzione è finita
codice:
#include <String.h>
int val = 0;
char carattere;
int baudrate = 9600;
String richiesta;
int led = 13; //il pin del led è il 13
void setup() {
pinMode(led, OUTPUT);
Serial.begin(baudrate); //inizializza la seriale
Serial.println("Pronto..."); //invia un messaggio per dire che è pronto
}
void loop() {
if(Serial.available()){
val = Serial.read(); //la variabile integer val diventa un numero ASCII
carattere = val; //Il numero ASCII diventa una lettera
if(val != 92){
richiesta = richiesta + carattere; //le lettere si raggruppano tutte in una parola finché non viene trovata una backslash (numero ASCII 92) e il programma entra nell'IF
}
if(val == 92 || val == 0){
Serial.println(richiesta);
if(richiesta == "acceso"){ //qui se la scritta era "acceso\" accende il led
digitalWrite(led, HIGH);
Serial.println("Ho acceso il LED");
}else if(richiesta == "spento"){ //qui se la scritta era "spento\" spegne il led
digitalWrite(led, LOW);
Serial.println("Ho spento il LED");
}else{
Serial.println("Richiesta non valida"); //se non si trovano scritte uguali il programma fa ritornare un errore
}
richiesta = "";
val = 0;
carattere = ' ';
}
}
}
Spero che mi possiate aiutare.
Ringrazio in anticipo.
rs232_vb2010(1).zip