что бывает со стробоскопами))
машинка 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% закрывает потребности даччиков “первой линии”
Странно, а у меня 103р. за одну и доставка бесплатная, а если пять, то 369+106 (475р.), т.е. почти те же 100р за штуку
такие брал 54р за шт.
да, опИска, сорри ))
Они хороши, но размерчик… ))
Кстати, нанки на 328p за 200р никому не нужны?