Arduino MultiTimer - PullRequest
       5

Arduino MultiTimer

0 голосов
/ 24 сентября 2018

Новичок здесь.

Я хочу отменить 5 комплектов светодиодов, каждый из которых имеет 1 главную кнопку для включения светодиода и 2 кнопки для увеличения или уменьшения значения задержки.

Питание включено :

  • Все светодиоды выключены
  • Значение всех таймеров мин.значение равно 0
  • Все таймеры отключены

функция :

  • Когда T1 нажал, значение задержки выключения увеличиваетсяна 10
  • При нажатии кнопки (1) D1 включается и выключается после достижения значения задержки.
  • Та же функция с другими светодиодами.

Рассмотрение :

  • каждый набор независим друг от друга, что означает, что если таймер 1 имеет 1-секундный таймер задержки, можно установить значение 3 сек.

Панель управления

Я ищу во многих библиотеках, но у меня возникают трудности с тем, что использовать.У меня есть код, и у меня проблема с изменением значения таймера.

Here's my code--------------------------------------------------------------

#include <Arduino.h>
#include <Timer.h>



const int LED1 = 5;                    
const int LED2 = 11;
int btn = 6;
int addV = 7;                   //connect another LED to this pin (don't forget the resistor)

const unsigned long PERIOD1 = 1000;    //one second
int unsigned long PERIODsum;   //ten seconds
Timer t;                               //instantiate the timer object

void setup(void)
{
    pinMode(LED1, OUTPUT);
    pinMode(LED2, OUTPUT);
    pinMode(btn, INPUT_PULLUP);
    pinMode(addV, INPUT_PULLUP);

    t.oscillate(LED1, PERIOD1, HIGH);
    t.oscillate(LED2, PERIODsum, HIGH);
    Serial.begin(9600);
}

int addVf(){
      PERIODsum += 10;
      return(PERIODsum);
}

void loop(void)
{
  int addVon = digitalRead(addV);
  if(!addVon){
    addVf();
  }
  int btnS = digitalRead(btn);
  if(!btnS){
    t.update();
   Serial.println("Loop Value:   ");
   Serial.println(PERIODsum);
   }


}

1 Ответ

0 голосов
/ 24 сентября 2018

Добавлен небольшой кусочек кода, который работает для 3-х каналов, как вам нужно.

Без дополнительных библиотек.

Функция цикла вызывает функции для проверки кнопок и значения таймера, а затем выполняетзадержка 50 мс.То, что вам еще нужно добавить, это функция нажатия / выпуска для запуска, увеличения и уменьшения нажатия кнопки.В остальном каждый цикл (50 мс) кнопки будут распознаваться как нажатые.Что значит значение settime будет все время увеличиваться.

//timing defines
#define INC_STEP  20
#define DEC_STEP  20
#define LOOP_DELAY  50

//input/output defines
#define BTN_CH_A_Start   6
#define BTN_CH_A_Inc     7
#define BTN_CH_A_Dec     8
#define LED_PIN_CH_A     9
unsigned int SetTime_CH_A = 0;
unsigned int DelayTimer_CH_A = 0;

#define BTN_CH_B_Start   10
#define BTN_CH_B_Inc     11
#define BTN_CH_B_Dec     12
#define LED_PIN_CH_B     13
unsigned int SetTime_CH_B = 0;
unsigned int DelayTimer_CH_B = 0;

#define BTN_CH_C_Start   14
#define BTN_CH_C_Inc     15
#define BTN_CH_C_Dec     16
#define LED_PIN_CH_C     17
unsigned int SetTime_CH_C = 0;
unsigned int DelayTimer_CH_C = 0;

void setup() {
  Serial.begin(9600);
  pinMode(BTN_CH_A_Start, INPUT_PULLUP);
  pinMode(BTN_CH_A_Inc, INPUT_PULLUP);
  pinMode(BTN_CH_A_Dec, INPUT_PULLUP);
  pinMode(LED_PIN_CH_A, OUTPUT);

  pinMode(BTN_CH_B_Start, INPUT_PULLUP);
  pinMode(BTN_CH_B_Inc, INPUT_PULLUP);
  pinMode(BTN_CH_B_Dec, INPUT_PULLUP);
  pinMode(LED_PIN_CH_B, OUTPUT);

  pinMode(BTN_CH_C_Start, INPUT_PULLUP);
  pinMode(BTN_CH_C_Inc, INPUT_PULLUP);
  pinMode(BTN_CH_C_Dec, INPUT_PULLUP);
  pinMode(LED_PIN_CH_C, OUTPUT);
}

void CheckButtons()
{
  //check if the delay timer value have to set to inital value
  if (digitalRead(BTN_CH_A_Start)) DelayTimer_CH_A = SetTime_CH_A;
  if (digitalRead(BTN_CH_B_Start)) DelayTimer_CH_B = SetTime_CH_B;
  if (digitalRead(BTN_CH_C_Start)) DelayTimer_CH_C = SetTime_CH_C;

  //check if SetTime value have to increase
  if (digitalRead(BTN_CH_A_Inc)) SetTime_CH_A += INC_STEP;
  if (digitalRead(BTN_CH_B_Inc)) SetTime_CH_B += INC_STEP;
  if (digitalRead(BTN_CH_C_Inc)) SetTime_CH_C += INC_STEP;

  //check if SetTime value have to decrease
  //if button pressed check if decrease if greater 0 decrese by DEC_STEP. if not set to 0
  if (digitalRead(BTN_CH_A_Dec)) if (SetTime_CH_A-DEC_STEP>=0) SetTime_CH_A -= DEC_STEP; else SetTime_CH_A=0;
  if (digitalRead(BTN_CH_B_Dec)) if (SetTime_CH_B-DEC_STEP>=0) SetTime_CH_B -= DEC_STEP; else SetTime_CH_B=0;
  if (digitalRead(BTN_CH_C_Dec)) if (SetTime_CH_C-DEC_STEP>=0) SetTime_CH_C -= DEC_STEP; else SetTime_CH_C=0;

}

void CheckDelayTimer()
{
  //check the actual value of DelayTimer decrase if greater than 0 drectese an the output high else set output low
  if (DelayTimer_CH_A>0) { DelayTimer_CH_A--; digitalWrite(LED_PIN_CH_A, 1); } else digitalWrite(LED_PIN_CH_A, 0);
  if (DelayTimer_CH_B>0) { DelayTimer_CH_B--; digitalWrite(LED_PIN_CH_B, 1); } else digitalWrite(LED_PIN_CH_B, 0);
  if (DelayTimer_CH_C>0) { DelayTimer_CH_C--; digitalWrite(LED_PIN_CH_C, 1); } else digitalWrite(LED_PIN_CH_C, 0);

}

void loop() {
  CheckButtons();
  CheckDelayTimer();
  delay(LOOP_DELAY);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...