Lab works 3: Взаємодія з контролером Arduino через послідовний порт

Мета роботи

Навчитися взаємодіяти з контролером Arduino через послідовний порт.

Завдання  роботи

1.Розробка скетчу для управління вбудованим світлодіодом на платі через послідовний порт.

  1. Знайомство з монітором послідовного порту.
  2. Оповіщення про перемиканні світлодіода.

 

Інструменти для виконання роботи

  1. Комп'ютер.
  2. Плата Arduino з USB виходом (наприклад, Arduino Uno) і вбудованим світлодіодом на 13-му порту.

 

Теоретична частина

//TODO добавить теорию про последовательный порт

Для програмного взаємодії з послідовним портом призначені об'єкти стандартної бібліотеки Arduino під назвами Serial, Serial1, Serial2 і т.д. Як правило, на кожній платі є один послідовний порт, якому відповідав би об'єкт Serial. Даний порт при підключенні до ПК дозволяє обмінюватися даними з комп'ютером поверх USB. Якщо мікроконтролер від комп'ютера відключений, то Serial дозволяє обмінюватися даними з іншими пристроями через цифрові Піни 0 і 1. Виняток становить тільки Arduino Leonardo, у якій Serial завжди використовується для взаємодії через USB, а для цифрових пинов 0 і 1 використовується окремий об'єкт Serial1

Завдання: зберіть інформацію про те, у яких мікроконтролерів є додаткові об'єкти для послідовних портів (Serial1, Serial2 і т.д.) і до яких пінам вони підключені.

Виконання роботи

Розробка скетчу для управління світлодіодом на платі через послідовний порт

Створюємо новий скетч і зберігаємо його з назвою SerialTest. Перевіряємо, що обрана правильна плата і порт.

У функції setup () инициализируем послідовний порт і 13-й пін для управління світлодіодом:

Serial.begin(9600);
pinMode(13,OUTPUT);

У функції loop () перевіряємо, чи немає даних в послідовному порту. Читаємо дані, і якщо прийшов символ "1", включаємо світлодіод, у всіх інших випадках вимикаємо:

while(Serial.available())
    digitalWrite(13,(Serial.read()=='1')?HIGH:LOW);

Знайомство з монітором послідовного порту

Відкриваємо монітор послідовного порту (Інструменти -> Монітор порту або кнопка  вгорі праворуч). З'являється наступне вікно:

В даному вікні виводиться інформація, яка надходить від контролера. У верхньому рядку зліва від кнопки "Відправити" можна писати текст, який відправляється на контролер. У нижньому правому вікні налаштовується швидкість передачі даних і вказується, чи буде до тексту додаватися символ перекладу рядка NL, CR або обидва відразу, або текст буде відправлений як є. Для даної роботи потрібно виставити режим "Немає кінця рядка".

 

Оповіщення про перемиканні світлодіода

Доопрацюємо скетч так, щоб в моніторі порту відображалася інформація про перемиканні світлодіода. Для цього змінимо код функції loop ():

while(Serial.available())
{
    char c=Serial.read();
    if(c=='1')
    {
        digitalWrite(13,HIGH);
        Serial.println("Led On");
    }
    else
    {
        digitalWrite(13,LOW);
        Serial.println("Led Off");
    }
}

Перевіряємо монітор порту і перевіримо, що тепер при перемиканні світлодіода відображаються оповіщення.

Додаткове завдання: розробити скетч для управління світлодіодом через послідовний порт командами "on" і "off". Підказка: метод Serial.read () повертає тільки один символ, якщо від ПК прийшло кілька символів, то тіло циклу while (Serial.available ()) виконається кілька разів.