Go Down

Topic: Pulsador Teensy ++ 2.0 (Read 2067 times) previous topic - next topic

Metaconta

Se comporta igual.

Lo ideal sería montarlo con el pulsador Push-Up.

Marcial


Marcial

Cambia:
...
void loop()
{
  Estado_Pulsador = digitalRead(Pulsador); // Lee el estado del botón.
...

por :

...
void loop()
{
  Estado_Pulsador = !digitalRead(Pulsador); // Lee el estado del botón.
...

:)

Metaconta

#18
Dec 05, 2013, 01:20 am Last Edit: Dec 05, 2013, 01:28 am by Metaconta Reason: 1
¡¡¡Holaaaaaaaaaa!!!

Por fin me funciona, jajajajajjjaa. Pensaba que eran cosas de las variables cambiarla de false a true y era un ! (NOT).

Si que cuesta hacer varias funciones en el mismo botón.

Por cierto, esta parte del código.
Code: [Select]
unsigned long Parpadeo=1000;

¿El unsigned para que es?

Muchas gracias honorable amigo.

Marcial

unsigned es una variable "sin signo", solo positivos.

El problema no estaba ni en el programa ni en el esquema, estaba en la incompatibilidad entre ellos, jajajaaj.

Tu tenias un pulsador con resistencia pull up,  eso envia y mantiene un high  hasta que pulses, yo buscaba flancos ascendentes, asi que namas encender, si no pulsabas antes de 3 segundos se apaga,

Metaconta

Gracias por la explicación.

Precisamente pasaba lo último que indicas.

Gracias de nuevo. Estás hecho un profesional.

Metaconta

Hola:

Me faltó una cosa más. Cuando apago Arduino, el estado del Led y ventilador, no se queda guardado en la EEPROM interna. Quiero que guarde el estado en la EEPROM después de pulsar el botón. Así cuando se apague el Arduino, al encenderlo, esté el estado que esté ventilador y Led, aunque sea Led parpadeando, recupera su estado actual tal como perdió la alimentación a la hora de recuperarla.

¿Es muy complejo hacerlo?

Un saludo.

Marcial

No creo que sea muy complejo, pero es un terreno que no controlo,  a ver si nos ilumina algún compañero, si no habrá que estudiarlo.

Metaconta

#23
Dec 07, 2013, 12:32 am Last Edit: Dec 08, 2013, 03:44 am by Metaconta Reason: 1
Buenas:

Aquí hay libreerías y ejemplos, voy a investigar y probar a ver que pasa.

1) Borrado de EEPROM.
2) Lectura de EEPROM.
3) Escritura de EEPROM.

Los ejemplos e arriba son como que se recorren toda el mapa de memoria, en mi caso quiero usar solo una zona de memoria en concreto. Esa es la cuestión.

Preguntanto por aquí en Inglés y usando http://translate.google.es para escapar.
http://forum.arduino.cc/index.php?topic=203422.msg1498394#msg1498394

Seguiré investigando...

Marcial

:smiley-roll-blue:
Code: [Select]
#include <EEPROM.h>
byte Pulsador  =23; // Pines usados
byte Led       =25;
byte Ventilador=27; 
#define ON HIGH       
#define OF LOW
boolean Estado_Pulsador;
boolean Estado_Anterior = false;
boolean Led_Encendido=false;
boolean Ven_Encendido=false;
unsigned long Parpadeo=1000;  // Tiempo de parpadeo de led
unsigned long T_Anterior=0;   // Auxiliar para controlar tiempo de parpadeo
unsigned long T_Apagar=3000;  // Tiempo a pulsar para apagar
unsigned long T_Pulsado=0;    // Auxiliar para controlar tiempo de boton pulsado
byte Secuencia=0;             // Para manejar la secuencia de salidas
byte Asecuencia = 0;          // Para guardar la secuencia en eeprom
void setup()
{
  pinMode(Pulsador, INPUT);       
  pinMode(Led, OUTPUT);         
  pinMode(Ventilador, OUTPUT);
  //for( int i=0;i<255;i++) {EEPROM.write(i, 0);} // ejecutarlo solo la primera vez para borrar la eeprom
  Asecuencia= EEPROM.read(0);
  Secuencia=Asecuencia;
  digitalWrite(Led, OF);
  digitalWrite(Ventilador, OF); 
}

void loop()
{
  Estado_Pulsador =!digitalRead(Pulsador); // Lee el estado del botón. 
  if (Estado_Pulsador && !Estado_Anterior) // Pulsador pasa de low a high
  {
    T_Pulsado=millis()+T_Apagar;           // Para controlar el timpo que pasa pulsado
    Estado_Anterior=true;                  // No enta en el if hasta q pulsador pase de high a low
    Secuencia++;                           // Pasamos a siguiente secuencia
  }
  if (!Estado_Pulsador && Estado_Anterior) // Pulsador pasa de high a low
  {
    Estado_Anterior=false;                 // No enta en el if hasta q pulsador pase de low a high
    T_Pulsado=0;                           // Al soltar pulsador ya no controlamos el tiempo
  }
  if (T_Pulsado>0 && Estado_Pulsador && millis()>T_Pulsado) 
  {                                        // Hay tiempo cargado para controlar el fin y pulsador en high y ha transcurrido el tiempo del pulsador activo
    T_Pulsado=0;                           // Ya no controlamos timepo de pulsado
    Secuencia=0;                           // Secuencia 0, todo apagado
  } 
  if (Secuencia==0)                        // Todo apagado
  {
    Led_Encendido=false;
    Ven_Encendido=false;
    T_Anterior=0;                          // Para que pueda funcionar el parpadeo de nuevo
  }
  else if (Secuencia==1)                   // Pulsamos por 1ª vez, todo encendido
    {
      Led_Encendido=true;
      Ven_Encendido=true;
    }
    else if (Secuencia==2)                 // Pulsamos por 2ª vez, Apaga ventilador y led parpadea
      {
        Ven_Encendido=false;       
        if (millis()>T_Anterior)           // Tiempo parpadeo finalizado
        {
          T_Anterior=millis() + Parpadeo;// Tiempo a esperar para siguiente parpadeo
          Led_Encendido=!Led_Encendido;  // de encendido a apagado y viceversa
        }           
      }
      else {Secuencia=1; }   
  if (Led_Encendido) {digitalWrite(Led, ON);} else {digitalWrite(Led, OF);}
  if (Ven_Encendido) {digitalWrite(Ventilador, ON);} else {digitalWrite(Ventilador, OF);} 
  if (Asecuencia != Secuencia)
  {
    Asecuencia = Secuencia;
    EEPROM.write(0, Asecuencia);
  } 
}

Go Up