разные циклы

fedottt
Offline
Зарегистрирован: 30.05.2013

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

есть у меня код, он в loop крутится и имеет в конце паузу на 6 минут

вот. но у меня есть датчик влажности, который будет висеть в ванне и давать команды вытяжке работать и не работать. 

так как интервал в 6 минут меня не устраивает, хочу сделать отдельный цикл для этого датчика. 

дважды вызывать loop, я так понимаю, не получится. собственно и интересует как и что читать чтобы такое сделать?

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

fedottt пишет:

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

есть у меня код, он в loop крутится и имеет в конце паузу на 6 минут

вот. но у меня есть датчик влажности, который будет висеть в ванне и давать команды вытяжке работать и не работать. 

так как интервал в 6 минут меня не устраивает, хочу сделать отдельный цикл для этого датчика. 

дважды вызывать loop, я так понимаю, не получится. собственно и интересует как и что читать чтобы такое сделать?

 

Кстати да. То же интересно, как разделить программу внутри на несколько независимых подпрограмм?

4ERTIK
Offline
Зарегистрирован: 24.03.2013

может вот этот вариант приспособите под свои цели?пост №5

Snubist
Offline
Зарегистрирован: 18.02.2013

fedottt пишет:

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

есть у меня код, он в loop крутится и имеет в конце паузу на 6 минут

вот. но у меня есть датчик влажности, который будет висеть в ванне и давать команды вытяжке работать и не работать. 

так как интервал в 6 минут меня не устраивает, хочу сделать отдельный цикл для этого датчика. 

дважды вызывать loop, я так понимаю, не получится. собственно и интересует как и что читать чтобы такое сделать?

http://arduino.ru/tutorials/BlinkWithoutDelay

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

Puhlyaviy пишет:

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

 

Можете подробно "для чайников" расписать?

Сейчас стоит задача отправлять данные через Ethernet в web браузер и Processing. Режимы передачи разные, разные условия и данные. Нужно разделить на разные функции. самому пока не сильно удалось это сделать. 

fedottt
Offline
Зарегистрирован: 30.05.2013

сделал вот так:

по примеру указанному выше с милисекундами.  


void vanna(){
	float h2 = dht_vanna.readHumidity();
	float t2 = dht_vanna.readTemperature();
	if(h2>45.00){
		//Serial.print("too humm H=: /n/r"); 
//		Serial.print(h2);
	}

}

void all_sys(){

// тут большой кусок кода в полной каше

}


void loop(){

  emon1.calcVI(20,2000);  
  emon1.serialprint();  
  
unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval_vanna) {
    previousMillis = currentMillis;  
	vanna();
  }
  if(currentMillis - previousMillis2 > interval_main) {
    previousMillis2 = currentMillis;  
	all_sys();
  }
}

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

ingener.solovyev пишет:

Можете подробно "для чайников" расписать?

Сейчас стоит задача отправлять данные через Ethernet в web браузер и Processing. Режимы передачи разные, разные условия и данные. Нужно разделить на разные функции. самому пока не сильно удалось это сделать. 

Расписываю подробно для чайников... и для самоваров

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

скажем
1. событие у вас будет мигать светодиодом на 13 выводе раз в секунду

2. событие мигать светодиодом на 12 выводе раз в полторы секунды

вы выносите эти события каждое в свою функцию...

void flash1()

void flash2()

дальше в loop вы просто пишете проверку милис например.. как только наступило нужное время вызываете нужную функцию... она отрабатывает и возращается назад в loop  дальше считать милис и првоерять не достигло ли какого то значения...