Diferencia entre revisiones de «Tip 4»
De ArduWiki
(Página creada con «== Descripción == Como detectar el falco de subida (RISSING) de un pulsador, rele o dispositivo mecánico. == Código 1 == Con este código detectamos el flanco de subida...») |
(→Código 2) |
||
(No se muestran 3 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
== Descripción == | == Descripción == | ||
− | Como detectar el | + | Como detectar el flanco de subida (RISSING) de un pulsador, rele o dispositivo con contacto mecánico. |
+ | |||
+ | {{Tip|Este método soluciona el efecto de rebote.}} | ||
== Código 1 == | == Código 1 == | ||
Línea 22: | Línea 24: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | {{Nota|Veras que el | + | {{Nota|Veras que solo aparece una vez el mensaje de deteccion por cada pulsacion sin importar e tiempo que dure dicha pulsacion.}} |
== Código 2 == | == Código 2 == | ||
Línea 44: | Línea 46: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | {{Nota| | + | {{Nota|El unico cambio es en la condicion del if().}} |
+ | |||
+ | == Código 3 == | ||
+ | En este ejemplo tenemos que detectar el numero de pulsaciones de un boton durante medio seg y de acuerdo a eso prender un LED distinto durante 3 seg adicionales. | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
+ | bool valor,anterior,LED; | ||
+ | unsigned long t1; | ||
+ | byte n; | ||
+ | |||
+ | void setup(){ | ||
+ | pinMode(2, OUTPUT); | ||
+ | pinMode(3, OUTPUT); | ||
+ | pinMode(4, OUTPUT); | ||
+ | ... | ||
+ | pinMode(12, INPUT_PULLUP); | ||
+ | } | ||
+ | |||
+ | void loop(){ | ||
+ | valor = digitalRead(12); | ||
+ | if (!valor && anterior && !LED){ | ||
+ | if (n == 0){ | ||
+ | t1 = millis(); | ||
+ | } | ||
+ | n++; | ||
+ | } | ||
+ | anterior = valor; | ||
+ | //Detiene lectura en medio seg | ||
+ | if (millis() - t1 > 500 && n > 0 && !LED){ | ||
+ | LED = true; | ||
+ | } | ||
+ | //Acciona LED | ||
+ | if (LED){ | ||
+ | digitalWrite(n+1, HIGH); | ||
+ | } | ||
+ | //Apagar todo luego de 3 seg | ||
+ | if (millis() - t1 > 3500 && LED){ | ||
+ | LED = false; | ||
+ | digitalWrite(n+1, LOW); | ||
+ | n = 0; | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
== Vea también == | == Vea también == |
Revisión actual del 23:22 16 dic 2019
Descripción
Como detectar el flanco de subida (RISSING) de un pulsador, rele o dispositivo con contacto mecánico.
Tip: Este método soluciona el efecto de rebote.
Código 1
Con este código detectamos el flanco de subida (RISSING) de un contacto mecánico con una conexión en pulldown.
bool actual,anterior;
void setup(){
Serial.begin(9600);
pinMode(2, INPUT);
}
void loop(){
actual = digitalRead(2);
if (actual && !anterior){
Serial.println("Flanco de subida detectado");
}
anterior = actual;
}
Nota: Veras que solo aparece una vez el mensaje de deteccion por cada pulsacion sin importar e tiempo que dure dicha pulsacion.
Código 2
Con este código detectamos el flanco de bajada (FALING) de un contacto mecánico con una conexión en pullup.
bool actual,anterior;
void setup(){
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
}
void loop(){
actual = digitalRead(2);
if (!actual && anterior){
Serial.println("Flanco de bajada detectado");
}
anterior = actual;
}
Nota: El unico cambio es en la condicion del if().
Código 3
En este ejemplo tenemos que detectar el numero de pulsaciones de un boton durante medio seg y de acuerdo a eso prender un LED distinto durante 3 seg adicionales.
bool valor,anterior,LED;
unsigned long t1;
byte n;
void setup(){
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
...
pinMode(12, INPUT_PULLUP);
}
void loop(){
valor = digitalRead(12);
if (!valor && anterior && !LED){
if (n == 0){
t1 = millis();
}
n++;
}
anterior = valor;
//Detiene lectura en medio seg
if (millis() - t1 > 500 && n > 0 && !LED){
LED = true;
}
//Acciona LED
if (LED){
digitalWrite(n+1, HIGH);
}
//Apagar todo luego de 3 seg
if (millis() - t1 > 3500 && LED){
LED = false;
digitalWrite(n+1, LOW);
n = 0;
}
}
Vea también