Таймер
- Войдите на сайт для отправки комментариев
Ср, 15/06/2016 - 20:17
Здравствуйте. Подскажите, пожалуйста, как можно реализовать такую фишку: мне нужно, чтобы каждые 6 часов с ардуино на реле подавался сигнал длиной секунд 10. В интернете посмотрел, но мне показалось, что их коды перегружены лишней информации. Хотелось, чтобы код занимал мало места и был прост
класс титановый велосипед для delay без delay().
#define SIGNAL_PIN 3 void setup() { pinMode(SIGNAL_PIN, OUTPUT); } void loop() { digitalWrite(SIGNAL_PIN, HIGH); // включить сигнал delay(1000 * 10); // ждать 10 секунд digitalWrite(SIGNAL_PIN, LOW); // выключить сигнал delay(1000ul * 60 * 60 * 6); // ждать 6 часов }ЕвгенийП уже привёл решение, однако, я уточню: есть реле, которые включаются по низкому уровню, есть - которые по высокому. Поэтому прямое указание HIGH как "включить реле" - неверно, надо определить константы уровней для включённого и выключенного реле, и в коде юзать уже именно их, как-то так:
#define SIGNAL_PIN 3 #define RELAY_ON LOW // уровень для включения реле #define RELAY_OFF HIGH // уровень для выключения реле void setup() { pinMode(SIGNAL_PIN, OUTPUT); } void loop() { digitalWrite(SIGNAL_PIN, RELAY_ON); // включить сигнал delay(1000 * 10); // ждать 10 секунд digitalWrite(SIGNAL_PIN, RELAY_OFF); // выключить сигнал delay(1000ul * 60 * 60 * 6); // ждать 6 часов }А то у меня, например, все реле вкл по низкому уровню ;)
нафига вообще делают такие реле? Они при включении питания всегда дрыгаются, ибо изначально уровень LOW.
В смысле - реле, включающиеся по низкому уровню? Так это правильней и грамотней, да и не дрыгается ничего, вообще-то - надо пользовать расово верные модули :) Да даже если дрыгаются - что мешает подтянуть линию к питанию, чтоб не дрыгались?
что мешает
враги
нафига вообще делают такие реле? Они при включении питания всегда дрыгаются, ибо изначально уровень LOW.
Изначально не LOW, а Hi-Z (ибо вход). LOW там появится, когда проинициализируем пин на выход.
Чтобы не дёргалось, делаем так:
setup() { digitalWrite(pin, HIGH); pinMode(pin, OUTPUT); }То есть, сначала включаем подтягивающий резистор в режиме входа, а только потом переводим на выход. И никакого LOW там не будет.