simuffa Inserita: 15 febbraio 2015 Segnala Inserita: 15 febbraio 2015 Public Class Form1 Dim an0, an1, an2 As String Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load SerialPort1.Close() SerialPort1.PortName = "COM3" SerialPort1.Open() End Sub 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" : Label0.Text = val Case "1" : Label1.Text = val Case "2" : Label2.Text = val End Select End Sub End Class
SabinoDelia Inserita: 15 febbraio 2015 Autore Segnala Inserita: 15 febbraio 2015 A ok non avevo capito cosa intendevi . quindi così facendo si dovrebbe ridurre il fattore del ritardo ?
simuffa Inserita: 15 febbraio 2015 Segnala Inserita: 15 febbraio 2015 così appena riceve qualcosa lo dovrebbe far vedere
Livio Orsini Inserita: 15 febbraio 2015 Segnala Inserita: 15 febbraio 2015 Ma forse il problema è il rinfresco delle lables che richiama a tempo con il timer, scrivendole come hai esemplificato tu dovrebbe eliminare il ritardo
simuffa Inserita: 15 febbraio 2015 Segnala Inserita: 15 febbraio 2015 io fossi in te i tre valori in arduino li concatenerei e farei un unico println da seriale, con vb riceverei in una volta tutti i valori e li suddividerei nelle label.
SabinoDelia Inserita: 15 febbraio 2015 Autore Segnala Inserita: 15 febbraio 2015 E come si fa ? sia con Arduino che con VB? non ne ho idea
SabinoDelia Inserita: 15 febbraio 2015 Autore Segnala Inserita: 15 febbraio 2015 (modificato) Ho risolto, ora la visualizzazione si può dire che è immediata ho aggiunto un ritardo ad ogni trasmissione int y; long previousMillis = 0; long interval = 1000; //intervallo di tempo in millisecondi // in questo caso trasmette ogni secondo void setup() { Serial.begin(9600); } void loop() { y= analogRead(A0); Serial.print("[at]0#"); Serial.println(y); delay (200); y= analogRead(A1); Serial.print("[at]1#"); Serial.println(y); delay(200); y= analogRead(A2); Serial.print("[at]2#"); Serial.println(y); delay(200); } Modificato: 15 febbraio 2015 da SabinoDelia
simuffa Inserita: 15 febbraio 2015 Segnala Inserita: 15 febbraio 2015 int y; string valori; long previousMillis = 0; long interval = 1000; void setup() { Serial.begin(9600); } void loop() { valori=analogRead(A0)+","+analogRead(A1)+","+analogRead(A2); Serial.println(valori); delay(500); } mentre in visual basic dividi la stringa con substring se hai risolto meglio
SabinoDelia Inserita: 15 febbraio 2015 Autore Segnala Inserita: 15 febbraio 2015 (modificato) Ora ho solo questo problema: #17 ho un termometro con Arduino e l' ho collegato con Visual Basic che mi legge la temperatura su un Label. Funziona bene solo che vorrei che quando la temperatura scende al di sotto dei 3°C nel Label4 mi deve scrivere "Allerta Ghiaccio" Modificato: 15 febbraio 2015 da SabinoDelia
simuffa Inserita: 15 febbraio 2015 Segnala Inserita: 15 febbraio 2015 supponiamo che la string analogic contenga -23°C potresti risolvere così If Integer.Parse(analogic.Replace("°C","")) < 3 Then Label4.text = "Allerta Ghiaccio" End If mi scuso se ho sbagliato la sintassi, ma ora non ho VB per provare e sto facendo a mente
simuffa Inserita: 15 febbraio 2015 Segnala Inserita: 15 febbraio 2015 ops manca anche l'else che cancella la label altrimenti resta la scritta anche se l'allerta non c'è più
walterword Inserita: 15 febbraio 2015 Segnala Inserita: 15 febbraio 2015 se hai piu forms di visualizzazione devi implementare un evento e delegato oppure un design pattern Observer . Nellevento comm della seriale di arrivano i dati , li converti , li processi e poi invochi gli update dei vari form di visualizzazione Se invece il form di visualizzazione e' quello di ricezione allora fai i refresh con textxbox[nome].caption=dato.toString()
SabinoDelia Inserita: 16 febbraio 2015 Autore Segnala Inserita: 16 febbraio 2015 Ho risolto così: Public Class Form1 Dim analogic As String Dim analogic2 As Integer If analogic2 < 300 Then Label4.Text = "Allerta Ghiaccio" Else Label4.Text = "" End If Ora funziona Adesso mi servirebbe trovare il valore massimo e il valore minimo nella variabile analogic2 come faccio ?
simuffa Inserita: 16 febbraio 2015 Segnala Inserita: 16 febbraio 2015 ahah non capisco come faccia a funzionare e cosa ci sia in analogic2 comunque se per te va bene, va bene anche per me per il minimo e il massimo: confronti il valore attuale col valore minimo [massimo] memorizzato, inizializzi le variabili minimo a 1000°C e massimo a -1000°C così la prima volta vengono sovrascritti se il valore della variabile analogica è minore [maggiore] del minimo [massimo] sostituisci il valore nelle variabili
SabinoDelia Inserita: 16 febbraio 2015 Autore Segnala Inserita: 16 febbraio 2015 scusami ma non ho capito, io devo: trovare il valore massimo e il valore minimo registrato ogni 24h in una variabile integer (analogic2) e scriverlo in label
simuffa Inserita: 16 febbraio 2015 Segnala Inserita: 16 febbraio 2015 ma sei sicuro che l'allerta ghiaccio funzioni? per me no, o almeno manca qualcosa crei due variabili, massimo e minimo e le inizializzi ad un valore che non raggiungeranno mai (ad esempio massimo a -1000°C) in modo che vengano sovrascritte il primo ciclo se il valore attuale è maggiore del massimo salvato metti il valore attuale nel massimo, altrimenti nulla. se il valore attuale è minore del minimo metti il valore nel minimo. se vuoi evitare di inizializzare le variabili con valori assurdi, puoi, il primo ciclo mettere il valore attuale di temperatura in massimo e minimo per scriverlo in label non è il problema credo
SabinoDelia Inserita: 16 febbraio 2015 Autore Segnala Inserita: 16 febbraio 2015 l' allerta ghiaccio funziona per quanto riguarda max e min me lo deve resettare ogni 24h. se potresti farmi un esempio ?
simuffa Inserita: 16 febbraio 2015 Segnala Inserita: 16 febbraio 2015 If max < analogic2 Then max = analogic2 End If If min > analogic2 Then min = analogic2 End If LabelMax.Text = max.ToString() + "°C" LabelMin.Text = min.ToString() + "°C" per il reset e per il primo avvio basterà mettere max = min = analogic2
simuffa Inserita: 16 febbraio 2015 Segnala Inserita: 16 febbraio 2015 l'istruzione sotto la deve fare solo la prima volta e ogni giorno. Non posso dirti perché non funziona se non mi fai vedere come l'hai scritto
SabinoDelia Inserita: 16 febbraio 2015 Autore Segnala Inserita: 16 febbraio 2015 Hai ragione ! La minima non mi funziona. Imports System.IO.Ports.SerialPort Public Class Form1 Dim analogic As String Dim analogic2 As Integer Private Property max As Integer Private Property min As Integer Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load SerialPort1.Close() SerialPort1.PortName = "COM3" SerialPort1.Open() End Sub Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived analogic = SerialPort1.ReadLine analogic2 = SerialPort1.ReadLine End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick Label1.Text = analogic Label3.Text = "°C" If analogic2 < 300 Then Label4.Text = "Allerta Ghiaccio" Else Label4.Text = "" End If If max < analogic2 Then max = analogic2 End If If min > analogic2 Then min = analogic2 End If Label5.Text = max.ToString() + "°C" Label6.Text = min.ToString() + "°C" End Sub Private Sub Label5_Click(sender As Object, e As EventArgs) Handles Label5.Click End Sub End Class
simuffa Inserita: 16 febbraio 2015 Segnala Inserita: 16 febbraio 2015 (modificato) dentro form load metti max=-1000 min=1000 al primo dato ricevuto vanno a posto, se vuoi fare qualcosa di più complesso (senza i valori 1000.. fammi sapere) il 300 comunque mi suona strano Modificato: 16 febbraio 2015 da simuffa
SabinoDelia Inserita: 16 febbraio 2015 Autore Segnala Inserita: 16 febbraio 2015 ancora niente il valore min non va
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora