#3Новичок

Светофор

4.8(131)
397 собрано
Светофор
Крошечная копия светофора, который ты каждый день видишь на дороге. Красный горит две секунды, жёлтый мигает на мгновение, зелёный горит две секунды, затем через жёлтый снова возвращается красный, и так по кругу. Включая и выключая три светодиода по очереди, ты видишь, как складывается тайминг.

Видео

Схема

Светофор - Circuit

Исходный код

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Светофор
4// ─────────────────────────────────────────
5// Цикл светофора на красном, жёлтом и зелёном светодиодах: красный 2 с,
6// жёлтый 0,3 с, зелёный 2 с, жёлтый 0,3 с, затем всё сначала.
7//
8// Пины:
9//   D2 -> Красный светодиод
10//   D3 -> Жёлтый светодиод
11//   D4 -> Зелёный светодиод
12//   Каждый светодиод с резистором 330 ohm
13
14void setup() {
15  pinMode(2,OUTPUT);    // Красный
16  pinMode(3,OUTPUT);    // Жёлтый
17  pinMode(4,OUTPUT);    // Зелёный
18}
19
20void loop() {
21  // Красный вкл, ждать 2 с
22  digitalWrite(2,HIGH);
23  digitalWrite(3,LOW);
24  digitalWrite(4,LOW);
25  delay(2000);
26  // Жёлтый вкл, ждать 0,3 с
27  digitalWrite(2,LOW);
28  digitalWrite(3,HIGH);
29  digitalWrite(4,LOW);
30  delay(300);
31  // Зелёный вкл, ждать 2 с
32  digitalWrite(2,LOW);
33  digitalWrite(3,LOW);
34  digitalWrite(4,HIGH);
35  delay(2000);
36  // Жёлтый вкл, затем снова красный
37  digitalWrite(2,LOW);
38  digitalWrite(3,HIGH);
39  digitalWrite(4,LOW);
40  delay(300);
41}
42

Частые вопросы

Сколько должен гореть жёлтый на светофоре?

В настоящих светофорах жёлтый обычно горит 3–4 секунды. В проекте это время задаётся функцией `delay()`; если красный и зелёный держать дольше, а жёлтый — короче, цикл получится очень похожим на реальный.

Почему используется резистор 330 Ω, а не 220 Ω?

Резистор 330 Ω немного снижает ток (примерно до 9–10 mA); светодиоды по-прежнему хорошо видны, а с пинов потребляется меньше суммарного тока. С резистором 220 Ω тоже работает, просто светодиоды чуть ярче.

Можно ли добавить кнопку для пешеходов?

Да. Можно добавить кнопку и стягивающий резистор 10 kΩ и читать её через `digitalRead`. При нажатии кнопки можно переключить цикл на красный и включить отдельный зелёный светодиод для пешеходов; если использовать `millis()` вместо `delay`, нажатие будет замечено сразу.

Порядок светодиодов перепутан. Что делать?

Сверь по очереди определения пинов в коде (красный, жёлтый, зелёный) с проводами в схеме. Проще всего зажечь каждый светодиод отдельным тестовым кодом и проверить, к какому пину он подключён.