Sari la conținut
ELFORUM - Forumul electronistilor

Cod pentru apasare scurta a butonului cu functionare temporizata


Vizitator GeorgeTrisina

Postări Recomandate

Vizitator GeorgeTrisina

Asta e codul si nu functioneaza temporizarea

unsigned long currentTime;
unsigned long loopTime;

void setup()
{
 currentTime = millis();
 loopTime = currentTime; 
 pinMode(46, OUTPUT);  //Initialize pin 46 as status LED 
 pinMode(A15, INPUT);    // Our button pin 
}

void loop()
{
 if (digitalRead(A15) == LOW)   // Switch is closed to start LED timer
         {
         digitalWrite(46, HIGH);  // LED comes On  
         currentTime = millis();  
         }
 else   //Hits each pass that switch is not pressed
          {
         if (currentTime >= (loopTime + 5000)); { 
         digitalWrite(46, LOW);  //  LED goes off
         loopTime = currentTime;  // Updates loopTime
          }
}
} 

 

timer buton.doc

Editat de GeorgeTrisina
Link spre comentariu
  • Răspunsuri 7
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • nico_2010

    3

  • digix

    1

Zile populare

Top autori în acest subiect

Incearca acest cod:

 

#define interval 5000UL

const int LED_pin = 13;
const int Button  = 8;

const int Time_delay = 1000UL;
int duration = 0;

long switchTime()
{
  static unsigned long startTime = 0;
  static boolean state;
  if (digitalRead(Button) != state)
  {
    state = ! state;
    startTime = millis();
  }
  if ( state == LOW)
    return millis() - startTime;
  else
    return 0;
}

void setup()
{
  pinMode(LED_pin, OUTPUT);  //Initialize pin 46 as status LED
  digitalWrite(LED_pin, LOW);
  pinMode(Button, INPUT_PULLUP);    // Our button pin
  waitUntil += interval;
}

void loop()
{
  static boolean stare1, stare2 = false;
  duration = switchTime();
  if (duration > Time_delay)
  {
    stare2 = true;
    stare1 = false;
  } else if((duration <= Time_delay) && (duration > (Time_delay - 800UL))) {
    stare1 = true;
    stare2 = false;
  }
  if (stare1)
  {
    digitalWrite(LED_pin, HIGH);
    delay(interval);
    digitalWrite(LED_pin, LOW);
stare1 = false;
  }
  if (stare2)
  {
    while (digitalRead(Button) == LOW)
    {
      digitalWrite(LED_pin, HIGH);
    }
    digitalWrite(LED_pin, LOW); 
    stare2 = false;
  }
}

 

Editat de nico_2010
Link spre comentariu

Si mai poti incerca cu acest cod:

 


#define interval 5000UL

const int LED_pin = 13;
const int Button  = 8;

const int Time_delay = 1000UL;
const int longTime_delay = 3000UL;
const int debounce = 100;
int count_ms = 0;
int duration = 0;

long switchTime()
{
  static unsigned long startTime = 0;
  static boolean state;
  if (digitalRead(Button) != state)
  {
    state = ! state;
    startTime = millis();
  }
  if ( state == LOW)
    return millis() - startTime;
  else
    return 0;
}

void setup()
{
  pinMode(LED_pin, OUTPUT);  //Initialize pin 46 as status LED
  digitalWrite(LED_pin, LOW);
  pinMode(Button, INPUT_PULLUP);    // Our button pin
}

void loop()
{
 if (switchTime() >= longTime_delay)
    {
      if (switchTime() > Time_delay){
      while (digitalRead(Button) == LOW)
      {
        digitalWrite(LED_pin, HIGH);
      }
      digitalWrite(LED_pin, LOW);
      }
    } 
  if (switchTime() < longTime_delay)
  { 
   if ((switchTime()>debounce) && (switchTime() < Time_delay))
    {
      digitalWrite(LED_pin, HIGH);
      delay(5000);
      digitalWrite(LED_pin, LOW);

    }
  }
}


 

Link spre comentariu
Vizitator GeorgeTrisina
La 04.04.2018 la 13:40, nico_2010 a spus:

Incearca acest cod:

 


#define interval 5000UL

const int LED_pin = 13;
const int Button  = 8;

const int Time_delay = 1000UL;
int duration = 0;

long switchTime()
{
  static unsigned long startTime = 0;
  static boolean state;
  if (digitalRead(Button) != state)
  {
    state = ! state;
    startTime = millis();
  }
  if ( state == LOW)
    return millis() - startTime;
  else
    return 0;
}

void setup()
{
  pinMode(LED_pin, OUTPUT);  //Initialize pin 46 as status LED
  digitalWrite(LED_pin, LOW);
  pinMode(Button, INPUT_PULLUP);    // Our button pin
  waitUntil += interval;
}

void loop()
{
  static boolean stare1, stare2 = false;
  duration = switchTime();
  if (duration > Time_delay)
  {
    stare2 = true;
    stare1 = false;
  } else if((duration <= Time_delay) && (duration > (Time_delay - 800UL))) {
    stare1 = true;
    stare2 = false;
  }
  if (stare1)
  {
    digitalWrite(LED_pin, HIGH);
    delay(interval);
    digitalWrite(LED_pin, LOW);
stare1 = false;
  }
  if (stare2)
  {
    while (digitalRead(Button) == LOW)
    {
      digitalWrite(LED_pin, HIGH);
    }
    digitalWrite(LED_pin, LOW); 
    stare2 = false;
  }
}

 

O mica eroare a avut la instructiunea waitUntil trebuia declarata si linia waitUntil += interval merge fara + si =. Pana la urma a functionat. Multumesc.

La 04.04.2018 la 16:14, nico_2010 a spus:

Si mai poti incerca cu acest cod:

 



#define interval 5000UL

const int LED_pin = 13;
const int Button  = 8;

const int Time_delay = 1000UL;
const int longTime_delay = 3000UL;
const int debounce = 100;
int count_ms = 0;
int duration = 0;

long switchTime()
{
  static unsigned long startTime = 0;
  static boolean state;
  if (digitalRead(Button) != state)
  {
    state = ! state;
    startTime = millis();
  }
  if ( state == LOW)
    return millis() - startTime;
  else
    return 0;
}

void setup()
{
  pinMode(LED_pin, OUTPUT);  //Initialize pin 46 as status LED
  digitalWrite(LED_pin, LOW);
  pinMode(Button, INPUT_PULLUP);    // Our button pin
}

void loop()
{
 if (switchTime() >= longTime_delay)
    {
      if (switchTime() > Time_delay){
      while (digitalRead(Button) == LOW)
      {
        digitalWrite(LED_pin, HIGH);
      }
      digitalWrite(LED_pin, LOW);
      }
    } 
  if (switchTime() < longTime_delay)
  { 
   if ((switchTime()>debounce) && (switchTime() < Time_delay))
    {
      digitalWrite(LED_pin, HIGH);
      delay(5000);
      digitalWrite(LED_pin, LOW);

    }
  }
}


 

Codul asta a functionat din prima fara interventii. Multumesc.

Mai am o intrebare: Cum fac sa nu-mi ruleze automat? Dupa incarcarea codului imi face comanda automat prima data si abea dupa aia asteapta co0menzi de la buton. Asta se intampla la ambele variante.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări