что бывает со стробоскопами))
машинка 01-02-03
Мигалки на американской пожарной машинке, малому на радость.
Так а там бы и звучок какой то ему бы понравился.)
Там есть штатная сирена, и мигания мигалки (но примитивное), теперь будут и фары и стопы
В трех местах заменить uint32_t на uint16_t и уже
Скетч использует 446 байт (43%) памяти устройства. Всего доступно 1024 байт.
Глобальные переменные используют 54 байт (84%) динамической памяти, оставляя 10 байт для локальных переменных. Максимум: 64 байт.
#define LED1_PIN PB0
#define LED2_PIN PB1
#define LED3_PIN PB2
#define LED4_PIN PB3
#define LED5_PIN PB4
#define LED6_PIN PB5
// свойства задачи
struct taskData
{
bool state; // текущий статус задачи - активна/неактивна
uint16_t interval; // интервал выполнения задачи в милисекундах
uint32_t timer; // таймер задачи
};
// методы задачи
void setTaskInterval(taskData &task, uint16_t _interval);
void stopTask(taskData &task);
void startTask(taskData &task);
bool checkTask(taskData &task);
// ==== список задач ============================
taskData led1 = (taskData){true, 500, 0}; // задача активна, интервал срабатывания - 500 милисекунд
taskData led2 = (taskData){true, 500, 0}; // задача активна, интервал срабатывания - 500 милисекунд
taskData led3 = (taskData){true, 230, 0}; // задача активна, интервал срабатывания - 230 милисекунд
taskData led4 = (taskData){true, 230, 0}; // задача активна, интервал срабатывания - 230 милисекунд
taskData led5 = (taskData){true, 230, 0}; // задача активна, интервал срабатывания - 230 милисекунд
taskData led6 = (taskData){true, 230, 0}; // задача активна, интервал срабатывания - 230 милисекунд
// ==============================================
void setTaskInterval(taskData &task, uint16_t _interval)
{
task.interval = _interval;
}
void stopTask(taskData &task)
{
task.state = false;
}
void startTask(taskData &task)
{
task.state = true;
task.timer = millis();
}
bool checkTask(taskData &task)
{
bool result = false;
if (task.state && (millis() - task.timer >= task.interval))
{
result = true; // если задача активна и момент ее срабатывания наступил
task.timer = millis(); // сохраняем таймер для следующей сработки
}
return (result); // возвращаем полученный результат
}
// ==== первый светодиод ========================
void setLed1()
{
static bool led_state = true; // флаг состояния светодиода
led_state = !led_state; // меняем флаг состояния светодиода на противоположный
digitalWrite(LED1_PIN, led_state); // выполняем работу - включаем или выключаем светодиод
}
// ==== второй светодиод ========================
void setLed2()
{
static bool led_state = false; // флаг состояния светодиода
led_state = !led_state; // меняем флаг состояния светодиода на противоположный
digitalWrite(LED2_PIN, led_state); // выполняем работу - включаем или выключаем светодиод
}
// ==== третий светодиод ========================
void setLed3()
{
static bool led_state = true; // флаг состояния светодиода
led_state = !led_state; // меняем флаг состояния светодиода на противоположный
digitalWrite(LED3_PIN, led_state); // выполняем работу - включаем или выключаем светодиод
}
// ==== четвертый светодиод =====================
void setLed4()
{
static bool led_state = false; // флаг состояния светодиода
led_state = !led_state; // меняем флаг состояния светодиода на противоположный
digitalWrite(LED4_PIN, led_state); // выполняем работу - включаем или выключаем светодиод
}
// ==== пятый светодиод ========================
void setLed5()
{
static bool led_state = true; // флаг состояния светодиода
led_state = !led_state; // меняем флаг состояния светодиода на противоположный
digitalWrite(LED5_PIN, led_state); // выполняем работу - включаем или выключаем светодиод
}
// ==== пятый светодиод ========================
void setLed6()
{
static bool led_state = false; // флаг состояния светодиода
led_state = !led_state; // меняем флаг состояния светодиода на противоположный
digitalWrite(LED6_PIN, led_state); // выполняем работу - включаем или выключаем светодиод
}
// ==============================================
void tick()
{
if (checkTask(led1))
{
setLed1();
}
if (checkTask(led2))
{
setLed2();
}
if (checkTask(led3))
{
setLed3();
}
if (checkTask(led4))
{
setLed4();
}
if (checkTask(led5))
{
setLed5();
}
if (checkTask(led6))
{
setLed6();
}
}
void setup()
{
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(LED3_PIN, OUTPUT);
pinMode(LED4_PIN, OUTPUT);
pinMode(LED5_PIN, OUTPUT);
pinMode(LED6_PIN, OUTPUT);
}
void loop()
{
tick();
}
Ядро - MicroCore
Вот. А уже изначально можно было бы типы для времён задать.
А кто ж думал, что это на 13 тиньку запихивать будут ))
Ага. Только нафига это надо, скажет удивлённый читатель.)
На Али выкинули ))
А те кто запихивают в 13-ю, обычно соображают что к чему.)))
100 рублей за штуку? Пусть сами используют!
Всё началось со светофора на тиньке ![]()
Для экспериментов заказал по больше, а вдруг спалю, уже есть такие которым фъюзы накрутил, теперь молчат ![]()
375 за пять штук с доставкой. Но сегодня лотов с этой тинькой - как из ведра сыпанули ))
Я лучше за эти деньги MH-ET AtTiny88 возьму. На 99% закрывает потребности даччиков “первой линии”
такие брал 54р за шт.
да, опИска, сорри ))
Они хороши, но размерчик… ))
Кстати, нанки на 328p за 200р никому не нужны?

