Пешеходный светофор Нью-Йорка

Источник:

Эта декоративная лампа изображает пешеходный светофор. Внутри корпуса есть место для светодиодных лент. Я запустил свою версию с помощью ATTINY 13a, который запускает небольшой скрипт для световой последовательности. Код можно найти ниже.

Модель можно полностью распечатать на Prusa Mini, однако юбку некоторых частей придется отключить. Корпус необходимо напечатать с высотой слоя 0,15 мм, иначе слайсер поместит часть поддерживающего материала за пределы объема сборки.

Чтобы завершить сборку, вам понадобятся винты для нарезки резьбы M3x10, коммутационная плата micro-USB (например: https://tinyurl.com/USBbreakout) и небольшой переключатель. Чтобы свет не проникал сквозь стены, я использовал скотч.

Код:

#define pinRed 3
#define pinБелый 4
#define pinSwitch 2

беззнаковый длинный LastTime = 0; // Отслеживает время

недействительная настройка() {
// код установки:
pinMode(pinRed, ВЫХОД);
pinMode(pinWhite, ВЫХОД);
pinMode (pinSwitch, INPUT);
digitalWrite(pinRed, LOW);
digitalWrite(pinWhite, LOW);
}

недействительный цикл() {
if(digitalRead(pinSwitch) == HIGH){ // Если переключатель включен, включается и красный, и белый цвета.
digitalWrite(pinRed, ВЫСОКИЙ);
digitalWrite(pinWhite, ВЫСОКИЙ);
}else{ // Если переключатель выключен, используется последовательность светофора
digitalWrite(pinRed, LOW);
digitalWrite(pinWhite, ВЫСОКИЙ);
LastTime = миллис();
while(millis() -lastTime < 30000){ // Белый светится на 30 секунд
if(digitalRead(pinSwitch) == HIGH){ // Если переключатель включен, последователь��ость прерывается и программа возвращается к началу цикла()
возврат;
}
}
digitalWrite(pinWhite, LOW);
for(int i = 0; i<7; i++){ // Красный мигает 6 раз, прежде чем включиться постоянно
digitalWrite(pinRed, ВЫСОКИЙ);
LastTime = миллис();
while(millis() — LastTime <500){
if(digitalRead(pinSwitch) == HIGH){ // Если переключатель включен, последовательность прерывается и программа возвращается к началу цикла()
возврат;
}
}
digitalWrite(pinRed, LOW);
LastTime = миллис();
while(millis() — LastTime <500){
if(digitalRead(pinSwitch) == HIGH){ // Если переключатель включен, последовательность прерывается и программа возвращается к началу цикла()
возврат;
}
}
}
digitalWrite(pinRed, ВЫСОКИЙ);
LastTime = миллис();
while(millis() -lastTime < 30000){ // Красный светится на 30 секунд
if(digitalRead(pinSwitch) == HIGH){ // Если переключатель включен, последовательность прерывается и программа возвращается к началу цикла()
возврат;
}
}
}
}

12:59
6
Нет комментариев. Ваш будет первым!

Ссылка появится после регистрации

Похожие модели

Посещая этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.