Передача даних з компа через USB для управління світлодіодом

WIFI, Bluetooth, RF, Кодові дистанційні замки. Використання Інтернету та управління СМС повідомленнями, створення систем управління через інтернет
Відповісти
Аватар користувача
Arduino
Site Admin
Повідомлень: 100
З нами з: 16 травня 2017 18:18

Передача даних з компа через USB для управління світлодіодом

Повідомлення Arduino »

В цьому експерименті ми відправляємо пристрою (макетка зі світлодіодом) команди, як йому світити через USB канал.


l19-svetilnikpousb1.jpg
#define LED_PIN 9
// для роботи з текстом існують об'єкти-рядки (англ. string)
String message ;

недійсні установки ( )
{
pinMode ( LED_PIN, OUTPUT ) ;
Послідовний. починають ( 9600 ) ;
}

void loop ( )
{
// передані з комп'ютера дані поставляються байт за
// байтом, у вигляді окремих символів (англ. character). Нам
// потрібно послідовно їх обробляти поки (англ. While)
// в порту доступні (англ. Available) нові дані
while ( Serial. Available ( ) ) {
// зчитуємо (англ. Read) прийшов символ в змінну
char incomingChar = Serial . read ( ) ;
// не варто плутати цілі числа і символи. Вони співвідносяться
// один з одним по таблиці, званої кодуванням. Наприклад
// '0' - це 48, '9' - 57, 'A' - 65, 'B' - 66 і т.п. Символи
// в програмі записуються в одинарних лапках
if ( incomingChar > = '0' && incomingChar <= '9' ) {
// якщо прийшов символ-цифра, додаємо його до повідомлення
message + = incomingChar ;
} Else if ( incomingChar == ' \ n ' ) {
// якщо прийшов символ нового рядка, тобто enter, переводимо
// накопичене повідомлення в ціле число (англ. to integer).
// Так послідовність символів '1', '2', '3' стане
// числом 123. Результат виводимо на світлодіод
analogWrite ( LED_PIN, message. ToInt ( ) ) ;
// Обнуляємо накопичене повідомлення, щоб почати все заново
message = "" ;
}
}
// надсилайте повідомлення-числа з комп'ютера через Serial Monitor
}
Пояснення до коду
  • У цій програмі ми створюємо об'єкт класу String. Це вбудований клас, призначений для роботи з рядками, тобто з текстом.
  • Не плутайте його з типом даних string, який є просто масивом символів. Stringж дозволяє використовувати ряд методів для зручної роботи з рядками.
  • Ми знайомимося з новим видом циклів: цикл з умовою while. На відміну від циклу з лічильником for, цикл while(expression) виконується до тих пір, поки логічне вираження expression є істинною.
  • Метод available() об'єкта Serialповертає кількість байт, отриманих через послідовний порт.
  • В даному експерименті цикл while працює до тих пір, поки available() повертає нульове значення, кожне з яких приводиться до true.
  • Змінні типу charможуть зберігати один символ.
  • У цьому прикладі символ ми отримуємо методом Serial.read(), який повертає перший байт, що прийшов на послідовний порт, або -1, якщо нічого не прийшло.
  • В if ми порівнюємо не оговтався символ з 0 і 9, але їх коди. Якщо прийшов якийсь символ, який не є цифрою, ми не будемо його додавати до нашої рядку message.
  • Об'єкти типу Stringдозволяють виробляти конкатенацію, тобто об'єднання рядків. Це можна зробити так: message = message + incomingChar, але можна записати в скороченій формі: message += incomingChar.
  • У цій програмі ми доповнюємо ifконструкцією else if. Це ще один умовний оператор, який перевіряється тільки в разі хибності висловлювання, даного першому оператору. Кілька else ifможуть слідувати один за одним, при цьому кожне наступне умова буде перевірятися тільки в разі невиконання всіх попередніх. Якщо в кінці розмістити else, він виконається тільки якщо жодна з умов не виконано.
  • Нагадаємо, що послідовністю \nкодується символ розриву рядків. Якщо він був переданий пристрою, ми передаємо отримані раніше символи як параметр для analogWrite(), яка включає світлодіод.
  • Ми використовуємо один з методів String, toInt(), який змушує вважати рядку не набором цифр, але числом. Він повертає значення типу long, при цьому, якщо рядок починається з символу, який не є цифрою, буде повернуто 0. Якщо після цифр, що йдуть на початку рядка, будуть символом не-цифри, на них конверсія зупинться.
  • Зверніть увагу на меню, що випадає внизу монітора порту: щоб наше пристрій отримувало символ перекладу рядка, там повинно бути вибрано «Новий рядок (NL)»
  • Порожній рядок позначається так: "". Спустошивши її, ми готові збирати нову послідовність символів.
Відповісти

Повернутись до “Передача даних та Інтернет”