LAB #3. Библиотека COM-port
Объект Serial. Цикл if - else if
Чтение данных через Com-port
Использование нескольких условий в цикле
case - break краткая запись условий.

1.Использование условных операторов в Arduino

void loop() {
    int number = 5;  // загаданное число
    int guess;       // предположение игрока
    
    // Получаем предположение от игрока
    guess = Serial.parseInt();
    
    // Проверяем предположение
    if (guess < 0 || guess > 9) {
        Serial.println("Число должно быть от 0 до 9!");
    } else if (guess < number) {
        Serial.println("Меньше! Попробуйте еще раз");
    } else if (guess > number) {
        Serial.println("Больше! Попробуйте еще раз");
    } else {
        Serial.println("Поздравляем! Вы угадали число!");
    }
}

Разбор кода:

  • if проверяет первое условие
  • else if проверяет следующие условия последовательно
  • else выполняется, если все предыдущие условия ложны
Программа проверяет:
Корректность ввода/ Значение меньше загаданного/ Значение больше загаданного/ Равенство значений

2. Использование switch-case

void loop() {
    int number = 5;  // загаданное число
    int guess;       // предположение игрока
    
    guess = Serial.parseInt();
    
    switch (guess) {
        case 0 ... 4:
            Serial.println("Меньше! Попробуйте еще раз");
            break;
            
        case 6 ... 9:
            Serial.println("Больше! Попробуйте еще раз");
            break;
            
        case number:
            Serial.println("Поздравляем! Вы угадали число!");
            break;
            
        default:
            Serial.println("Число должно быть от 0 до 9!");
            break;
    }
}
Важные особенности switch-case:
  • Работает только с целочисленными значениями
  • Каждый case должен заканчиваться break
  • default выполняется, если не подошло ни одно условие
  • Можно использовать диапазоны значений (Arduino IDE 1.6.20+)

Сравнение методов

Преимущества else if:

Работает с любыми типами данных

Более гибкий в использовании

Проще для понимания начинающих

Преимущества switch-case:

Более компактный код для простых проверок

Быстрее выполняется для целочисленных значений

Удобен при проверке конкретных значений

int score = 85;

// С else if
if (score >= 90) {
    Serial.println("Отлично!");
} else if (score >= 75) {
    Serial.println("Хорошо");
} else if (score >= 60) {
    Serial.println("Удовлетворительно");
} else {
    Serial.println("Неудовлетворительно");
}

// С switch-case (упрощенный вариант)
switch (score / 10) {
    case 9:
    case 10:
        Serial.println("Отлично!");
        break;
    case 7:
    case 8:
        Serial.println("Хорошо");
        break;
    case 6:
        Serial.println("Удовлетворительно");
        break;
    default:
        Serial.println("Неудовлетворительно");
        break;
}

пример выбора выставляемой оценки
Операторы условий в Arduino

Основные операторы условий в Arduino

1. Операторы сравнения

Равно (==)

if (a == b) { // true, если a равно b
    // код
}
        

Не равно (!=)

if (a != b) { // true, если a не равно b
    // код
}
        

Больше (>) и Меньше (<)

if (a > b) { // true, если a больше b
    // код
}

if (a < b) { // true, если a меньше b
    // код
}
        

Больше или равно (>=) и Меньше или равно (<=)

if (a >= b) { // true, если a больше или равно b
    // код
}

if (a <= b) { // true, если a меньше или равно b
    // код
}
        

2. Логические операторы

И (&&)

if (a > 0 && b < 10) { // true, если оба условия верны
    // код
}
        

ИЛИ (||)

if (a == 0 || b == 0) { // true, если хотя бы одно условие верно
    // код
}
        

НЕ (!)

if (!digitalRead(pin)) { // true, если значение false
    // код
}
        

3. Примеры использования

Пример 1: Проверка диапазона

int value = 7;
if (value >= 0 && value <= 10) {
    Serial.println("Число в диапазоне");
}
        

Пример 2: Альтернативные условия

int buttonState = digitalRead(pin);
if (buttonState == HIGH || buttonState == LOW) {
    Serial.println("Кнопка нажата или отпущена");
}
        

Пример 3: Отрицание

bool flag = false;
if (!flag) {
    Serial.println("Флаг не установлен");
}
        

4. Комбинированные условия

int sensorValue = analogRead(A0);
if (sensorValue > 500 && sensorValue < 1000) {
    // значение в допустимом диапазоне
} 
else if (sensorValue <= 500 || sensorValue >= 1000) {
    // значение вне диапазона
} 
else {
    // ошибка
}
    

5. Приоритет операторов

  1. НЕ (!)
  2. Сравнение (==, !=, >, <, >=, <=)
  3. И (&&)
  4. ИЛИ (||)

6. Важные замечания

  • Всегда используйте фигурные скобки {} даже для однострочных условий
  • Проверяйте типы данных перед сравнением
  • Используйте скобки для сложных условий
  • Избегайте сравнения float чисел на равенство

7. Пример правильного оформления

if ((a > 0 && a < 10) || (b == 5 && c != 0)) {
    // безопасный код
}
    

ЗАДАНИЕ

разбор 21.10

сдача кода 28.10

Написать код программы: "угадай число от 0 до 9" один код на бригаду.

Основные элементы кода:
Функция setup()
  • Инициализация Serial порта
  • Вывод приветственного сообщения
  • Объяснение правил игры
Функция loop()
  • Объявление переменных
  • Загадывание числа первым игроком
  • Проверка корректности введенного числа
  • Основной цикл угадывания
  • Обработка предположений
  • Подсказки игроку
  • Поздравление при угадывании

Критерии оценки работы кода
Оценка 5 (отлично):
  • Код полностью рабочий и выполняет все заявленные функции
  • Есть проверка корректности вводимых данных
  • Программа корректно обрабатывает все возможные входные значения
  • Код структурирован и содержит комментарии
  • Есть обработка ошибок ввода
Оценка 4 (хорошо):
  • Код работает корректно, но есть небольшие недочеты
  • Отсутствует часть проверок или комментариев
  • Программа может некорректно обрабатывать некоторые граничные случаи
  • Отсутствует обработка некоторых ошибок
Оценка 3 (удовлетворительно):
  • Код частично работает
  • Отсутствуют важные проверки данных
  • Есть критические ошибки в логике
  • Отсутствует обработка ошибок
  • Нет комментариев к коду
Оценка 2 (неудовлетворительно):
  • Код не работает или работает некорректно
  • Отсутствуют базовые проверки данных
  • Логические ошибки делают программу неработоспособной
  • Отсутствует структура кода
  • Нет обработки ошибок


Алгоритм

Блок-схема игры "Угадай число"

Блок-схема игры «Угадай число»

setup()
Инициализация Serial порта
Вывод приветствия и правил
loop()
Начало loop()
Инициализация переменных
Запрос числа у первого игрока
Ожидание ввода
Чтение числа
Проверка числа (0-9)
Нет →
Ошибка! Число должно быть 0-9
Завершение раунда
Да →
Очистка буфера
Запрос числа у второго игрока
Начало цикла угадывания
Ожидание ввода
Чтение предположения
Проверка предположения
< 0 или > 9 →
Ошибка! Число должно быть 0-9
> secretNumber →
Больше! Попробуйте еще раз
= secretNumber →
Угадал!
Выход из цикла
Пауза 3 сек
Конец loop()
< secretNumber →
Меньше! Попробуйте еще раз
Made on
Tilda