09-20-2014, 12:24 PM
Итак, продолжим. Буду писать пример кода, зачем он нужен и что он делает. постепенно в него буду добавлять фичь.
Варнинг, часть, если не все, будет нагло скопипащено отовсюду )))
Пример номер ноль.
http://arduino.cc/en/Tutorial/BareMinimum
Отличительной чертой данного кода является его нейтральность. Оно ничего не делает, но вокруг него мы будем жить.
Что же тут написано? Это две функции, которые вызываются ардуиной. Первая (setup) вызывается в момент включения ардуины, только один раз. В нее следует ложить код инициализации вякого разного - выставлять тип ножек (вход/выход), запускать инициализацию всяких библиотечек, просчитывать что-то один раз...
Вторая (loop) - запускается в цикле, т.е. процессор постоянно в ней крутится. Тут мы будем складывать рутинную работу. А-ля считывание кнопки, если изменилась = делаем что-то. Закончили делать - цикл повторяется заново.
Синтаксис -
void loop() { }
void - тип данных, возвращаемых функцией. войд - нифиха или что-то подобное.
луп - имя функции
в скобочках круглых - можно положить параметры, что функция ожидает получить. в данном случае их нет.
между фигурными скобочками складываем наш код.
все, что находится в строчке после "//" - комменты кода, ниначто не влияют. Туда для себя можно ставить заметки. Аналогично работает комбинация из /* */
/*
много
строчный
коммент */
А, из полезностей комментов - ими можно закомментить кусок кода, который мы пока не хотим компилировать. Отключит строчку, либо целый кусок.
В чате пробегала задача работы с пультиком ) Ее мы и сделаем.
Ардуино уже поставляется с библиотечкой ИК интерфейсинга. И с кучей примеров ее применения. Возьмем самый простой, берем в меню - File>Examples>Arduino-Remote-IR-Master>IRrecvDemo
получаем следующий код:
Итог - мы, после заливки в МК данного кода, получим в Serial Monitor-е коды кнопок пульта.
Со стороны железа - потребуется какой-то (понятья не имею какой) ик-приемник (они на разные частоты делаются, возможно с разным пинаутом... но мне два раза везло с ними, по типичной схемке "как на картинке"). Картинка - тут,
http://www.righto.com/2009/08/multi-prot...brary.html
http://arcfn.com/images/ir-schematic.png
Vcc и GND берутся с гребенки на платке ардуинки, там-же находится первый попавшийся свободный вход. Желательно не трогать первые два входа/выхода, т.к. туда прикручены какие-то плюшки на плате.
Вуаля, в компьютер поступают ИК коды.
Програмка полезна, т.к. позволяет нам собрать список кодов, и их затем использовать при приеме и назначении "действий" в МК.
Пример 2.
Включение/выключение светодиода (усилителя, лампочки, вентилятора...) средством пульта.
http://arduino.cc/en/Tutorial/Blink
Ту би континьюед :)
Варнинг, часть, если не все, будет нагло скопипащено отовсюду )))
Пример номер ноль.
http://arduino.cc/en/Tutorial/BareMinimum
PHP код:
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
Что же тут написано? Это две функции, которые вызываются ардуиной. Первая (setup) вызывается в момент включения ардуины, только один раз. В нее следует ложить код инициализации вякого разного - выставлять тип ножек (вход/выход), запускать инициализацию всяких библиотечек, просчитывать что-то один раз...
Вторая (loop) - запускается в цикле, т.е. процессор постоянно в ней крутится. Тут мы будем складывать рутинную работу. А-ля считывание кнопки, если изменилась = делаем что-то. Закончили делать - цикл повторяется заново.
Синтаксис -
void loop() { }
void - тип данных, возвращаемых функцией. войд - нифиха или что-то подобное.
луп - имя функции
в скобочках круглых - можно положить параметры, что функция ожидает получить. в данном случае их нет.
между фигурными скобочками складываем наш код.
все, что находится в строчке после "//" - комменты кода, ниначто не влияют. Туда для себя можно ставить заметки. Аналогично работает комбинация из /* */
/*
много
строчный
коммент */
А, из полезностей комментов - ими можно закомментить кусок кода, который мы пока не хотим компилировать. Отключит строчку, либо целый кусок.
В чате пробегала задача работы с пультиком ) Ее мы и сделаем.
Ардуино уже поставляется с библиотечкой ИК интерфейсинга. И с кучей примеров ее применения. Возьмем самый простой, берем в меню - File>Examples>Arduino-Remote-IR-Master>IRrecvDemo
получаем следующий код:
PHP код:
#include <IRremote.h> // <<<< Подключает файл библиотечки
int RECV_PIN = 11; // <<<< декларируем переменную типа int (integer - для циферок), и заталкиваем в нее десятичное значение 11, соответствующее номеру ноги на плате ардуинки. К ней мы подключим выход ИК приемника.
IRrecv irrecv(RECV_PIN); // декларируем обьект, который для нас будет работать с ИК приемником, типа "IRrecv", именем irrecv, и передаем ему RECV_PIN (т.е. циферку 11, т.е. ногу ардуинки с ик приемником).
decode_results results; // видимо сюда будут складываться результаты принятых по ИК кодов...
void setup() // функция инициализации
{
Serial.begin(9600); // инициализация фичи сериал-порта. ардуинка может общаться с компьютером через сериал порт, который эмулируется средством USB... вобщем можно посылать и принимать данные с ардуинки, а также смотреть на них в проге ардуинки, нажав на пимпочку в правом верхнем углу, serial monitor.
irrecv.enableIRIn(); // Start the receiver // запуск библиотечки приема ИК. нужно - значит нужно ))
}
void loop() { // основной цикл
if (irrecv.decode(&results)) { //если функция irrecv.decode вернула положительный результат, то она положила этот результат и в results. На счет "&" не паримся, эт немножко сложней и извращенней - символизирует передачу не переменной а ее адреса, и тогда функция может в этот адрес что-то положить... неважно, главное чтоб работало.
Serial.println(results.value, HEX);// Serial.println печатает строку results.value в последовательный порт. Т.е. мы будем видить то, что попадает на ИК приемник. вернее уже ракодированные значения кнопок. "HEX" - не знаю, видимо форматирование результата, чтоб не печаталось в бинарном виде, а в виде 0х23BF шестнадцетиричного формата.
irrecv.resume(); // Receive the next value // видимо нужно для жизнедеятельности ИК-библиотечки )
}
delay(100); // задержка, чтоб проц не слишком активно бегал по циклу безконечному. В этот период времени проц ждет заветные 100 чего-то там, и затем продолжает свою безконечную работу.
}
Итог - мы, после заливки в МК данного кода, получим в Serial Monitor-е коды кнопок пульта.
Со стороны железа - потребуется какой-то (понятья не имею какой) ик-приемник (они на разные частоты делаются, возможно с разным пинаутом... но мне два раза везло с ними, по типичной схемке "как на картинке"). Картинка - тут,
http://www.righto.com/2009/08/multi-prot...brary.html
http://arcfn.com/images/ir-schematic.png
Vcc и GND берутся с гребенки на платке ардуинки, там-же находится первый попавшийся свободный вход. Желательно не трогать первые два входа/выхода, т.к. туда прикручены какие-то плюшки на плате.
Вуаля, в компьютер поступают ИК коды.
Програмка полезна, т.к. позволяет нам собрать список кодов, и их затем использовать при приеме и назначении "действий" в МК.
Пример 2.
Включение/выключение светодиода (усилителя, лампочки, вентилятора...) средством пульта.
http://arduino.cc/en/Tutorial/Blink
PHP код:
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
bool isPoweredOn = false; // переменная, в которой будем хранить статус включенности светодиода.
void setup()
{
pinMode(13, OUTPUT); // пин номер 13 будет у нас выходом. туда светодиод и подключим.
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop() {
if (irrecv.decode(&results)) {
if(results.value == 0x77E1E06F) { // если код кнопки равен 0x77E1E06F (этот код взят по результатам работы примера 1)
if (isPoweredOn) {//если isPoweredOn=true, т.е уже включен -
isPoweredOn = false; // то выключаем в переменной
digitalWrite(13, LOW); // выключаем физически, присваевая лог.уровень LOW на ножку 13
}
else { // иначе
isPoweredOn = true; // включаем в переменной
digitalWrite(13, HIGH); // включаем физически
}
}
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
delay(100);
}
Ту би континьюед :)
Аминь.