Hola a todos! Estoy practicando la comunicación de Arduino con el portátil y me he decidido a hacer un programilla en visual basic 6.0 en el que muestro la temperatura que leo con Arduino desde la entrada A0 con un sensor de temperatura tipo termistor de 1K (Las medidas no son exactas porque tengo que buscar los valores de las resistencias para las formulas, pero mas o menos es casi la temperatura buena). Bueno el problema no es ese, el problema que tengo es que además estoy probando a encender y apagar el led 13 desde el visual basic, para encenderlo funciona bien, pero para apagarlo tengo que hacer varias pulsaciones sobre el botón, os pongo todo y a ver si me podeis ayudar.
Aquí os pongo el codigo para el Arduino:
#include <stdio.h>
#include <math.h>
float Vin=5; //Voltaje Entrada
float Raux=1000; //Resistencia auxiliar para calcular la temperatura en ohm
float R0=1000; //Resistencia ntc en ohm
float Ti=293.15; //Temperatura a 25ºC en grados Kelvin
float Vout=0.0; // [V] Tension de salida del divisor de tension
float Rout=0.0; // [ohm] Resistencia de la NTC
float T1=273; // [K] Temperatura a 0ºC en grados Kelvin
float T2=373; // [K] Temperatura a 100ºC en grados Kelvin
float RT1=1975; // [ohms] Resistencia a 0ºC
float RT2=215; // [ohms] Resistencia a 100ºC
float beta=0.0; // [K] parametro Beta
float Rinf=0.0; // [ohm] Parametro Rinf
float TempK=0.0; // [K] Temperatura de salida en kelvin
float TempC=0.0; // [ºC] Temperatura de salida en grados Centigrados
void setup() {
//Definimos la velocidad de transferencia a 9600 baudios
pinMode(13,OUTPUT);
Serial.begin(9600);
beta=(log(RT1/RT2))/((1/T1)-(1/T2));
Rinf=R0*exp(-beta/Ti);
}
void loop() {
Vout=Vin*((float)(analogRead(0))/1024.0);
Rout=(Raux*Vout/(Vin-Vout));
TempK=(beta/log(Rout/Rinf));
TempC=TempK-273.15;
Serial.println(TempC); //Mandamos el valor obtenido por el sensor analogico a traves del puerto serie
if (Serial.read()== '1')
{
digitalWrite(13,HIGH);
}
else if (Serial.read()== '2')
{
digitalWrite(13,LOW);
}
delay(1000);
}
Aquí os pongo una imagen del programa:
Y este es el programa en visual basic:
Option Explicit
Dim Temperatura As Double
Private Sub cmdConectar_Click()
Serie.PortOpen = True
Timer1.Enabled = True
cmdON.Enabled = True
cmdOFF.Enabled = True
End Sub
Private Sub cmdDesconectar_Click()
Timer1.Enabled = False
Serie.PortOpen = False
End Sub
Private Sub cmdOFF_Click()
Serie.Output = "2"
End Sub
Private Sub cmdON_Click()
Serie.Output = "1"
End Sub
Private Sub Timer1_Timer()
Temperatura = Val(Serie.Input)
If Temperatura <> 0 Then
txtTemp.Text = Temperatura
If Temperatura < txtMin.Text Then
txtMin.Text = Temperatura
ElseIf Temperatura > txtMax.Text Then
txtMax.Text = Temperatura
End If
End If
End Sub