Pages: 1 [2]   Go Down
Author Topic: Pulsador Teensy ++ 2.0  (Read 1212 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 151
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se comporta igual.

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

Vilalba, Lugo, Spain
Offline Offline
Full Member
***
Karma: 3
Posts: 211
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, lo estudio
Logged

Vilalba, Lugo, Spain
Offline Offline
Full Member
***
Karma: 3
Posts: 211
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
...

 smiley
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 151
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

¡¡¡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:
unsigned long Parpadeo=1000;

¿El unsigned para que es?

Muchas gracias honorable amigo.
« Last Edit: December 04, 2013, 07:28:28 pm by Metaconta » Logged

Vilalba, Lugo, Spain
Offline Offline
Full Member
***
Karma: 3
Posts: 211
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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,
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 151
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias por la explicación.

Precisamente pasaba lo último que indicas.

Gracias de nuevo. Estás hecho un profesional.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 151
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Vilalba, Lugo, Spain
Offline Offline
Full Member
***
Karma: 3
Posts: 211
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 151
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
« Last Edit: December 07, 2013, 09:44:47 pm by Metaconta » Logged

Vilalba, Lugo, Spain
Offline Offline
Full Member
***
Karma: 3
Posts: 211
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-roll-blue
Code:
#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);
  } 
}
Logged

Pages: 1 [2]   Go Up
Jump to: