#1 2015-11-23 14:32:59

ДмитрийZ
Учасник
Зареєстрований: 2015-11-23
Повідомлень: 0

простой таймер - ткните носом, пожалуйста

для простого задания - включать вентилятор в WC после выключения света приобрел Нано и модуль реле. Мой уровень нулевой, как говорил Панда, но переключать светодиоды, моторчики я уже научился. А вот с этой простой задачей торможу, аж стыдно. Как контроллеру показать, что свет не просто выключен, а только что БЫЛ выключен? Или - как остановить loop после одного цикла? Массу интересного и понятного материала  по ардуино прочитал, и, как правило,  в самом интересном месте объяснения становятся туманны smile. Помогите выйти из депресняка!

Неактивний

#2 2015-11-23 17:50:23

ДмитрийZ
Учасник
Зареєстрований: 2015-11-23
Повідомлень: 0

Re: простой таймер - ткните носом, пожалуйста

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

const int ledPin =  11;     
const int desireDelay = 5000;

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
   digitalWrite(ledPin, LOW);
   delay(desireDelay);
   digitalWrite(ledPin, HIGH);
}


void loop() { }

предполагаю, будет критика. Хотелось бы все таки сделать правильно smile

Неактивний

#3 2015-11-23 19:30:27

ДмитрийZ
Учасник
Зареєстрований: 2015-11-23
Повідомлень: 0

Re: простой таймер - ткните носом, пожалуйста

эта штука может и так работать, но мне таки интересно: как показать, что сигнал не просто выключен, а был выключен только что? И как правильно работать с millis - как оформить, что событие одноразовое, и должно длиться такое то время? Подскажите, где почитать подробно, пожалуйста.

Неактивний

#4 2015-11-24 00:33:44

vk
Учасник
Зареєстрований: 2015-11-14
Повідомлень: 17

Re: простой таймер - ткните носом, пожалуйста

const int ledPin =  11;

unsigned long desiredBeginDelay = 5000; //trigger's interval
unsigned long desiredEndDelay = 5000; //trigger's interval
unsigned long signalBeginTime = 0;   //0 - stop, millis() - begin interval
unsigned long signalEndTime = 0;   //0 - stop, millis() - begin interval

bool isTriggerTime(unsigned long beginTime, unsigned long interval) {
	bool result = false;

	if(beginTime > 0)
		result = (millis() - beginTime) >= interval;

	return result;
}

void setup() {
	pinMode(ledPin, OUTPUT);
	digitalWrite(ledPin, LOW);
	
	delay(10); //set internal time > 10
	signalBeginTime = millis(); //start trigger at current time
}

void loop() {
	if(isTriggerTime(signalBeginTime, desiredBeginDelay)){
		digitalWrite(ledPin, HIGH);
		signalEndTime = millis();
		signalBeginTime = 0;
	}

	if(isTriggerTime(signalEndTime, desiredEndDelay)){
		digitalWrite(ledPin, LOW);
		signalEndTime = 0;
	}
}

Неактивний

#5 2015-11-24 00:56:44

vk
Учасник
Зареєстрований: 2015-11-14
Повідомлень: 17

Re: простой таймер - ткните носом, пожалуйста

вообще-то правильней было бы сделать через типы, предоставив апи настроек событий и взаимодействия, чтоб не дублировать код но мне лень (:

Неактивний

#6 2015-11-25 18:04:40

ДмитрийZ
Учасник
Зареєстрований: 2015-11-23
Повідомлень: 0

Re: простой таймер - ткните носом, пожалуйста

мне еще надо много читать, чтоб понять, что вы написали. Спасибо за помощь, но получилась та же история - в самых интересных местах комментариев то и нет sad . Я сделал вот так:

на лампе освещения реле с нормально замкнутыми. свет вкл - контакты разомк. свет выкл - реле вкл питание ардуине, исполняется вот такое

const int fan =  12;      
int fanState = LOW;             
unsigned long previousMillis = 0;        
const long interval = 60000;           

void setup() {
   pinMode(fan, OUTPUT);
}

void loop() {
  
  unsigned long currentMillis = millis();
  if (currentMillis  >= interval) {
   
      fanState = HIGH;
    } else {
      fanState = LOW;
    }
    digitalWrite(fan, fanState);
  }

Неактивний

#7 2015-11-25 23:37:57

vk
Учасник
Зареєстрований: 2015-11-14
Повідомлень: 17

Re: простой таймер - ткните носом, пожалуйста

просто как таймер.

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

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

Неактивний

#8 2018-06-09 16:22:33

Oleg88
Учасник
Зареєстрований: 2018-06-09
Повідомлень: 1

Re: простой таймер - ткните носом, пожалуйста

Всем привет такой вопрос как по состоянию трех входов запустить три независимых таймера ?

Неактивний

#9 2018-06-09 16:59:46

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: простой таймер - ткните носом, пожалуйста

Oleg88 пише:

Всем привет такой вопрос как по состоянию трех входов запустить три независимых таймера ?

Библиотека EveryTimer поможет, если вам нужны не аппаратные таймеры.

Неактивний

#10 2019-01-15 17:16:57

хуй
Гість

Re: простой таймер - ткните носом, пожалуйста

хуй
сасай
быстро б**ь

#11 2019-01-15 17:22:26

онанист
Гість

Re: простой таймер - ткните носом, пожалуйста

я дрочу дрочу дрочу
и на лодочке лечу
спермой землю заливаю
с новым годом поздравляю

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму