ПМК 4 курс Практические задания ПР 10 Практическая работа 10 ПМК - BysonHunter/Tavrich_college GitHub Wiki
🏠 Главная · Программирование микроконтроллеров · 4 курс · Практические задания · ПР 10
МДК.02.02 «Программирование микроконтроллеров» · 4 курс
Разработать и отладить управляющие программы для Arduino Uno, затем продемонстрировать работу макета по заданному алгоритму. Работа готовит к заданию 2 образца ДЭ и развивает навыки работы с: ввод-вывод, последовательный порт, обработка команд, режимы и таймеры.
Номер варианта совпадает с порядковым номером студента в журнале группы. Перейдите к своему варианту по ссылке:
№01 · №02 · №03 · №04 · №05 · №06 · №07 · №08 · №09 · №10 · №11 · №12 · №13 · №14 · №15 · №16 · №17 · №18 · №19 · №20 · №21 · №22 · №23 · №24 · №25
- Arduino Uno (допускается Arduino Nano), компьютер с Arduino IDE и USB-кабель.
- Макетная плата, соединительные провода, кнопка, один светодиод и резистор 220–330 Ом.
- Потенциометр для заданий, в которых используется аналоговый вход A0.
- Монитор последовательного порта со скоростью 9600 бод. Симулятор допускается по согласованию с преподавателем.
Во всех задачах одного варианта используются одинаковые обозначения выводов. Соберите цепи, необходимые для конкретной задачи:
| Элемент | Подключение | Назначение |
|---|---|---|
| Кнопка | Между цифровым входом D2 и GND | В программе настройте INPUT_PULLUP: отпущена — HIGH, нажата — LOW. |
| Светодиод | D9 → резистор 220–330 Ом → анод светодиода; катод → GND | Индикация режима или достижения порога. |
| Потенциометр | Крайние выводы → 5V и GND; средний вывод → A0 | Изменение измеряемого аналогового значения. |
| Последовательный порт | Arduino → USB → компьютер | Ввод команд и наблюдение результатов в Serial Monitor. |
Для Arduino Nano используйте выводы с теми же обозначениями. В задачах без кнопки или потенциометра соответствующие цепи можно не собирать. Если схема соединений в вашем макете отличается от таблицы, приложите её к отчёту и согласуйте с преподавателем.
- Выполните три самостоятельных скетча по задачам 1–3 своего варианта: разработайте программу по указанному алгоритму.
- В задачах 4–5 найдите ошибки в приведённых скетчах, объясните причины и исправьте программы так, чтобы устройство работало согласно требованию. В одном скетче может быть несколько ошибок.
- Для каждой задачи создайте отдельную папку с одноимённым файлом
.ino. Скомпилируйте скетч, загрузите его на плату и проверьте стартовое состояние, переходы режимов, граничные условия и сброс. - Покажите преподавателю работу всех пяти программ. В таблице испытаний для каждой задачи укажите действие, ожидаемый и фактический результат.
Общие условия: стартовое состояние — выход выключен, счётчик равен нулю, если условие задачи не задаёт иное. Короткое нажатие определяйте по фронту с подавлением дребезга 30 мс; удержание считается одним нажатием. Команды вводятся отдельной строкой с переводом строки; завершающий \r и пробелы удаляйте. Для совмещения счёта времени и ввода применяйте millis() и тип unsigned long, сравнивайте интервалы вычитанием. Периодический вывод не должен блокировать кнопку и команды.
- Титульный лист.
- Задание по своему варианту (номер и условия пяти задач).
- Схемы подключения для задач, где они требуются; если одна схема подходит нескольким задачам, достаточно привести её один раз и указать номера этих задач.
- Листинги пяти программ с комментариями; для задач 4–5 также пояснение найденных ошибок и внесённых исправлений.
- Результаты работы: скриншоты Serial Monitor с командами и ответами, а также таблица испытаний «действие — ожидаемое — фактическое». Для режимов, видимых только по светодиоду, дополнительно зафиксируйте наблюдение в таблице.
- Отдельный вывод по каждой из пяти задач.
Работа оценивается по пятибалльной системе. Преподаватель учитывает правильность алгоритмов и работы макета, умение находить и объяснять ошибки, качество исправлений, результаты проверки и полноту отчёта.
- «5» (отлично) — выполнены все пять задач; программы работают по заданным алгоритмам, ошибки найдены и объяснены, отчёт полный.
- «4» (хорошо) — выполнены все пять задач; есть отдельные недочёты в программах, проверке или отчёте, которые не мешают продемонстрировать основные режимы работы.
- «3» (удовлетворительно) — выполнены не менее трёх задач, включая хотя бы одну задачу на исправление ошибок; основные результаты показаны, но имеются существенные недочёты.
- «2» (неудовлетворительно) — выполнено менее трёх задач либо не удалось продемонстрировать работу программ по заданным алгоритмам.
Для устройства «сигнализация двери» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 7, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 362 включать D9, иначе выключать. Каждые 250 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Короткое нажатие D2 переключает D9 один раз; удержание не повторяет переключение. Объясните неисправности и подтвердите исправление испытаниями.
const byte BTN = 2, LED = 9;
bool on = false;
void setup() { pinMode(BTN, INPUT_PULLUP); pinMode(LED, OUTPUT); }
void loop() {
if (digitalRead(BTN) == HIGH) {
on = !on;
digitalWrite(LED, on);
}
}Требование: D9 мигает с полуинтервалом 250 мс; 0 немедленно выключает, 1 вновь запускает с выключенного состояния. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool enabled = true;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '0') enabled = false;
if (c == '1') enabled = true;
}
if (millis() - last >= 250) {
last = millis();
digitalWrite(LED, !digitalRead(LED));
}
}Для устройства «индикатор готовности станка» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 8, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 374 включать D9, иначе выключать. Каждые 300 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: D9 включается при A0 >= 374, иначе выключается; измеренное значение выводится в монитор последовательного порта раз в секунду. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
int v = analogRead(A0);
digitalWrite(LED, v > 374);
if (millis() - last >= 1000) Serial.println(v);
}Требование: D9 мигает с полуинтервалом 300 мс; 0 немедленно выключает, 1 вновь запускает с выключенного состояния. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool enabled = true;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '0') enabled = false;
if (c == '1') enabled = true;
}
if (millis() - last >= 300) {
last = millis();
digitalWrite(LED, !digitalRead(LED));
}
}Для устройства «контроль уровня жидкости» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 9, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 386 включать D9, иначе выключать. Каждые 350 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команда start запускает мигание D9 с полуинтервалом 350 мс, stop немедленно выключает; ввод работает во время мигания. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool running = false, level = false;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
String s = Serial.readStringUntil('\n'); s.trim();
if (s == "start") running = true;
if (s == "stop") running = false;
}
if (running && millis() - last >= 350) {
level = !level;
digitalWrite(LED, level);
}
}Требование: D9 мигает с полуинтервалом 350 мс; 0 немедленно выключает, 1 вновь запускает с выключенного состояния. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool enabled = true;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '0') enabled = false;
if (c == '1') enabled = true;
}
if (millis() - last >= 350) {
last = millis();
digitalWrite(LED, !digitalRead(LED));
}
}Для устройства «счётчик изделий» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 10, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 398 включать D9, иначе выключать. Каждые 400 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команда + увеличивает счётчик не выше 10, r обнуляет. D9 горит только при значении 10; после команды значение счётчика выводится в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
int count = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '+') count++;
if (c == 'r') count == 0;
digitalWrite(LED, count >= 10);
Serial.println(count);
}
}Требование: D9 мигает с полуинтервалом 400 мс; 0 немедленно выключает, 1 вновь запускает с выключенного состояния. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool enabled = true;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '0') enabled = false;
if (c == '1') enabled = true;
}
if (millis() - last >= 400) {
last = millis();
digitalWrite(LED, !digitalRead(LED));
}
}Для устройства «таймер проветривания» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 11, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 410 включать D9, иначе выключать. Каждые 450 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команды 1 и 0 включают и выключают D9, s выводит ON или OFF в монитор последовательного порта; старт — выключено. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool active = false;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '1') active = true;
if (c == '0') active = false;
if (c == 's') Serial.println(digitalRead(LED) ? "ON" : "OFF");
}
digitalWrite(LED, !active);
}Требование: Счётчик секунд 0…11: 1 запуск, 0 пауза, r сброс и остановка. На 11 автоматическая остановка; при каждом изменении значение выводится в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
unsigned long last = 0;
int seconds = 0;
bool running = false;
void setup() { Serial.begin(9600); Serial.println(0); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '1') running = true;
if (c == '0') running = false;
if (c == 'r') seconds = 0;
}
if (running && millis() - last >= 1000) {
last = millis();
seconds++;
Serial.println(seconds);
if (seconds > 11) running = false;
}
}Для устройства «охранный маяк» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 12, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 422 включать D9, иначе выключать. Каждые 500 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Короткое нажатие D2 переключает D9 один раз; удержание не повторяет переключение. Объясните неисправности и подтвердите исправление испытаниями.
const byte BTN = 2, LED = 9;
bool on = false;
void setup() { pinMode(BTN, INPUT_PULLUP); pinMode(LED, OUTPUT); }
void loop() {
if (digitalRead(BTN) == HIGH) {
on = !on;
digitalWrite(LED, on);
}
}Требование: Счётчик секунд 0…12: 1 запуск, 0 пауза, r сброс и остановка. На 12 автоматическая остановка; при каждом изменении значение выводится в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
unsigned long last = 0;
int seconds = 0;
bool running = false;
void setup() { Serial.begin(9600); Serial.println(0); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '1') running = true;
if (c == '0') running = false;
if (c == 'r') seconds = 0;
}
if (running && millis() - last >= 1000) {
last = millis();
seconds++;
Serial.println(seconds);
if (seconds > 12) running = false;
}
}Для устройства «индикатор перегрева» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 13, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 434 включать D9, иначе выключать. Каждые 550 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: D9 включается при A0 >= 434, иначе выключается; измеренное значение выводится в монитор последовательного порта раз в секунду. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
int v = analogRead(A0);
digitalWrite(LED, v > 434);
if (millis() - last >= 1000) Serial.println(v);
}Требование: Счётчик секунд 0…6: 1 запуск, 0 пауза, r сброс и остановка. На 6 автоматическая остановка; при каждом изменении значение выводится в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
unsigned long last = 0;
int seconds = 0;
bool running = false;
void setup() { Serial.begin(9600); Serial.println(0); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '1') running = true;
if (c == '0') running = false;
if (c == 'r') seconds = 0;
}
if (running && millis() - last >= 1000) {
last = millis();
seconds++;
Serial.println(seconds);
if (seconds > 6) running = false;
}
}Для устройства «сигнал конца цикла» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 6, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 446 включать D9, иначе выключать. Каждые 200 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команда start запускает мигание D9 с полуинтервалом 350 мс, stop немедленно выключает; ввод работает во время мигания. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool running = false, level = false;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
String s = Serial.readStringUntil('\n'); s.trim();
if (s == "start") running = true;
if (s == "stop") running = false;
}
if (running && millis() - last >= 350) {
level = !level;
digitalWrite(LED, level);
}
}Требование: Счётчик секунд 0…7: 1 запуск, 0 пауза, r сброс и остановка. На 7 автоматическая остановка; при каждом изменении значение выводится в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
unsigned long last = 0;
int seconds = 0;
bool running = false;
void setup() { Serial.begin(9600); Serial.println(0); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '1') running = true;
if (c == '0') running = false;
if (c == 'r') seconds = 0;
}
if (running && millis() - last >= 1000) {
last = millis();
seconds++;
Serial.println(seconds);
if (seconds > 7) running = false;
}
}Для устройства «контроль освещённости» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 7, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 458 включать D9, иначе выключать. Каждые 250 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команда + увеличивает счётчик не выше 8, r обнуляет. D9 горит только при значении 8; после команды значение счётчика выводится в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
int count = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '+') count++;
if (c == 'r') count == 0;
digitalWrite(LED, count >= 8);
Serial.println(count);
}
}Требование: Счётчик секунд 0…8: 1 запуск, 0 пауза, r сброс и остановка. На 8 автоматическая остановка; при каждом изменении значение выводится в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
unsigned long last = 0;
int seconds = 0;
bool running = false;
void setup() { Serial.begin(9600); Serial.println(0); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '1') running = true;
if (c == '0') running = false;
if (c == 'r') seconds = 0;
}
if (running && millis() - last >= 1000) {
last = millis();
seconds++;
Serial.println(seconds);
if (seconds > 8) running = false;
}
}Для устройства «пульт насоса» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 8, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 470 включать D9, иначе выключать. Каждые 300 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команды 1 и 0 включают и выключают D9, s выводит ON или OFF в монитор последовательного порта; старт — выключено. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool active = false;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '1') active = true;
if (c == '0') active = false;
if (c == 's') Serial.println(digitalRead(LED) ? "ON" : "OFF");
}
digitalWrite(LED, !active);
}Требование: Строковые команды on, off, status управляют D9 и выводят его состояние; для неизвестной команды в монитор последовательного порта выводится ERR. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool on = false;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
String s = Serial.readStringUntil('\n');
if (s == "on") on = true;
else if (s == "off") on = false;
else if (s == "status") Serial.println(on ? "ON" : "OFF");
else Serial.println("ERR");
digitalWrite(LED, on);
}
}Для устройства «счётчик посетителей» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 9, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 482 включать D9, иначе выключать. Каждые 350 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Короткое нажатие D2 переключает D9 один раз; удержание не повторяет переключение. Объясните неисправности и подтвердите исправление испытаниями.
const byte BTN = 2, LED = 9;
bool on = false;
void setup() { pinMode(BTN, INPUT_PULLUP); pinMode(LED, OUTPUT); }
void loop() {
if (digitalRead(BTN) == HIGH) {
on = !on;
digitalWrite(LED, on);
}
}Требование: Строковые команды on, off, status управляют D9 и выводят его состояние; для неизвестной команды в монитор последовательного порта выводится ERR. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool on = false;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
String s = Serial.readStringUntil('\n');
if (s == "on") on = true;
else if (s == "off") on = false;
else if (s == "status") Serial.println(on ? "ON" : "OFF");
else Serial.println("ERR");
digitalWrite(LED, on);
}
}Для устройства «режим вентилятора» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 10, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 494 включать D9, иначе выключать. Каждые 400 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: D9 включается при A0 >= 494, иначе выключается; измеренное значение выводится в монитор последовательного порта раз в секунду. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
int v = analogRead(A0);
digitalWrite(LED, v > 494);
if (millis() - last >= 1000) Serial.println(v);
}Требование: Строковые команды on, off, status управляют D9 и выводят его состояние; для неизвестной команды в монитор последовательного порта выводится ERR. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool on = false;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
String s = Serial.readStringUntil('\n');
if (s == "on") on = true;
else if (s == "off") on = false;
else if (s == "status") Serial.println(on ? "ON" : "OFF");
else Serial.println("ERR");
digitalWrite(LED, on);
}
}Для устройства «таймер опыта» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 11, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 506 включать D9, иначе выключать. Каждые 450 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команда start запускает мигание D9 с полуинтервалом 350 мс, stop немедленно выключает; ввод работает во время мигания. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool running = false, level = false;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
String s = Serial.readStringUntil('\n'); s.trim();
if (s == "start") running = true;
if (s == "stop") running = false;
}
if (running && millis() - last >= 350) {
level = !level;
digitalWrite(LED, level);
}
}Требование: Строковые команды on, off, status управляют D9 и выводят его состояние; для неизвестной команды в монитор последовательного порта выводится ERR. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool on = false;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
String s = Serial.readStringUntil('\n');
if (s == "on") on = true;
else if (s == "off") on = false;
else if (s == "status") Serial.println(on ? "ON" : "OFF");
else Serial.println("ERR");
digitalWrite(LED, on);
}
}Для устройства «контроль доступа» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 12, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 518 включать D9, иначе выключать. Каждые 500 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команда + увеличивает счётчик не выше 6, r обнуляет. D9 горит только при значении 6; после команды значение счётчика выводится в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
int count = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '+') count++;
if (c == 'r') count == 0;
digitalWrite(LED, count >= 6);
Serial.println(count);
}
}Требование: Строковые команды on, off, status управляют D9 и выводят его состояние; для неизвестной команды в монитор последовательного порта выводится ERR. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool on = false;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
String s = Serial.readStringUntil('\n');
if (s == "on") on = true;
else if (s == "off") on = false;
else if (s == "status") Serial.println(on ? "ON" : "OFF");
else Serial.println("ERR");
digitalWrite(LED, on);
}
}Для устройства «аварийный останов» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 13, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 530 включать D9, иначе выключать. Каждые 550 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команды 1 и 0 включают и выключают D9, s выводит ON или OFF в монитор последовательного порта; старт — выключено. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool active = false;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '1') active = true;
if (c == '0') active = false;
if (c == 's') Serial.println(digitalRead(LED) ? "ON" : "OFF");
}
digitalWrite(LED, !active);
}Требование: ШИМ D9: 0 задаёт 0, 1 задаёт 200, 2 задаёт 255, s выводит текущий уровень в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
int duty = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '0') duty = 0;
else if (c == '1') duty = 200;
else if (c == '2') duty = 255;
else if (c == 's') Serial.println(duty);
analogWrite(LED, duty / 255);
}
}Для устройства «сигнал заполнения» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 6, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 542 включать D9, иначе выключать. Каждые 200 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Короткое нажатие D2 переключает D9 один раз; удержание не повторяет переключение. Объясните неисправности и подтвердите исправление испытаниями.
const byte BTN = 2, LED = 9;
bool on = false;
void setup() { pinMode(BTN, INPUT_PULLUP); pinMode(LED, OUTPUT); }
void loop() {
if (digitalRead(BTN) == HIGH) {
on = !on;
digitalWrite(LED, on);
}
}Требование: ШИМ D9: 0 задаёт 0, 1 задаёт 80, 2 задаёт 255, s выводит текущий уровень в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
int duty = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '0') duty = 0;
else if (c == '1') duty = 80;
else if (c == '2') duty = 255;
else if (c == 's') Serial.println(duty);
analogWrite(LED, duty / 255);
}
}Для устройства «индикатор заряда» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 7, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 554 включать D9, иначе выключать. Каждые 250 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: D9 включается при A0 >= 554, иначе выключается; измеренное значение выводится в монитор последовательного порта раз в секунду. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
int v = analogRead(A0);
digitalWrite(LED, v > 554);
if (millis() - last >= 1000) Serial.println(v);
}Требование: ШИМ D9: 0 задаёт 0, 1 задаёт 120, 2 задаёт 255, s выводит текущий уровень в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
int duty = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '0') duty = 0;
else if (c == '1') duty = 120;
else if (c == '2') duty = 255;
else if (c == 's') Serial.println(duty);
analogWrite(LED, duty / 255);
}
}Для устройства «счётчик импульсов» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 8, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 566 включать D9, иначе выключать. Каждые 300 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команда start запускает мигание D9 с полуинтервалом 350 мс, stop немедленно выключает; ввод работает во время мигания. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool running = false, level = false;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
String s = Serial.readStringUntil('\n'); s.trim();
if (s == "start") running = true;
if (s == "stop") running = false;
}
if (running && millis() - last >= 350) {
level = !level;
digitalWrite(LED, level);
}
}Требование: ШИМ D9: 0 задаёт 0, 1 задаёт 160, 2 задаёт 255, s выводит текущий уровень в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
int duty = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '0') duty = 0;
else if (c == '1') duty = 160;
else if (c == '2') duty = 255;
else if (c == 's') Serial.println(duty);
analogWrite(LED, duty / 255);
}
}Для устройства «таймер перерыва» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 9, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 578 включать D9, иначе выключать. Каждые 350 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команда + увеличивает счётчик не выше 11, r обнуляет. D9 горит только при значении 11; после команды значение счётчика выводится в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
int count = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '+') count++;
if (c == 'r') count == 0;
digitalWrite(LED, count >= 11);
Serial.println(count);
}
}Требование: ШИМ D9: 0 задаёт 0, 1 задаёт 200, 2 задаёт 255, s выводит текущий уровень в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
int duty = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '0') duty = 0;
else if (c == '1') duty = 200;
else if (c == '2') duty = 255;
else if (c == 's') Serial.println(duty);
analogWrite(LED, duty / 255);
}
}Для устройства «контроль влажности» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 10, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 590 включать D9, иначе выключать. Каждые 400 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команды 1 и 0 включают и выключают D9, s выводит ON или OFF в монитор последовательного порта; старт — выключено. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool active = false;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '1') active = true;
if (c == '0') active = false;
if (c == 's') Serial.println(digitalRead(LED) ? "ON" : "OFF");
}
digitalWrite(LED, !active);
}Требование: Гистерезис: D9 включается при A0 >= 590, выключается при A0 <= 520; между порогами состояние сохраняется. Раз в секунду выводятся A0 и состояние. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool alarm = false;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
int v = analogRead(A0);
if (v >= 590) alarm = true;
else if (v < 520) alarm = false;
else alarm = false;
digitalWrite(LED, alarm);
if (millis() - last >= 1000) {
last = millis();
Serial.println(v);
}
}Для устройства «индикатор линии» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 11, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 602 включать D9, иначе выключать. Каждые 450 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Короткое нажатие D2 переключает D9 один раз; удержание не повторяет переключение. Объясните неисправности и подтвердите исправление испытаниями.
const byte BTN = 2, LED = 9;
bool on = false;
void setup() { pinMode(BTN, INPUT_PULLUP); pinMode(LED, OUTPUT); }
void loop() {
if (digitalRead(BTN) == HIGH) {
on = !on;
digitalWrite(LED, on);
}
}Требование: Гистерезис: D9 включается при A0 >= 602, выключается при A0 <= 532; между порогами состояние сохраняется. Раз в секунду выводятся A0 и состояние. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool alarm = false;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
int v = analogRead(A0);
if (v >= 602) alarm = true;
else if (v < 532) alarm = false;
else alarm = false;
digitalWrite(LED, alarm);
if (millis() - last >= 1000) {
last = millis();
Serial.println(v);
}
}Для устройства «сигнал движения» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 12, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 614 включать D9, иначе выключать. Каждые 500 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: D9 включается при A0 >= 614, иначе выключается; измеренное значение выводится в монитор последовательного порта раз в секунду. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
int v = analogRead(A0);
digitalWrite(LED, v > 614);
if (millis() - last >= 1000) Serial.println(v);
}Требование: Гистерезис: D9 включается при A0 >= 614, выключается при A0 <= 544; между порогами состояние сохраняется. Раз в секунду выводятся A0 и состояние. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool alarm = false;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
int v = analogRead(A0);
if (v >= 614) alarm = true;
else if (v < 544) alarm = false;
else alarm = false;
digitalWrite(LED, alarm);
if (millis() - last >= 1000) {
last = millis();
Serial.println(v);
}
}Для устройства «таймер полива» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 13, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 626 включать D9, иначе выключать. Каждые 550 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команда start запускает мигание D9 с полуинтервалом 350 мс, stop немедленно выключает; ввод работает во время мигания. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool running = false, level = false;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
String s = Serial.readStringUntil('\n'); s.trim();
if (s == "start") running = true;
if (s == "stop") running = false;
}
if (running && millis() - last >= 350) {
level = !level;
digitalWrite(LED, level);
}
}Требование: Гистерезис: D9 включается при A0 >= 626, выключается при A0 <= 556; между порогами состояние сохраняется. Раз в секунду выводятся A0 и состояние. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool alarm = false;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
int v = analogRead(A0);
if (v >= 626) alarm = true;
else if (v < 556) alarm = false;
else alarm = false;
digitalWrite(LED, alarm);
if (millis() - last >= 1000) {
last = millis();
Serial.println(v);
}
}Для устройства «счётчик нажатий» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 6, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 638 включать D9, иначе выключать. Каждые 200 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команда + увеличивает счётчик не выше 9, r обнуляет. D9 горит только при значении 9; после команды значение счётчика выводится в монитор последовательного порта. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
int count = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '+') count++;
if (c == 'r') count == 0;
digitalWrite(LED, count >= 9);
Serial.println(count);
}
}Требование: Гистерезис: D9 включается при A0 >= 638, выключается при A0 <= 568; между порогами состояние сохраняется. Раз в секунду выводятся A0 и состояние. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool alarm = false;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
int v = analogRead(A0);
if (v >= 638) alarm = true;
else if (v < 568) alarm = false;
else alarm = false;
digitalWrite(LED, alarm);
if (millis() - last >= 1000) {
last = millis();
Serial.println(v);
}
}Для устройства «тренажёр реакции» напишите скетч: короткое нажатие D2 переключает WAIT → RUN → PAUSE → WAIT. В RUN D9 горит, в остальных режимах выключен. При переходе выводите название режима в монитор последовательного порта. Старт — WAIT. Удержание кнопки не создаёт дополнительных переходов. Покажите два полных цикла.
Команды start, stop, reset, status: счёт секунд от 0 до 7, пауза с сохранением значения, сброс в 0 с остановкой, запрос состояния. На верхней границе счёт автоматически останавливается и D9 загорается; после reset он гаснет. start после паузы продолжает счёт, а после достижения границы требует предварительного reset. Кнопка D2 запускает из начального состояния и ставит на паузу из работающего. При каждом изменении выводите значение счётчика в монитор последовательного порта. Покажите паузу, продолжение и границу.
Читать A0; при A0 ≥ 650 включать D9, иначе выключать. Каждые 250 мс выводить в монитор последовательного порта строку A0=<число>;LED=ON/OFF. По команде s немедленно выводите текущие данные в монитор последовательного порта без сдвига периодического расписания; m выводит в монитор последовательного порта минимум и максимум измерений с момента запуска; r начинает накопление заново с текущего значения. Проверьте ниже, на и выше порога.
Требование: Команды 1 и 0 включают и выключают D9, s выводит ON или OFF в монитор последовательного порта; старт — выключено. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool active = false;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '1') active = true;
if (c == '0') active = false;
if (c == 's') Serial.println(digitalRead(LED) ? "ON" : "OFF");
}
digitalWrite(LED, !active);
}Требование: D9 мигает с полуинтервалом 200 мс; 0 немедленно выключает, 1 вновь запускает с выключенного состояния. Объясните неисправности и подтвердите исправление испытаниями.
const byte LED = 9;
bool enabled = true;
unsigned long last = 0;
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); }
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == '0') enabled = false;
if (c == '1') enabled = true;
}
if (millis() - last >= 200) {
last = millis();
digitalWrite(LED, !digitalRead(LED));
}
}← Практическая работа № 9 · Практическая работа №11. Разработка загрузочной и диагностической программы →