Go Down

Topic: Flanco de subida [SOLUCIONADO] (Read 4 times) previous topic - next topic

Dystrom

Mar 15, 2012, 05:07 pm Last Edit: Mar 21, 2012, 07:50 am by dystrom Reason: 1
Alguien puede facilitarme algun ejemplo de como hacer un flanco de subida??

Tengo un arduino UNO con ethernet shield, quiero activar un led durante 2 segundos, para activar este led puedo hacerlo desde un pulsador o desde la web, el problema es que quiero que si se deja pulsado cualquiera de ellos no repita el ciclo sino que espere a estar desactivado y vuelto a activar, se que para algunos es una chorrada o debe ser super sencillo pero me he atascado aqui y por mas pruebas que hago no encuentro la solucion. Estoy acostumbrado a la programacion de PLC´s pero el tema de programas tipo C no lo tengo muy por la mano. Gracias de antemano.



Cheyenne

Pseudocódigo rápido:

EstadoActual = Entrada
Si EstadoActual = 1 y EstadoAnterior = 0 ejecutar acción
EstadoAnterior = EstadoActual

Dystrom

#2
Mar 15, 2012, 07:14 pm Last Edit: Mar 15, 2012, 07:18 pm by dystrom Reason: 1

Pseudocódigo rápido:

EstadoActual = Entrada
Si EstadoActual = 1 y EstadoAnterior = 0 ejecutar acción
EstadoAnterior = EstadoActual


Gracias Cheyenne, pero cuando EstadoAnterior cambia de estado??, ya que si no el led queda encendido de por vida.

Este es el codigo que he probado según tu ejemplo:

const int pulsador = 2;     // Pulsador
const int led =  13;      // LED

// variables:
int EstadoActual = 0;
int EstadoAnterior = 0;
int cnt = 0;

void setup() {
 pinMode(led, OUTPUT);      
 pinMode(pulsador, INPUT);    
}

void loop(){
 EstadoActual = digitalRead(pulsador);
 if (EstadoActual == 1 & EstadoAnterior == 0){
   digitalWrite (led, HIGH);
   EstadoAnterior = EstadoActual;
 }  
}

La idea es que cuando pulse haga un SET y cuando vuelva a pulsar un RESET

Cheyenne

Para apagarlo tienes que añadir seguido del if:

Si EstadoActual = 0 y EstadoAnterior = 1 ejecutar acción (apagar led)

Dystrom

Si pongo eso cuando suelto se apaga y no es lo que quiero hacer, pongo el codigo con tu modificacion

const int pulsador = 2;     // the number of the pushbutton pin
const int led =  14;      // the number of the LED pin
const int led2 =  15;      // the number of the LED pin

// variables will change:
int EstadoActual = 0;
int EstadoAnterior = 0;
int cnt = 0;

void setup() {
  pinMode(led, OUTPUT);   
  pinMode(led2, OUTPUT);   
  pinMode(pulsador, INPUT); 
Serial.begin(9600); 
}

void loop(){
  EstadoActual = digitalRead(pulsador);
  if (EstadoActual == 1 & EstadoAnterior == 0){
      digitalWrite (led,HIGH);
      EstadoAnterior = EstadoActual;
  }
   if (EstadoActual == 0 & EstadoAnterior == 1){
      digitalWrite (led,LOW);
      EstadoAnterior = EstadoActual;
  }
}

He pensado en poner un contador, y luego una comparacion

Cada vez que pulse incremento contador

Si contador = 1 led ON
Si contador = 2 led Off y contador = 0

voy a probarlo y comento resultado


Go Up