помогите написать скейч.

ser97
Offline
Зарегистрирован: 21.03.2016

Суть такая, нужен скейч чтобы при двойном нажатии кнопки (пордка 300-900мс) загорался светодиод на 5 сек и потом гас. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а сам что даже не пытался?

почитай титановый велосипед для кнопки тут на форуме

ser97
Offline
Зарегистрирован: 21.03.2016

пытался, понял что это не мое, но всеже даную проблему надо решить

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ардуину купил? уроки джереми блюма прошел? если нет значит не особо пытался

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ser97 пишет:

Суть такая, нужен скейч чтобы при двойном нажатии кнопки (пордка 300-900мс) загорался светодиод на 5 сек и потом гас. 

создай новую тему
там и спрашивай !

ser97
Offline
Зарегистрирован: 21.03.2016

Помоги пожалуйста,  нашел скейч который мне подходит кроме одного но, внем при кратковременном одном нажатии включается светодиод(это нужно убрать а все остальное оставить) помоги .

ser97
Offline
Зарегистрирован: 21.03.2016
ine BUTTON_PIN 7
ine LED_PIN 13

int bounceTime = 10;          // задержка для подавления дребезга
int holdTime = 300;          // время, в течение которого нажатие можно считать удержанием кнопки
int doubleTime = 500;        // время, в течение которого нажатия можно считать двойным

boolean lastReading = false;  // флаг предыдущего состояния кнопки
boolean buttonSingle = false; // флаг состояния "краткое нажатие"
boolean buttonDouble = false; // флаг состояния "двойное нажатие"
boolean buttonHold = false;  // флаг состояния "долгое нажатие"
boolean ledState = false;    // флаг состояния LED

long onTime = 0;              // переменная обработки временного интервала
long lastSwitchTime = 0;      // переменная времени предыдущего переключения состояния
long ledStartTime = 0;        // переменная-флаг времени начала включения LED
unsigned long ledTimeout = 300000;      // переменная времени отключения LED, 5 минут = 300 000 мс

void setup()
{
  Serial.begin(9600);
  pinMode(9, HIGH);          //! подаем +5В на кнопку - эта строка только для моей схемы, вам не нужно!
  pinMode(BUTTON_PIN, INPUT_PULLUP); // подключаем кнопку через внутренний резистор
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, ledState);  // принудительно гасим LED
  Serial.println("\nReady...");
}


void loop()
{


  // ================ обработчик состояния кнопки ====================
  boolean reading = !digitalRead(BUTTON_PIN);  // читаем состояние пина кнопки (инвертированное, т.к. подключено через внутренний резистор)
  // проверка первичного нажатия
  if (reading && !lastReading)
  {
    onTime = millis();
  }
  // проверка удержания
  if (reading && lastReading)
  {
    if ((millis() - onTime) > holdTime)
    {
      buttonHold = true;
    }
  }
  // проверка отпускания кнопки
  if (!reading && lastReading)
  {
    if (((millis() - onTime) > bounceTime) && !buttonHold)
    {
      if ((millis() - lastSwitchTime) >= doubleTime)
      {
        lastSwitchTime = millis();
        buttonSingle = true;
      }
      else
      {
        lastSwitchTime = millis();
        buttonDouble = true;
        buttonSingle = false;
        Serial.println("Button: double press");
        isButtonDouble();
        buttonDouble = false;  // сброс состояния после выполнения команды
      }
    }
    if (buttonHold)
    {
      buttonDouble = false;
      Serial.println("Button: hold");
      isButtonHold();
      buttonHold = false;  // сброс состояния после выполнения команды
    }
  }
  lastReading = reading;
  if (buttonSingle && (millis() - lastSwitchTime) > doubleTime)
  {
    buttonDouble = false;
    Serial.println("Button: single press");
    isButtonSingle();
    buttonSingle = false;  // сброс состояния после выполнения команды
  }
  // ================ конец обработчика состояния кнопки ==================

  // ================ обработчик отключения LED по таймауту ===============
  if ((ledStartTime !=0) && (millis() - ledStartTime > ledTimeout))  // если LED включен по даблклику и прошло больше 5 сек
  {
    Serial.println("Timeout");
    ledToggle();        // то гасим LED
    ledStartTime = 0;    // и обнуляем переменную-флаг
  }
  // ================ конец обработчика отключения LED ====================


} // конец loop


void isButtonSingle() // действия после одиночного нажатия кнопки
{
  //При однократном нажатии диод загорается , если еще раз нажать то тухнет.
  //Если однократно нажать на кнопку то он погаснет, вне зависимости как его включили.
  ledToggle();
}


void isButtonDouble() // действия после двойного нажатия кнопки
{
  //При двойном нажатии диод загорается и тухнет через 5 минут
  ledState = true;                    // однозначно включаем LED
  digitalWrite(LED_PIN, ledState);
  ledStartTime = millis();            // начинаем отсчет времени
  Serial.println("LED on. Will turn off after 5 min");
}


void isButtonHold() // действия после удержания кнопки
{
  // здесь код для этого действия
  Serial.println("nothing to do...");
}


void ledToggle()    // функция переключения (инвертирования) LED
{
  ledState = !ledState;
  digitalWrite(LED_PIN, ledState);
  ledState ? Serial.println("LED on"): Serial.println("LED off");

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ser97 ,   ты точно думаешь , что все ОБЯЗАНЫ сразу тибе помогать ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

два - вовсе не отжался - читай книжки.....

или спроси толково.....

ser97
Offline
Зарегистрирован: 21.03.2016

нет НЕ ОБЯЗАНЫ.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ser97 пишет:

нет НЕ ОБЯЗАНЫ.

спроси не от нервов , подумай , спроси гугл , потом здесь....

ser97
Offline
Зарегистрирован: 21.03.2016

ни гугл ни ндекс не помогают.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ser97 пишет:

Помоги пожалуйста,  нашел скейч который мне подходит кроме одного но, внем при кратковременном одном нажатии включается светодиод(это нужно убрать а все остальное оставить) помоги .

можно указать - что не так...
НО пока сам не "ПОТРОГАЕШЬ" - время даром ....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ser97 пишет:

ни гугл ни ндекс не помогают.

нееееее , голова не так думает !!!!!
нет ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

тибе поможет только ТВОЯ ГОЛОВА - если есть такая имеет быть место....
Есть такое средство для думания ?

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

ser97 пишет:

помогите написать скейч.

Скетч (англ. sketch, буквально — эскиз, набросок, зарисовка)