11-02-2026, 13:27
Всем привет. народ может кто подкинет небольшую программу таймер на 1 час с возможностью вызова функций из неё
|
Нужна помощь с attiny13
|
|
11-02-2026, 13:27
Всем привет. народ может кто подкинет небольшую программу таймер на 1 час с возможностью вызова функций из неё
11-02-2026, 14:14
Я буду применять модуль реального времени на ардуино и от него прыгать. Но он вряд ли на тиньку подойдет. У тиньки есть sda,scl?
11-02-2026, 14:38
Вроде есть, но там применяется модуль, а это как то не правильно для моего ПРОЕКТА
. Это как на фуре за буханкой хлеба в магазин съездить. Вот я нашёл один код, только его бы поменьше сделать.const int ledPin = 1; // Пин светодиода void setup() { pinMode(ledPin, OUTPUT); } void loop() { static unsigned long previousMillis = 0; // Переменная для хранения предыдущего времени const long interval = 1000; // Интервал в миллисекундах (1 секунда) unsigned long currentMillis = millis(); // Получаем текущее время // Если прошло достаточно времени с момента последнего мигания if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; // Запоминаем текущее время digitalWrite(ledPin, !digitalRead(ledPin)); // Мигаем светодиодом } }
11-02-2026, 16:45
Что то у меня цикл в цикле не получается, всего 6 раз диодом моргает
int Rabota(){ int sek,min = 6; int del = 500; int chas = 3; // ReadChas(); digitalWrite(PB2, HIGH); //включаем реле на время в -> ReadChas(); do{ do{ do{ delay(del); digitalWrite(1, HIGH); delay(del); digitalWrite(1, LOW); --sek; }while(sek > 0); --min; }while(min > 0); --chas; }while(chas > 0);
11-02-2026, 17:17
Ничего не пойму , вот код, почему светодиод моргает только 11 раз, может тут тонкасть какая есть ?
int Rabota(){ int sek = 6; int min = 6; int del = 500; int chas = 3; do{ do{ delay(del); digitalWrite(1, HIGH); delay(del); digitalWrite(1, LOW); --sek; }while(sek > 0); --min; }while(min > 0); {
11-02-2026, 17:36
11-02-2026, 20:29
И только через For всё получилось.
for (int i=chas-1; i >= 0; i--) { for (int i=min-1; i >= 0; i--) { for (int i=sek-1; i >= 0; i--) { LedMorg(del,1); // идём моргать 200-пауза 0-пин Пауза 1сек } ReadChas(); } }
11-02-2026, 23:42
(11-02-2026, 17:36)-vlad- : Закройте её return.За return - отдельное спасибо, всё забываю. " Фото Реле с Таймером выключения " Работает так: При наступлении темноты (Регулируется крутиком R2 ) включается реле которое включает нагрузку ( лампочку, насос, кресло качалку .......), через некоторое время (регулируется крутиком R3 - от 1 до 6 часов с шагом в 1 час) выключается реле и отключает нагрузку (ну вы уже знаете). Всё за размер кода переживал, а только на 55% её и занял и то с излишеством. Ну вооот тестовой-рабочий вариант, может слегка надфилем подточить и только. int ledPin = 0; // Пин к которому подключен светодиод analog_pin_t AnChasPin = A2; //Аналог пин время analog_pin_t AnFotoPin = A3; // Аналог пин свет Пин к которому подключен фоторезистор //analog_pin_t Motor = A1; int LedMorg( int pauz, int ledPin) // функция моргания светодиодами. экономим место { digitalWrite(ledPin, HIGH); delay(pauz); digitalWrite(ledPin, LOW); delay(pauz); } int ReadChas() // функция перевода напряжения на аналоговом пину A2 в задержку выключения { Povtor: delay(100); int val = analogRead(AnChasPin); delay(100); int val2 = analogRead(AnChasPin); if (val2 == val) { val2 = val / 150; if (val2 <= 0) int val2 = 1; if (val2 >= 7) int val2 = 6; val = val2; do { --val2; LedMorg(200,0); // идём моргать 200-пауза 0-пин } while(val2 > 0); } if (val >= 7) goto Povtor; // ловим ошибку датчика или хрен его знает чего если ошибка опросить датчики заново return val; } boolean ReadFoto(){ // Подпрограмма определения освещения delay(100); return (analogRead(AnFotoPin) > 400);// читаем что на а3 пине Trye если > 400 } void setup() { pinMode(ledPin, OUTPUT); // назначаем пин ledPin выходом pinMode(PB1, OUTPUT); pinMode(PB2, OUTPUT); pinMode(AnChasPin, INPUT); // назначаем пин AnChasPin аналоговым входом pinMode(AnFotoPin, INPUT); // назначаем пин AnChasPin аналоговым входом } void loop() { // тело программы ReadChas(); // вызов функции из тела программы if (ReadFoto()) Rabota() ; // false - день true - (ночь идём на работу) } int Rabota(){ int sek = 60; // 60; int min = 60; int del = 499; // 499; int chas = ReadChas(); boolean noch = ReadFoto(); pinMode(PB2, OUTPUT); digitalWrite(PB2, HIGH); //включаем реле на время в -> ReadChas(); delay(2000); for (int i=chas; i >= 0; i--) { for (int i=min-1; i >= 0; i--) { for (int i=sek-1; i >= 0; i--) { LedMorg(del,1); // идём моргать 200-пауза 0-пин Пауза 1сек } ReadChas(); } } digitalWrite(PB2, LOW); //выключаем реле, кончилось время -> ReadChas(); Den: ReadChas(); // вызов функции из тела программы if (ReadFoto()){ // false - день true - Ночь (День идём ждать ночь) digitalWrite(PB1, !digitalRead(1)); delay(1000); goto Den;} digitalWrite(PB1, LOW); int a = 500; while(a > 0) { LedMorg(a,1); // поморгаем чутка работа закончилась. LedMorg(500-a,0); a = a - 50; } a = 6; while(a > 0) { --a; digitalWrite(PB1, !digitalRead(1)); // поморгаем чутка работа закончилась. digitalWrite(PB0, !digitalRead(0)); delay(1000); } } Вот оно в железе.
12-02-2026, 20:18
Поработал напильником, была проблема с циклом, если задавался 1час работы всё работало нормально, но если 2 или 3,4,5,6 - то работала на час больше установленного. Устранил.
int ledPin = 0; // Пин к которому подключен светодиод analog_pin_t AnChasPin = A2; //Аналог пин время analog_pin_t AnFotoPin = A3; // Аналог пин свет Пин к которому подключен фоторезистор analog_pin_t Motor = A1; int LedMorg( int pauz, int ledPin) // функция моргания светодиодами. экономим место { digitalWrite(ledPin, HIGH); delay(pauz); digitalWrite(ledPin, LOW); delay(pauz); return pauz,pauz; } int ReadChas() // функция перевода напряжения на аналоговом пину A2 в задержку выключения { Povtor: delay(100); int val = analogRead(AnChasPin); delay(100); int val2 = analogRead(AnChasPin); if (val2 == val) { val2 = val / 150; if (val2 <= 0) int val2 = 1; if (val2 >= 7) int val2 = 6; val = val2; do { --val2; LedMorg(200,0); // идём моргать 200-пауза 0-пин } while(val2 > 0); } if (val >= 7) goto Povtor; // ловим ошибку датчика или хрен его знает чего если ошибка опросить датчики заново return (floor(val)); } boolean ReadFoto(){ // Подпрограмма определения освещения delay(100); return (analogRead(AnFotoPin) > 400);// читаем что на а3 пине Trye если > 400 } void setup() { pinMode(ledPin, OUTPUT); // назначаем пин ledPin выходом pinMode(PB1, OUTPUT); pinMode(PB2, OUTPUT); pinMode(AnChasPin, INPUT); // назначаем пин AnChasPin аналоговым входом pinMode(AnFotoPin, INPUT); // назначаем пин AnChasPin аналоговым входом } void loop() { // тело программы ReadChas(); // вызов функции из тела программы if (ReadFoto()) Rabota() ; // falseм- день true - (ночь идём на работу) } int Rabota(){ int sek = 60; // 60; int min = 60; // 60; int del = 500; // 500; int chas = ReadChas(); boolean noch = ReadFoto(); pinMode(PB2, OUTPUT); digitalWrite(PB2, HIGH); //включаем реле на время в -> ReadChas(); delay(2000); do { for (int i2 = min; i2 > 0; i2--) { for (int i3 = sek; i3 > 0; i3--) { LedMorg(del,1); // идём моргать 200-пауза 0-пин Пауза 1сек } ReadChas(); } chas--; } while(chas > 0); digitalWrite(PB2, LOW); //выключаем реле, кончилось время -> ReadChas(); Den: ReadChas(); // вызов функции из тела программы if (ReadFoto()){ // false - день true - Ночь (День идём ждать ночь) digitalWrite(PB1, !digitalRead(1)); delay(1000); goto Den;} digitalWrite(PB1, LOW); int a = 12; while(a > 0) { --a; digitalWrite(PB1, !digitalRead(1)); // поморгаем чутка работа закончилась. digitalWrite(PB0, !digitalRead(0)); delay(1000); } return a; }
15-02-2026, 14:40
Aleks, Ну у меня вот так получилось.
https://disk.yandex.ru/d/cRT9tU_r406sDQ Aleks, Модуль реального времени отвечает за полив огорода. Выставляешь время реальное время один раз, модуль 3231 сохраняет. Далее, кнопками выбираешь во сколько полить огород (например начать поливать в 4 утра), так же указываешь продолжительность полива. За освещение курятника отвечает модуль освещенности, как стемнеет так же можно выбрать продолжительность. Если свет выключают на линии, то модулю 3231 все рано, а в eeprom ардуины сохраняются настройки трешхолда освещения(порог) когда сработать реле освещения. |
|
« Предыдущая тема Следующая »
|