Vai al contenuto
PLC Forum


Arduino E Vb


SabinoDelia

Messaggi consigliati

Salve a tutti, allora io sto leggendo dei segnali digitali e analogici che mi trasmette arduino con vb

Arduino:

[at] = sarebbe la chiocciola (non so perché mi esce @ )

Serial.print("[at]0#"); Serial.println(temperatura);
delay (200);
y= analogRead(A3);
Serial.print("[at]2#"); Serial.println(y);
delay(200);
y= analogRead(A2);
Serial.print("[at]3#"); Serial.println(y);
delay(200);
y= dht.readHumidity();
Serial.print("[at]4#"); Serial.println(y);
delay(200);
Serial.print("[at]5#"); Serial.println(pressure);
delay(200);
y= digitalRead(3);
Serial.print("[at]6#"); Serial.println(y);
delay(200);
y= digitalRead(4);
Serial.print("[at]7#"); Serial.println(y);
delay(200);
y= digitalRead(5);
Serial.print("[at]8#"); Serial.println(y);
delay(200);
y= digitalRead(6);
Serial.print("[at]9#"); Serial.println(y);
delay(200);
y= digitalRead(7);
Serial.print("[at]10#"); Serial.println(y);
delay(200);
y= digitalRead(8);
Serial.print("[at]11#"); Serial.println(y);
delay(200);
y= digitalRead(9);
Serial.print("[at]12#"); Serial.println(y);
delay(200);
y= digitalRead(10);
Serial.print("[at]13#"); Serial.println(y);
delay(200);

Visual Basic:

Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        Dim str, port, val As String
        str = SerialPort1.ReadLine   ' ricevo [at]x#val
        port = Mid$(str, 2, 1)          ' carattere numero 2, è quale analogico    
        val = Mid$(str, 4)            ' dal carattere 4 c'e' il valore
        Select Case port
            Case "0" : an0 = val
                tempread = an0
            Case "2" : an1 = val
                luxread = an1
            Case "3" : an2 = val
                windread = an2
            Case "4" : an3 = val
                Humidityread = an3
            Case "5" : an4 = val
                pressureread = an4
            Case "6" : an6 = val
                NO = an6
            Case "7" : an7 = val
                O = an7
            Case "8" : an8 = val
                SO = an8
            Case "9" : an9 = val
                S = an9
            Case "10" : an10 = val
                SE = an10
            Case "11" : an11 = val
                Est = an11
            Case "12" : an12 = val
                NE = an12
            Case "13" : an13 = val
                N = an13
        End Select
    End Sub

Perchè fino al case 9 va tutto bene, ma dal dieci in poi (fino a 13) VB non mi mostra i valori? come posso risolvere ?

Grazie a tutti

Modificato: da SabinoDelia
Link al commento
Condividi su altri siti


Semplice perchè in "port" c'è un solo carattere. Prova a visulaizzare ne debug di VB il valore di port

Link al commento
Condividi su altri siti

Scusami Livio, se potresti spiegarti meglio te ne sarei grato, e inoltre il valore port non me lo fa visualizzare in debug

Modificato: da SabinoDelia
Link al commento
Condividi su altri siti

se port e' una stringa composta da un carattere quante cifre puoi visualizzare o memorizzarci?

Una ,o sbaglio ?

Da 0 a 9 , A , B , C , F ..... ma non 10 , 12 , FF , FA

Ti pare ?

Se non te la fa visualizzare nel debug prova a dichiarla come variabile globale fuori da quella routine , in qualche modulo ...non conosco VB

Altra cosa che puoi fare e' verificare i caratteri terminatori della stringa che viene spedita e a quanto e' la soglia del buffer in VB per avere l'evento onComm


la chiocciolina o la lumachina come la chiami tu significa "at"


prova a postare il codice di preparazione della porta seriale dove imposti il baudrate , la soglia di evento in ricezione , e i vari parametri .Cerca di essere piu preciso se vui degli aiuti perche non e' che basta postare un pezzo di codice a caso e pensare che ci siano i maghi .Di solito l'analisi parte dall'inizio di un qualcosa...per giungere alla fine se tutto va bene con la conclusione di poter dire come risolvere la cosa piuttosto che rininciarvi per ovvi motivi


poi se vuoi un consiglio ,per impostare un protocollo di comunicazione tra due dispositivi dovresti lavorare con un buffer di byte riempito a partire dal primo carattere con un carattere che segnala l'inizio del frame , i dati e la fine in modo tale da fare anche delle verifiche

Tu cosi da arduino prima spedisci un codice , poi i dati e dall'altra parte prima vai a vedere che tipo di codice e' arrivato e poi copi i dati , insomma.....

Modificato: da walterword
Link al commento
Condividi su altri siti

anche come dice Giacomo potresti provare, magari sbagli a ritagliare il pezzo di messaggio che vorresti processare ....

Modificato: da walterword
Link al commento
Condividi su altri siti

port non me lo fa visualizzare in debug

Dipende come hai diachiarato port.

Se è una variabile locale la visualizzi solo quando è attiva la funzione in cui l'hai dichiarata. Se è globale la visualizzi sempre.

Che messaggio di da il debug di VB in corrispondenza della variabile?

Poi Walter ti ha spiegato cosa riceverai, riceverai probabilmente una cifra esadecimale,quindi anche il valore di comparazione dovrà essere esadecimale. Da 0 a 9 decimale ed esadecimale conicidono, quindi lo switch funziona da 10 in poi i 2 valori non coincidono più e loswitch non funziona.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...