Как записать время работы диода и как потом узнать сколько он работал

uljk
Offline
Зарегистрирован: 21.09.2013

Добрый день!

Сразу скажу, что в ардуино новичек. Возникла идейка у меня одна. Имеем мы 4 диода и четыре кнопки. При нажатии определенной кнопки, загарается определенный диод, другие тухнут.

Вот код, который имеется сейчас.

#define LED1 13 
#define LED2 12
#define LED3 11
#define LED4 10
#define BUTTON1 9 
#define BUTTON2 7
#define BUTTON3 6
#define BUTTON4 5


int val1 = 0; 
 int val2 = 0;
 int val3 = 0;
 int val4 = 0;
 int old_val1 = 0;
 int old_val2 = 0;
 int old_val3 = 0;
 int old_val4 = 0;
 int state1 = 0;
 int state2 = 0;
 int state3 = 0;
 int state4 = 0;

void setup() {
 pinMode(LED1, OUTPUT); 
 pinMode(LED2, OUTPUT);
 pinMode(LED3, OUTPUT);
 pinMode(LED4, OUTPUT);

 pinMode(BUTTON1, INPUT); 
 pinMode(BUTTON2, INPUT);
 pinMode(BUTTON3, INPUT);
 pinMode(BUTTON4, INPUT);
}

void loop(){
 val1 = digitalRead(BUTTON1); 
 val2 = digitalRead(BUTTON2);
 val3 = digitalRead(BUTTON3);
 val4 = digitalRead(BUTTON4);

if ((val1 == HIGH) && (old_val1 == LOW)) {
  
 
 state1 = 1 - state1;
 state2 = 0;
 state3 = 0;
 state4 = 0;
 delay(40);
 }

old_val1 = val1;

 if (state1 == 1) {
 digitalWrite(LED1, HIGH);
 } else {

 digitalWrite(LED1, LOW);
 }

if ((val2 == HIGH) && (old_val2 == LOW)) {
  
 state2 = 1 - state2;
 state1 = 0;
 state3 = 0;
 state4 = 0;
 delay(40);
  }

old_val2 = val2;

 if (state2 == 1) {
 digitalWrite(LED2, HIGH);
 } else {

 digitalWrite(LED2, LOW);
 }
 
 if ((val3 == HIGH) && (old_val3 == LOW)) {

 state3 = 1 - state3;
 state1 = 0;
 state2 = 0;
 state4 = 0;
 delay(40);
 }

old_val3 = val3;

 if (state3 == 1) {
 digitalWrite(LED3, HIGH);
 } else {

 digitalWrite(LED3, LOW);
 }

 if ((val4 == HIGH) && (old_val4 == LOW)) {

 state4 = 1 - state4;
 state1 = 0;
 state2 = 0;
 state3 = 0;
 delay(40);
 }

old_val4 = val4;

 if (state4 == 1) {
 digitalWrite(LED4, HIGH);
 } else {

 digitalWrite(LED4, LOW);
 }

}

Требуется, чтобы время работы определенного диода сохранялось где-то. А потом по запросу его можно было посмотреть. Прошу помощи в решении данного вопроса. Пока никак не пойму можно ли такое организовать. И создается у меня ощущение, что я изначально пошел не тем путем..

vvadim
Offline
Зарегистрирован: 23.05.2012

При нажатии кнопки загорвется светодиод и включается таймер. Когда гаснет диод данные с таймера записываем в EEPROM. Если нужно при длительном нажатии кнопки (как возможный вариант) показания выводятся на lcd.

uljk
Offline
Зарегистрирован: 21.09.2013

"При нажатии кнопки загорвется светодиод и включается таймер. Когда гаснет диод данные с таймера записываем в EEPROM."

Не подскажете как это организовать?

Lipt0n
Offline
Зарегистрирован: 04.11.2013

http://arduino.ru/Reference/Millis

При нажатии на кнопку(зажигаем светодиод) - записываем текущее значение millis() (допустим как в примере time = millis();).

При нажатии на кнопку(тушим светодиод) -  считаем разницу во времени millis()-time;

О том как записать данные в EEPROM написано здесь 

http://arduino.ru/forum/programmirovanie/zapis-v-eeprom