Нужна помощь с attiny13
#41
Всем привет. народ может кто подкинет небольшую программу таймер на 1 час с возможностью вызова функций из неё
#42
Я буду применять модуль реального времени на ардуино и от него прыгать. Но он вряд ли на тиньку подойдет. У тиньки есть sda,scl?
#43
Вроде есть, но там применяется модуль, а это как то не правильно для моего ПРОЕКТА 1. Это как на фуре за буханкой хлеба в магазин съездить. Вот я нашёл один код, только его бы поменьше сделать.
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)); // Мигаем светодиодом
}
}
#44
Что то у меня цикл в цикле не получается, всего 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);
#45
Ничего не пойму , вот код, почему светодиод моргает только 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);
{
#46
(11-02-2026, 17:17)Aleks : while
У вас она открыта, как бы и не завершена. Придумайте как ее завершить.
И скобка в конце чего то открывает, а чего?

Закройте её return.
#47
И только через 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();
}
}
#48
(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);
}
}

Вот оно в железе.

Файлы вложений Эскизы
   
#49
Поработал напильником, была проблема с циклом, если задавался 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;
}
#50
Aleks, Ну у меня вот так получилось.
https://disk.yandex.ru/d/cRT9tU_r406sDQ

Aleks, Модуль реального времени отвечает за полив огорода. Выставляешь время реальное время один раз, модуль 3231 сохраняет. Далее, кнопками выбираешь во сколько полить огород (например начать поливать в 4 утра), так же указываешь продолжительность полива.
За освещение курятника отвечает модуль освещенности, как стемнеет так же можно выбрать продолжительность.
Если свет выключают на линии, то модулю 3231 все рано, а в eeprom ардуины сохраняются настройки трешхолда освещения(порог) когда сработать реле освещения.