Arduino и ПК: обмен данными
Рано или поздно любой владелец Arduino понимает, что в своих Arduino проектах ему просто жизненно необходимо обмениваться с микроконтроллером информацией. Возникают ситуации, когда нужно вручную, управляя с ПК или ноутбука активировать ту или иную функцию в программе микроконтроллера.
Но давайте ближе к делу. Обмениваться данными с Arduino не так сложно, но вся загвоздка в том, что данные передаются посимвольно, а это очень плохо. В поисках этой проблемы пришлось провести достаточно долгое время, пока на хабрахабре не наткнулся на одну замечательную библиотеку. Автор реализовал в ней функцию приемки чисел, т.е. вы можете отправлять контроллеру числа, состоящие более, чем из одной цифры, и он все отработает корректно. Качайте библиотеку (ссылка), распаковывайте ее в hardwarelibraries, и переходим к практике.
Первым делом напишем скетч, и загрузим его в Arduino (Freeduino)
#include void setup() {
Serial.begin(9600); // устанавливаем скорость порта
pinMode(9, OUTPUT); // устанавливаем 9 ногу как выход для динамика
} void loop()
{
long int Number; Serial.print(«Enter number: «);
Number = SerialInput.InputNumber(); // ВВодим число Serial.print(«Result = «);
Serial.println(Number * Number, DEC);
beep(500);
} void beep(unsigned char delayms){
analogWrite(9, 20); // значение должно находится между 0 и 255
// поэкспериментируйте для получения хорошего тона
delay(delayms); // пауза delayms мс
analogWrite(9, 0); // 0 — выключаем пьезо
delay(delayms); // пауза delayms мс
}
Что все это значит. Постарался код снабдить подробными комментариями, вроде все должно быть понятно. Данный скетч просит ввести вас любое число, после чего выдает его квадрат, и воспроизводит звуковой сигнал через подсоединенный к 9 пину пьезо-динамик.
И вот, самое интересное — пришло время пробовать. Для коммутации с контроллером я рекомендую использовать бесплатную программу putty. В настройках Connection type выберите Serial и вместо COM1 впишите корректный номер порта (можно подглядеть в среде программирования Arduino меню Tools->Serial Port). Нажимаем Open, и видим в консоли надпись Enter number, вводим любое число (в рамках разумного), жмем Enter, и видим результат.
Все, можно радоваться и прыгать от радости. Естественно все это можно улучшить, например сперва вывести отправить с контроллера в консоль менюшку, в которой подробно расписать команды. Например вводите число 0 — включается светодиодная подсветка, нажимаете 1 — гаснет. Таким образом можете хоть 100500 команд засунуть, лишь бы хватило памяти микроконтроллера (которой так мало). А о том, как расширить доступную память поговорим в следующий раз.
UPD: часть кода порезал парсер движка, поэтому вот исходник [СКАЧАТЬ]
ЧОТКО ЗАЕБИСЬ СПАСИБО Я ВАЩЕ ТЕПЕРЬ В ШКОЛЕ ТАЩУ А МОИ ОДНОКЛАССНИКИ НЕТ АХАХАХАХА ЧТО ЗА ЛОХИ СПАСИБО АААААА
C:\Program Files\Arduino\libraries\SerialInput\SerialInput.cpp:29:33: error: ‘BYTE’ was not declared in this scope
if (EchoOn) Serial.print(c, BYTE);
^
C:\Program Files\Arduino\libraries\SerialInput\SerialInput.cpp:36:32: error: ‘BYTE’ was not declared in this scope
if (EchoOn) Serial.print(10, BYTE);
^
Using library SerialInput in folder: C:\Program Files\Arduino\libraries\SerialInput (legacy)
exit status 1
Error compiling for board Arduino/Genuino Uno.
Вся проблема в том, что статья уже старовата, и новые версии Arduino IDE уже не совместимы со старыми, вот и получается что от версии к версии старый код перестает работать 🙁