узнать время между двумя миганиями

iopq
Offline
Зарегистрирован: 05.07.2016
void loop(void) 
{  
 sensors_event_t event;
 tsl.getEvent(&event);
if (event.light>10)
{
 digitalWrite(13, HIGH);
}
else
{
 digitalWrite(13,LOW);
}

}

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

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А как бы Вы по жизни это узнавали? При первом мигании записать время, а при следующем посмотреть время и вычесть из него разисанное. Разница и будет тем, что Вам нужно.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

ЕвгенийП пишет:

А как бы Вы по жизни это узнавали? При первом мигании записать время, а при следующем посмотреть время и вычесть из него разисанное. Разница и будет тем, что Вам нужно.

это неочевидно - мало у кого дома есть секундомер с двумя стрелками

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Есть функция millis(), которая возвращает количество прошедших миллисекунд. Это значение нужно сохранять в переменную. При каждом зажигании светодиода из текущего значения миллисекунд вычитаете ранее запомненное в переменной значение. Разница и будет количество прошедшего времени в миллисекундах. После чего сохраняете в переменную новое текущее значение миллисекунд и всё повторяется по кругу.

iopq
Offline
Зарегистрирован: 05.07.2016
void loop(void) 
{  
 sensors_event_t event;
 tsl.getEvent(&event);
if (event.light>10)
{
 time = millis();
 digitalWrite(13, HIGH);
}
else
{
 time2 = millis();
 digitalWrite(13,LOW);
}

}

вот так при зажигании в переменную time запишется время. а при затухании в переменную time2. нужно time-time2=t?

b707
Offline
Зарегистрирован: 26.05.2017

iopq пишет:

ОФФТОП - а что за event, это библиотека какая-то?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Для того, чтобы узнать время свечения, нужно из времени окончания свечения, вычитать время начла. А Вы что из чего вычитаете?

А вообще, попробовать религия не позволяет?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Дак а чо пробовать-то?  Придешь сюда, здесь тебе карекцыонные пидагоги всё ражжуют. 

iopq
Offline
Зарегистрирован: 05.07.2016

да я уже задолбился пробовать со вчерашнего дня пробую нихера не выходит вот и обратился. попробуй попробуй

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ну дак ты, может, весь код вставишь?  Я вот не вижу, может у тебя time или time2 байтом обьявлена. 

iopq
Offline
Зарегистрирован: 05.07.2016
static unsigned long time = 0, time1=0;
void loop(void) 
{  
 sensors_event_t event;
 tsl.getEvent(&event);
if (event.light>10)
{
 time = millis();
 digitalWrite(13, HIGH);
Serial.println(time-millis());
}
else
{
 time1 = millis();
 digitalWrite(13,LOW);
}

}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

time-millis()

ну, будет нулевое время, ты этого хотел?

iopq
Offline
Зарегистрирован: 05.07.2016

это я пробую. мне нужно реальное время

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

iopq пишет:

это я пробую. мне нужно реальное время

продам интернет-будильник

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017
static unsigned long time = 0, time1=0;
void loop(void) 
{  
 sensors_event_t event;
 tsl.getEvent(&event);
if (event.light>10)
{
 digitalWrite(13, HIGH);        // сначала переключаем светодиот
 Serial.println(millis()-time); // потом пишем РИАЛЬНОЯ время
 time = millis();               // а уж потом присваиваем новое значение time  
}
else
{
 time1 = millis();
 digitalWrite(13,LOW);
}
 
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Блин, 15 постов, чтобы вычесть время начала из времени окончания !!! Я ахреневаю ... чем "пустее" тема. тем толще :)

iopq
Offline
Зарегистрирован: 05.07.2016

я был на верном пути. спасибо