En el código se encuentra una función antirebote para cuando se presiona el botón, la señal pueda ser detectada correctamente.
Código para Arduino:
const int boton = 4; // Botón conectado al pin 4
const int tiempoantirebote = 10;
int cuenta = 0; // lleva la cuenta de cuantas veces se presiona el botón
int estadoboton;
int estadobotonanterior;
//-----inicio------------función antirebote----------
boolean antirebote(int pin){
int contador = 0;
boolean estado; // Guarda el estado del boton
boolean estadoanterior; // Guarda el último estado del botón
do {
estado = digitalRead(pin);
if (estado != estadoanterior){ //comparamos el estado actual con el anterior
contador = 0; // Reiniciamos el contador
estadoanterior = estado;
}
else{
contador = contador + 1;
}
delay(1);
} while(contador < tiempoantirebote);
return estado;
}
//-----fin------------función antirebote----------
void setup() {
Serial.begin(9600); //Inicia la comunicación serial
pinMode(boton, INPUT); //Declara el boton como entrada
}
void loop() {
estadoboton = digitalRead(boton); // leemos el estado del boton
if(estadoboton != estadobotonanterior){ // si hay cambio con respecto al estado anterior
if(antirebote(boton)){ /// verificamos si está presionado y si lo está,
Serial.print("Hola");
delay(1000);
}
}
estadobotonanterior = estadoboton; // guarda el estado del boton
}
Código para Visual Basic 6:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form_Load()
MSComm1.PortOpen = True
Sleep 2000
End Sub
Private Sub MSComm1_OnComm()
Dim ReceivedData As String
ReceivedData = MSComm1.Input
Text1.Text = Text1.Text & ReceivedData
Label1.Caption = ReceivedData
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub
Private Sub Text1_Change()
Text1.SelStart = Len(Text1.Text)
Text1.SelLength = 0
End Sub
Private Sub Timer1_Timer()
Label1.Caption = MSComm1.Input
End Sub
Label1 recibe el mensaje Hola, que aparece en pantalla.