Проблема с ИК-приемником (TSOP)
- Войдите на сайт для отправки комментариев
Вс, 10/03/2013 - 18:20
Здравствуйте. Действую по инструкции http://www.compcar.ru/forum/showthread.php?t=4959. Установлено было чистое IDE 1.0.3(да и на 1.0.1 пробовал). Суть такова выдает ошибки. Библиотека IRemote установлена, но постоянно выбивает ошибки. Затем узнал, что нужно еще файлы закинуть в "arduino-1.0.3\hardware\arduino\cores\arduino", однако все равно ошибки. Закинул wiring.c, WProgram.h. Может кто поделится годной информацией?
Телепаты в отпуске.
Выложите свой скетч и лог ошибок.
Такс это лог
А это код
Затем узнал, что нужно еще файлы закинуть в "arduino-1.0.3\hardware\arduino\cores\arduino", однако все равно ошибки. Закинул wiring.c, WProgram.h.
Скачайте соответствующую своей версии IDE библиотку IRemote, то есть для ArduinoIDE 1.0 и больше. Только папку Arduino-IRremote-master переименуйте в IRremote.
Код без них ссылался на то, что их нет. Киньте в меня ссылкой не важно на какую версию. Хоть 1.0.1, хоть 1.0.3. Поставлю какую скажите лишь бы работало. Иначе не понятно.
maksim опередил :-)
Недостаточно просто подключить нужный заголовочный файл посредством include. Необходимо добавить библиотеку к скетчу.
Ребят ну что может кто кинет ссылкой?
Библиотека рабочая.
Путь должен выглядеть: \arduino-1.0.2\libraries\IRremote
Пробуем замечательные примерчики.
Ребят ну что может кто кинет ссылкой?
Там не пойми какая версия IRremote
Где там?
Если "там" это ссылка из сообщения #3, то это версия библиотеки 0.1 , она поддерживает в том числе версии дуины 1.0 и выше.
Да, действительно наврал. Я недооценивал количество работы, проделываемой вайрингом перед стартом avr-gcc.
Ребята. Скачал 1.0.2, скачал плагин из 3 сообщения. Тестирую.
bytes[1] = (ir_dt & 0xFF00) >> 8; bytes[2] = (ir_dt & 0xFF0000) >> 16; bytes[3] = (ir_dt & 0xFF000000) >> 24; Serial.write( bytes,4); // отправить прочитанное значение компьютеруНарод, бросьте рабочий примерчик, - как собрать обратно, в число Serial.write( bytes,4), на стороне МК принявшего эти четыре байта?
Пример реализации желаемого для одного байта.
void loop() { if (Serial.available() > 0) { lcd.clear(); lcd.setCursor(0, 0); lcd.print(Serial.read()); Serial.flush(); } }Спасибо.
void loop() { if (Serial.available() > 3) { byte temp8[] = {Serial.read(), Serial.read(), Serial.read(), Serial.read()}; unsigned long *temp32 = (unsigned long*)&temp8; lcd.clear(); lcd.setCursor(0, 0); lcd.print(temp32[0]); } }И почитайте про flush().
>Народ, бросьте рабочий примерчик, - как собрать обратно,
Вот тут Запись в EEPROM | Аппаратная платформа Arduino всякие способы разбора/сбора обсуждались (намек: да вообщем-то так же как вы разбирали, только сдвигать нужно не вправо, а влево)
Или можно вообще не парится, а сразу прочитать в четерех-байтову переменную.
Посмотрите http://arduino.ru/forum/programmirovanie/rabota-s-besprovodnym-modulem-apc220-43#comment-27323
В сообщение #1 внутри loop - пример чтения сразу нескольких байт в массив. (там он называется values), но... на его месте может быть переменная любого типа (в вашем случае, раз шлете четыре байта, то должна быть четерехбайтовая, разве что амперсанд добавить.).
Кстати и отправлять можно так же, как в том примере массив отправляется. Без промежуточного разбора на массив байтов. Сразу вашу ir_dt и пихать в Serial.write (ну только "обмануть компилятор" сказать ему что ....
А, ладно, че-то запутался в словах. ПРоще показать. Проверить счас не на чем, но опробуйте такой финт ушами:
// отправляем Serial.write( (byte*)&ir_dt,sizeof(ir_dt)); .... // принимаем if(Serial.available()) { Serial.readBytes(byte*)&ir_dt,sizeof(ir_dt); // что-то делаем с ir_dt }void loop() { if (Serial.available() > 3) { byte temp8[] = {Serial.read(), Serial.read(), Serial.read(), Serial.read()}; unsigned long *temp32 = (unsigned long*)&temp8; lcd.clear(); lcd.setCursor(0, 0); lcd.print(temp32[0]); } }Спасибо, Максим - именно это было и не понятно "{Serial.read(), Serial.read(), Serial.read(), Serial.read()}".
Да.