Да, 1.7.0 брал оттуда. Но я паренёк неленивый - всё снёс, поставил православную 1.6.3. Прикрутил библиотеки, ошибка осталась:
Осталась ошибка только с wire.h? Обратите внимание, на вики с любым примером, и в примерах к библиотеке Strela, везде нужно писать Код (C): #include <Wire.h> #include <Strela.h> Когда-то я переживал по этому поводу, а потом увидел в библиотеках adafruit то же самое. Просто в arduino IDE не очень корректно работает линковщик. Меня больше беспокоили ошибки, которые у вас выскакивали после добавления Wire.h в скетч. Эти ошибки пропали?
Продолжаем разговор Получил сегодня Стрелу и Wi-Fi Bee v2. В описании к Bee рекомендуется использовать библиотеку WiFly. Библиотеку установил, но нигде не смог найти, какие ноги у нас Rx и Tx для Bee-модулей. Для инициализации Bee есть такой кусок кода: Код (Text): SoftwareSerial uart(Tx, Rx); WiFly wifly(uart); Что подставлять в случае со стрелой вместо Tx и Rx? Инструкции курил - ничего не нашел ((
Пины 0 и 1, как на других ардуинах. См http://wiki.amperka.ru/продукты:strela, раздел "Коммуникация".
Спасибо, табличку видел, но не думал, что эти ноги относятся к разъему XBee. В-общем, не получается пока подключиться. При том, что роутер в логах факт подключения показывает, IP присваивает. Код такой: Код (Text): #include <Arduino.h> #include <SoftwareSerial.h> #include "WiFly.h" #define SSID "..........." #define KEY "............" #define AUTH WIFLY_AUTH_WPA2_PSK SoftwareSerial uart(0, 1); WiFly wifly(&uart); void setup() { uart.begin(9600); delay (1000); Serial.begin(9600); Serial.println("--------- WIFLY TEST --------"); // wait for initilization of wifly delay(5000); uart.begin(9600); // WiFly UART Baud Rate: 9600 wifly.reset(); Serial.println("Join " SSID ); if (wifly.join(SSID, KEY, AUTH)) { Serial.println("OK"); } else { Serial.println("Failed"); } Возвращает, понятное дело, Failed. И еще нубский вопрос - чем надо определить DEBUG для включения режима отладки? Посмотрел код библиотек - вроде при включении отладки библиотека добросовестно дублирует всё, переданное в XBee, в монитор последовательного порта (= на экран). Сейчас принудительно включил DEBUG (закомментил всё лишнее), итог такой: Что могло пойти не так?
Я ошибаюсь или у Вас и для взаимодействия с модулем: SoftwareSerial uart(0, 1); ..... uart.begin(9600); И для взаимодействия с компом: Serial.begin(9600); ипользуются одни и те же ноги 0 и 1? Не вернее ли софтовый uart повесить на другие... и подключить именно к ним rx и tx модуля? Мне кажется что отладка через сом-ПК и общение ардуины с модулем дерутся...
В этом и вопрос. XBee втыкается в специально отведенное для него место, где подписей касательно того, что у нас Rx, а что Tx - нет. С другой стороны, если бы ноги были одними и теми же - я бы видел все команды, отправляемые на XBee, и без включения режима отладки. Однако этого не наблюдалось.
Это справедливо если "всё работает как ожидается". Но насколько я помню в леонарде сам контроллер отвечает за преобразование uart-юсб. Если для этого используется 0 и 1. то там не сигнал uart, а usb то есть получается что uart модуля подключен к usb микроконтроллера.... Если же для usb используются другие выводы МК, то... Ещё есть вариант что я чего-то не знаю / не понимаю.
На Стреле, как и на всех leonardo пины 0 и 1 это Serial1 т.е. код будет какой-то такой Код ( (Unknown Language)): #include <Arduino.h> #include <SoftwareSerial.h> #include "WiFly.h" #define SSID "..........." #define KEY "............" #define AUTH WIFLY_AUTH_WPA2_PSK WiFly wifly(&Serial1); void setup() { Serial1.begin(9600); delay (1000); Serial.begin(9600); Serial.println("--------- WIFLY TEST --------"); // wait for initilization of wifly delay(5000); // uart.begin(9600); // WiFly UART Baud Rate: 9600 wifly.reset(); Serial.println("Join " SSID ); if (wifly.join(SSID, KEY, AUTH)) { Serial.println("OK"); } else { Serial.println("Failed"); } При этом привычный Serial это USB. Эти ноги выведены только на USB и больше никуда) Дальше. Во всех Arduino Leonardo в отличии от Arduino Uno, SoftwareSerial может находится не на всех ногах. TX может быть на любой, а вот RX - нет. http://arduino.cc/en/Reference/softwareSerial
Блин, заработало!!! Гран мерси!!! Подскажи, пожалуйста, а есть где мега-ссылка, которую надо прочесть сверху донизу, чтобы таких вопросов не возникало? Сам я, например, до второго пришествия искал бы &Serial1.
А вот еще вопрос. Библиотеки Strela.h и рекомендованная для работы с приемником IR IRemote.h в одном скетче не уживаются. Проблема в том, что обе библиотеки пытаются определить прерывание TIMER4_OVF_vect Закомментил для эксперимента в Strela.cpp определение прерывания (строка 44 и ниже) - началась какая-то фигня с движками, пришлось раскомменчивать обратно. В IRemote.cpp ничего уже пробовать не стал. Как можно полечить ситуацию?
Ошибку можно посмотреть на простейшем примере: Код (Text): #include <Wire.h> #include <Strela.h> #include <IRremote.h> void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: } Ошибка выглядит так: Код (Text): var/folders/q2/3ttsw6hs5_jgydcv8v8mf7r40000gn/T/build1296348452396796681.tmp/IRremote/IRremote.cpp.o: In function `__vector_41': /Users/arthur777/Documents/Arduino/libraries/IRremote/IRremote.cpp:361: multiple definition of `__vector_41' /var/folders/q2/3ttsw6hs5_jgydcv8v8mf7r40000gn/T/build1296348452396796681.tmp/Strela/Strela.cpp.o:/Users/arthur777/Documents/Arduino/libraries/Strela/Strela.cpp:44: first defined here collect2: error: ld returned 1 exit status Плата выбрана Leonardo, все дела.
Путем экспериментов выяснилось следующее: 1. Закомменчивание в Strela.cpp процедуры обработки прерывания ISR(TIMER4_OVF_vect) приводит к неадекватному поведению движков (однажды включается один канал, и привет); 2. Закомменчивание в IRremote той же самой процедуры обработки прерывания приводит к невозможности приёма сигнала по IR; 3. Объединение кода процедур в обоих библиотеках - аналогично, неадекватное поведение движков. Возможно, что-то делаю не так. Как лечить?