вопрос по xbee s2
- Войдите на сайт для отправки комментариев
Чт, 12/07/2012 - 23:41
они могут и передавать и принимать??? сделал пульт на 1 модули принимаю вторым передаю а в обратку не моу пустит сигнал
они могут и передавать и принимать??? сделал пульт на 1 модули принимаю вторым передаю а в обратку не моу пустит сигнал
Да, они работают в обе стороны.
по очереди??? сразу в одну потом в другую???
Насколько я понимаю основной интерфейс XBee это Serial. В Serial можно как писать так и читать из него.
У меня проблем не возникало
если я посылаю и принамаю на 1 плате то виснет
Что значит посылаю и принимаю на одной плате??? Какой плате? что виснет?
мега с xbee у меня как передатчик в пульте. uno как приемник. Захотел с uno отправить на мегу 1 и по этой единице включать диод чтоб видеть что платы соеденены. Первые пару сек все работает потом порт виснет. Вроде как нарыл что одновременно и посылать и принимать нельзя надо прекратить посылать и принять .
А код целиком можете выложить?
//int krytPin8 = 8;// серва аналог 0 int potPin = 0; //аналог вход 4 кнопи int potPin2 = 1; //int ledPin13 = 13; // контроль подключения приемника к базе проверяет сигнал //int potPin10 = 10; //int potPin11 = 11; void setup() { //Create Serial Object (9600 Baud) Serial.begin(9600); pinMode(potPin, INPUT); pinMode(potPin2, INPUT); // pinMode(ledPin13,OUTPUT); } void loop() { int valS = analogRead(potPin); int val2 = analogRead(potPin2); if((valS>1019)&&(valS<1024)){Serial.print(2);} // верх if((valS>335)&&(valS<340)){Serial.print(3);} // низ if((valS>250)&&(valS<255)){Serial.print(4);} // лево if((valS>509)&&(valS<514)){Serial.print(5);} // право ////////////////////////////////////////////// if((val2>1019)&&(val2<1024)){Serial.print(6);} // 1 if((val2>335)&&(val2<340)){Serial.print(7);} // 2 if((val2>250)&&(val2<255)){Serial.print(8);} // 3 if((val2>509)&&(val2<514)){Serial.print(9);} // 4 if ((valS<1)and(val2<2)){Serial.print(0);}// чтоб и второй был 0 надо оба подрубить delay(50); // Serial.println(valS); }код передатчика
#include <Servo.h> Servo servaProverka; Servo servaProverka2; int servoPin2 = 11; int servoPin = 12; ////////////////////////// int ledPin1 = 10; //7 int ledPin2 = 9; //8 int ledPin3 = 8; //9 int ledPin4 = 7; //10 ? контакты вкл-выкл boolean lastButton = 1; boolean lastButton2 = 1; boolean lastButton3 = 1; boolean lastButton4 = 1; boolean ledOn = 0; boolean ledOn2 = 0; boolean ledOn3 = 0; boolean ledOn4 = 0; /////////////////////////////////// int ledLevel = 90; int ledLevel2 = 90; void setup() { Serial.begin(9600); servaProverka.attach(servoPin); servaProverka2.attach(servoPin2); pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); pinMode(ledPin4, OUTPUT); pinMode(servoPin2, OUTPUT); pinMode(servoPin, OUTPUT); } void loop() { while( Serial.available() == 0); byte data= Serial.read() - '0'; int val = byte(data); Serial.print(5); if((val>1)&&(val<3)){maax();} //2 верх if((val>2)&&(val<4)){miin();} // 3 низ if((val>3)&&(val<5)){miin2();} // 4 лево if((val>4)&&(val<6)){maax2();} // 5 право ////////////////////////// 6-1 пин led { if(byte((data>5)&&(data<7)) == 1 &&lastButton == 0) { ledOn = !ledOn; lastButton = 1; } else { lastButton = byte(data); } digitalWrite(ledPin1,ledOn); } ////////////////////////////////// 7-2 пин led { if(byte((data>6)&&(data<8)) == 1 &&lastButton2 == 0) { ledOn2 = !ledOn2; lastButton2 = 1; } else { lastButton2 = byte(data); } digitalWrite(ledPin2,ledOn2); } ///////////////////////// 8-3 { if(byte((data>7)&&(data<9)) == 1 &&lastButton3 == 0) { ledOn3 = !ledOn3; lastButton3 = 1; } else { lastButton3 = byte(data); } digitalWrite(ledPin3,ledOn3); } /////////////////////////////// 9-4 { if(byte((data>8)&&(data<10)) == 1 &&lastButton4 == 0) { ledOn4 = !ledOn4; lastButton4 = 1; } else { lastButton4 = byte(data); } digitalWrite(ledPin4,ledOn4); } Serial.print(val); } void maax() { //ledLevel = map(ledLevel, 0, 255, 0, 360); ledLevel = ledLevel + 10; delay(100); if(ledLevel > 180) ledLevel = 180; servaProverka.write(ledLevel); } void miin() { // ledLevel = map(ledLevel, 0, 255, 0, 360); ledLevel = ledLevel - 10; delay(100); if(ledLevel < 0) ledLevel = 0; servaProverka.write(ledLevel); } //////////////////////// void maax2() { //ledLevel = map(ledLevel, 0, 255, 0, 360); ledLevel2 = ledLevel2 + 10; delay(100); if(ledLevel2 > 180) ledLevel2 = 180; servaProverka2.write(ledLevel2); } void miin2() { // ledLevel = map(ledLevel, 0, 255, 0, 360); ledLevel2 = ledLevel2 - 10; delay(100); if(ledLevel2 < 0) ledLevel2 = 0; servaProverka2.write(ledLevel2); }код приемника . в приемнике добавил Serial.print(1); чтоб отсылал 1. передатчике добавил while( Serial.available() == 0);
byte data= Serial.read() - '0';
в void loop и строку если data >1 то загорится диод.
Очень много мусора в коде, чуть меньше ошибок, в общем скорее свего у вас просто переполнялся буфер UART, из-за того что даже когда ничего не было нажато в порт отправлялся 0.
Попробуйте так:
//int krytPin8 = 8;// серва аналог 0 int potPin = 0; //аналог вход 4 кнопи int potPin2 = 1; boolean lastButton1, lastButton2, lastButton3, lastButton4 = 0; //int ledPin13 = 13; // контроль подключения приемника к базе проверяет сигнал //int potPin10 = 10; //int potPin11 = 11; void setup() { //Create Serial Object (9600 Baud) Serial.begin(9600); pinMode(potPin, INPUT); pinMode(potPin2, INPUT); // pinMode(ledPin13,OUTPUT); } void loop() { int valS = analogRead(potPin); int val2 = analogRead(potPin2); if(valS > 1019 && valS < 1024){ Serial.print(2); } // верх if(valS > 335 && valS < 340){ Serial.print(3); } // низ if(valS > 250 && valS < 255){ Serial.print(4); } // лево if(valS > 509 && valS < 514 ){ Serial.print(5); } // право ////////////////////////////////////////////// if(val2 > 1019 && val2 < 1024 && !lastButton1){ Serial.print(6); lastButton1 = 1; } // 1 if(val2 > 335 && val2 < 340 && !lastButton2){ Serial.print(7); lastButton2 = 1; } // 2 if(val2 > 250 && val2 < 255 && !lastButton3){ Serial.print(8); lastButton3 = 1; } // 3 if(val2 > 509 && val2 < 514 && !lastButton4){ Serial.print(9); lastButton4 = 1; } // 4 if (val2 < 2){ lastButton1 = 0; lastButton2 = 0; lastButton3 = 0; lastButton4 = 0; } delay(50); // Serial.println(valS); }
#include <Servo.h> Servo servaProverka; Servo servaProverka2; int servoPin2 = 11; int servoPin = 12; ////////////////////////// int ledPin1 = 10; //7 int ledPin2 = 9; //8 int ledPin3 = 8; //9 int ledPin4 = 7; //10 ? контакты вкл-выкл boolean ledOn, ledOn2, ledOn3, ledOn4 = 0; /////////////////////////////////// int ledLevel = 90; int ledLevel2 = 90; void setup() { Serial.begin(9600); servaProverka.attach(servoPin); servaProverka2.attach(servoPin2); pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); pinMode(ledPin4, OUTPUT); } void loop() { while(Serial.available()){ delay(2); int val = Serial.read() - '0'; //Serial.print(5); switch(val){ case 2: //2 верх maax(); break; case 3: // 3 низ miin(); break; case 4: // 4 лево miin2(); break; case 5: // 5 право maax2(); break; case 6: // 6-1 пин led ledOn = !ledOn; digitalWrite(ledPin1,ledOn); break; case 7: // 7-2 пин led ledOn2 = !ledOn2; digitalWrite(ledPin2,ledOn2); break; case 8: // 8-3 ledOn3 = !ledOn3; digitalWrite(ledPin3,ledOn3); break; case 9: // 9-4 ledOn4 = !ledOn4; digitalWrite(ledPin4,ledOn4); break; } //Serial.print(val); } } void maax() { //ledLevel = map(ledLevel, 0, 255, 0, 360); ledLevel += 10; ledLevel = min(ledLevel, 180); servaProverka.write(ledLevel); delay(100); } void miin() { // ledLevel = map(ledLevel, 0, 255, 0, 360); ledLevel -= 10; ledLevel = max(ledLevel, 0); servaProverka.write(ledLevel); delay(100); } //////////////////////// void maax2() { //ledLevel = map(ledLevel, 0, 255, 0, 360); ledLevel2 += 10; ledLevel2 = min(ledLevel2, 180); servaProverka2.write(ledLevel2); delay(100); } void miin2() { // ledLevel = map(ledLevel, 0, 255, 0, 360); ledLevel2 -= 10; ledLevel2 = max(ledLevel2, 0); servaProverka2.write(ledLevel2); delay(100); }По анлогии делаете передачу и прием в принимающем и передающем кодах соответственно.
Постарайтесь не делать так, что бы в порт постоянно что то летело когда этого не нужно.
дело в том что это все происходили первые пару сек. 0 специально пустил чтоб приемник был активным и не теряял связь. если не трогаю одновременно прием передачу все работает тока пытаюсь читать на передатчике он умирает.
буду пробовать ваш.
А почему он должен терять связь?
у меня потерял я подумал из-за того что ничего не шло. уберу 0
просто вроде кто то говорил что он может или принимать или передавать. тоесть когда я хочу принять на передатчик я должен прекратить передачу