Прошу помощи в установлении связи между двумя arduino при помощи xbee. Прошил xbee в X-CTU, подключил через шилды к arduino. Пытался подать сигнал на 8 контакт первого контроллера и принять его с 8 контакта второго контроллера. Но на выходе второго всегда держится высокий уровень. Подозреваю, что неправильно написана программа. Но где ошибка не понятно. Вот скетч для первого: //Считывание сигнала с джойстика int forwardsPin = 8; void setup() { Serial.begin(9600); } void loop() { int val = digitalRead(forwardsPin); Serial.println(val); delay(50); } Вот для второго: //Прием сигнала int input1 = 8; void setup() { Serial.begin(9600); } void loop() { while(Serial.available() == 0); int data = Serial.read(); digitalWrite(input1, data); while (Serial.available()) { Serial.read(); } } Строчку while (Serial.available()) { Serial.read(); } взял как замену Serial.flush(); с комментария Амперки к видео. Так же плохо понимаю значение функции available.
Функция available() возвращает количество байт, которые вы можете прочитать через read(). Запись "while (Serial.available())" равноценна "while (Serial.available()!=0)".
Передача Код (C): const int PIN_INPUT = 8; void setup() { pinMode(PIN_INPUT, INPUT); Serial.begin(9600); } void loop() { int val = digitalRead(PIN_INPUT); Serial.println(val); delay(50); } Прием Код (C): const int PIN_OUTPUT = 8; void setup() { pinMode(PIN_OUTPUT, OUTPUT); digitalWrite(PIN_OUTPUT, LOW); Serial.begin(9600); } void loop() { if (Serial.available()) { byte data = Serial.read(); digitalWrite(PIN_OUTPUT, data); } }
Загрузил эти скетчи. После того как загорается красным цветом индикатор RSSI, на 8 контакте принимающей ардуины появляется высокий уровень и не исчезает.
так команды погасить не проступало. Unixon немного ошибся имхо, надо вместо Serial.println использовать Serial.write. как я понял из скетчей и описания работы, digitalWrite(PIN_OUTPUT, data) гасит выход если дата равна 0, и выдает логическую единицу если data не равна 0. т.е. digitalWrite(PIN_OUTPUT,12) то же самое что и digitalWrite(PIN_OUTPUT,1) передатчик делает int val = digitalRead(PIN_INPUT); допустим val = 1, посылает по сериалу через принтлн, который преобразует 1 в строку 1 и посылает 3 байта : 49 13 10. Приемник получает эти цифры и делает digitalWrite(PIN_OUTPUT,49) digitalWrite(PIN_OUTPUT,13) digitalWrite(PIN_OUTPUT,10) зажигая три раза подряд огонек затем допусти отпустили кнопку, val = 0, передатчик посылает по сериалу через принтлн, который преобразует 0 в строку 0 и посылает 3 байта :48 13 10. Приемник получает эти цифры и делает digitalWrite(PIN_OUTPUT,48) digitalWrite(PIN_OUTPUT,13) digitalWrite(PIN_OUTPUT,10) продолжая зажигать выход