Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Problema con lo scambio di dati in seriale tra Arduino UNO e VisualBasic2010

    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Probabilmente nella stringa ci finisce un carattere non alfanumerico ...

    Nel programma Arduino prova ad inserire un controllo che NON accetti caratteri compresi tra 1 e 31
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    523
    scusa se mi permetto una risposta, pur non conoscendo arduino,
    credo che il problema sia nei parametri della connessione seriale,
    ho guardato il codice che hai allegato dove trovo la sub "btnConnetti_Click" che imposta i valori della porta seriale
    ma non la richiami mai nel codice, in compenso richiami la sub "btnConnetti.PerformClick" che non mi risulta essere presente
    sto prendendo io una cantonata o c'è qualcosa di strano ?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ha detto che la prima volta funziona. Quindi si deve presupporre che comunichi correttamente.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    523
    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"
    io interpreto che il primo carattere arriva bene, il secondo no ....
    richiesta = richiesta + carattere;
    ed il comando è un insieme successivo di caratteri
    ma le cantonate sono dietro l'angolo ...
    Ultima modifica di marino51; 29-12-2014 a 00:19

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    In effetti lui parla di un numero inviato per eseguire un comando ma poi riceve una stringa ... Attendiamo chiarimenti
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    523
    codice:
    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
    Il comportamento della trasmissione seriale lo si legge nelle righe di codice postate

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    A giudicare da quelle righe, che avevo letto, il comando è una parola formata dai singoli caratteri trasmessi e non da un numero.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.