Помогите подружить две arduino через XBee
- Войдите на сайт для отправки комментариев
Привет Всем!
Пытаюсь подружить две ардуинки через XBee.
Одна ардуинка снимает данные с двух сонаров, предобразует расстояние в значение индикатора, и передаёт значения индикатора через XBee на вторую ардуино. Для одного индикатора значения от 'A'(65) до 'H'(73), для второго от 'I'(74) до 'P'(82).
Когда подключаю принимающий XBee к компу, то через мониторинг порта вижу значения котороые приходят.
Когда к компа отправляю данные на индикаторы, индикаторы нормально реагируют.
Однако, когда подключению две ардуины друг на друга, индикаторы не реагируют. Помогите разобраться.
Вот исходники:
//------------------------------------- sketch_for_sonars -----------------------------------
#include "Arduino.h" #define TRIGGER_L 7 #define ECHO_L 6 #define TRIGGER_R 5 #define ECHO_R 4 void setup() { pinMode(TRIGGER_L, OUTPUT); digitalWrite(TRIGGER_L, HIGH); pinMode(TRIGGER_R, OUTPUT); digitalWrite(TRIGGER_R, HIGH); pinMode(ECHO_L, INPUT); pinMode(ECHO_R, INPUT); Serial.begin(9600); } void loop() { digitalWrite(TRIGGER_L, LOW); delayMicroseconds(50); digitalWrite(TRIGGER_L, HIGH); delayMicroseconds(20); int distance = ConvertToIndicator(pulseIn(ECHO_L, HIGH))+65; Serial.println(distance); delay(100); digitalWrite(TRIGGER_R, LOW); delayMicroseconds(50); digitalWrite(TRIGGER_R, HIGH); delayMicroseconds(50); distance = ConvertToIndicator(pulseIn(ECHO_R, HIGH))+74; Serial.println(distance); delay(100); } int ConvertToIndicator(int input) { int led=0; if (input > 10000) led = 0; if ((input > 8750)&&(input < 10000)) led = 1; if ((input > 7500)&&(input < 8750)) led = 2; if ((input > 6250)&&(input < 7500)) led = 3; if ((input > 5000)&&(input < 6250)) led = 4; if ((input > 3750)&&(input < 5000)) led = 5; if ((input > 2500)&&(input < 3750)) led = 6; if ((input > 1250)&&(input < 2500)) led = 7; if (input < 1250) led = 8; return led; }
//------------------------------------- sketch_for_indikators -----------------------------------
#include "Arduino.h" #define R_LED_LATCH_PIN 3 #define R_LED_CLOCK_PIN 4 #define R_LED_DATA_PIN 2 #define L_LED_LATCH_PIN 6 #define L_LED_CLOCK_PIN 7 #define L_LED_DATA_PIN 5 void setup() { pinMode(R_LED_LATCH_PIN, OUTPUT); pinMode(R_LED_CLOCK_PIN, OUTPUT); pinMode(R_LED_DATA_PIN, OUTPUT); digitalWrite(R_LED_LATCH_PIN, LOW); shiftOut(R_LED_DATA_PIN, R_LED_CLOCK_PIN, MSBFIRST, 0); digitalWrite(R_LED_LATCH_PIN,HIGH); pinMode(L_LED_LATCH_PIN, OUTPUT); pinMode(L_LED_CLOCK_PIN, OUTPUT); pinMode(L_LED_DATA_PIN, OUTPUT); digitalWrite(L_LED_LATCH_PIN, LOW); shiftOut(L_LED_DATA_PIN, L_LED_CLOCK_PIN, MSBFIRST, 0); digitalWrite(L_LED_LATCH_PIN,HIGH); Serial.begin(9600); } void loop() { if (Serial.available() >0 ) { int buff = Serial.read(); if ((buff>=65)&&(buff<=82)) { //Serial.println(buff); switch(buff) { case 65: WriteRLED(0); break; case 66: WriteRLED(128); break; case 67: WriteRLED(192); break; case 68: WriteRLED(224); break; case 69: WriteRLED(240); break; case 70: WriteRLED(248); break; case 71: WriteRLED(252); break; case 72: WriteRLED(254); break; case 73: WriteRLED(255); break; case 74: WriteLLED(0); break; case 75: WriteLLED(128); break; case 76: WriteLLED(192); break; case 77: WriteLLED(224); break; case 78: WriteLLED(240); break; case 79: WriteLLED(248); break; case 80: WriteLLED(252); break; case 81: WriteLLED(254); break; case 82: WriteLLED(255); break; } } } } void WriteRLED(int led) { digitalWrite(R_LED_LATCH_PIN, LOW); shiftOut(R_LED_DATA_PIN, R_LED_CLOCK_PIN, MSBFIRST, led); digitalWrite(R_LED_LATCH_PIN,HIGH); } void WriteLLED(int led) { digitalWrite(L_LED_LATCH_PIN, LOW); shiftOut(L_LED_DATA_PIN, L_LED_CLOCK_PIN, MSBFIRST, led); digitalWrite(L_LED_LATCH_PIN,HIGH); }
А где схема?
укажите формат данных который принимаете Serial.println(distance,DEC); http://arduino.ru/Reference/Serial/Print
Спасибо за помощь :-).
Разобрался - проблема была в типе данных (спасибо Coolerr).
В коде передатчика необходимо объявлять переменную типа byte, а не int - строка 28 в sketch_for_sonars в первом посте,
затем в 30 строке там же необходимо писать Serial.write(distance), вместо Serial.println(distance).
Так же интересная тема, чтобы убрать задержки при передачи данных между двумя модулями xbee: http://forum.amperka.ru/threads/xbee-%D0%B7%D0%B0%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0-%D0%B2-%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5.3300/
(P.S. сорри, за ссылку на другой сайт).