Помогите подружить две 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. сорри, за ссылку на другой сайт).