xbee之间没有同步
no synchronization between xbee
我必须 xbee S2,一个作为协调器 API 连接到 arduino,另一个作为路由器 AT,
我的项目是关于向路由器发送命令以点亮 LED。如果我单击一个按钮,协调器将发送数据。
问题是路由器不会立即做出反应,它需要一段时间才能接收到数据。
谁能帮帮我
这是我正在使用的代码
int led = 13;
const int bouton = 2;
void setup() {
// put your setup code here, to run once:
pinMode(led, OUTPUT);
Serial.begin(9600);
pinMode(bouton, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if(digitalRead(bouton)==HIGH)
{
digitalWrite(led,HIGH);
setRemoteState(0x5);
delay(500);
}
if(digitalRead(bouton)==LOW)
{
digitalWrite(led,LOW);
setRemoteState(0x4);
delay(500);
}
}
void setRemoteState(char value){
Serial.write(0x7E); // start byte
Serial.write((byte)0x0);
Serial.write(0x10);
Serial.write(0x17);
Serial.write((byte)0x0);
// id of recipient or use 0xFFFF for broadcast
Serial.write((byte)00);
Serial.write((byte)00);
Serial.write((byte)00);
Serial.write((byte)00);
Serial.write((byte)00);
Serial.write((byte)00);
Serial.write(0xFF);
Serial.write(0xFF);
// 16 bit of reciepent
Serial.write(0xFF);
Serial.write(0xFE);
Serial.write(0x02);
Serial.write('D');
Serial.write('2');
Serial.write(value);
long sum = 0x17 + 0xFF + 0xFF + 0xFF + 0xFE + 0x02 + 'D' + '2' + value;
Serial.write(0xFF - ( sum & 0xFF) );
Serial.print(sum,HEX);
}
现在,您每 1/2 秒对按钮状态进行一次操作,无论它是否与上次相比发生了变化。您正在做很多不必要的工作,包括每秒发送两帧。
您应该将循环修复为仅在状态更改时发送帧:
state = digitalRead(bouton);
if (state != laststate) {
laststate = state;
digitalWrite(led, state);
if (state == HIGH) {
setRemoteState(5);
} else {
setRemoteState(4);
}
}
进行此更改后,您的 loop()
函数不再需要延迟,因此它对按钮按下的响应会更加灵敏。 LED 应立即改变,消息将发送。使用您的旧代码,检测按钮更改最多可能需要 700 毫秒。
我正在尝试用字符串替换按钮!当我在 xbee 上写字时,发送消息以打开 LED,当我关闭 XBEE 时,发送消息以关闭 LED!在这个例子中,我将使用 arduino mega,因为我需要一个串口用于读取单词,一个用于将命令发送到路由器
void loop() {
receivedata();
if (inputString.length() >0) {
Serial.println(inputString);
if (inputString == "on"){
digitalWrite(led,HIGH);
}
if (inputString == "off"){
digitalWrite(led,LOW);
}
inputString="";
}
// put your main code here, to run repeatedly:
state = digitalRead(led);
if (state != laststate) {
laststate = state;
digitalWrite(led, state);
if (state == HIGH) {
setRemoteState(5);
} else {
setRemoteState(4);
}
}
}
void receivedata(){
while (Serial.available() ) {
// get the new byte:
delay(3);
char inChar = Serial.read();
// add it to the inputString:
inputString += inChar;
}}
它仍然不起作用:/
我必须 xbee S2,一个作为协调器 API 连接到 arduino,另一个作为路由器 AT,
我的项目是关于向路由器发送命令以点亮 LED。如果我单击一个按钮,协调器将发送数据。
问题是路由器不会立即做出反应,它需要一段时间才能接收到数据。
谁能帮帮我
这是我正在使用的代码
int led = 13;
const int bouton = 2;
void setup() {
// put your setup code here, to run once:
pinMode(led, OUTPUT);
Serial.begin(9600);
pinMode(bouton, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if(digitalRead(bouton)==HIGH)
{
digitalWrite(led,HIGH);
setRemoteState(0x5);
delay(500);
}
if(digitalRead(bouton)==LOW)
{
digitalWrite(led,LOW);
setRemoteState(0x4);
delay(500);
}
}
void setRemoteState(char value){
Serial.write(0x7E); // start byte
Serial.write((byte)0x0);
Serial.write(0x10);
Serial.write(0x17);
Serial.write((byte)0x0);
// id of recipient or use 0xFFFF for broadcast
Serial.write((byte)00);
Serial.write((byte)00);
Serial.write((byte)00);
Serial.write((byte)00);
Serial.write((byte)00);
Serial.write((byte)00);
Serial.write(0xFF);
Serial.write(0xFF);
// 16 bit of reciepent
Serial.write(0xFF);
Serial.write(0xFE);
Serial.write(0x02);
Serial.write('D');
Serial.write('2');
Serial.write(value);
long sum = 0x17 + 0xFF + 0xFF + 0xFF + 0xFE + 0x02 + 'D' + '2' + value;
Serial.write(0xFF - ( sum & 0xFF) );
Serial.print(sum,HEX);
}
现在,您每 1/2 秒对按钮状态进行一次操作,无论它是否与上次相比发生了变化。您正在做很多不必要的工作,包括每秒发送两帧。
您应该将循环修复为仅在状态更改时发送帧:
state = digitalRead(bouton);
if (state != laststate) {
laststate = state;
digitalWrite(led, state);
if (state == HIGH) {
setRemoteState(5);
} else {
setRemoteState(4);
}
}
进行此更改后,您的 loop()
函数不再需要延迟,因此它对按钮按下的响应会更加灵敏。 LED 应立即改变,消息将发送。使用您的旧代码,检测按钮更改最多可能需要 700 毫秒。
我正在尝试用字符串替换按钮!当我在 xbee 上写字时,发送消息以打开 LED,当我关闭 XBEE 时,发送消息以关闭 LED!在这个例子中,我将使用 arduino mega,因为我需要一个串口用于读取单词,一个用于将命令发送到路由器
void loop() {
receivedata();
if (inputString.length() >0) {
Serial.println(inputString);
if (inputString == "on"){
digitalWrite(led,HIGH);
}
if (inputString == "off"){
digitalWrite(led,LOW);
}
inputString="";
}
// put your main code here, to run repeatedly:
state = digitalRead(led);
if (state != laststate) {
laststate = state;
digitalWrite(led, state);
if (state == HIGH) {
setRemoteState(5);
} else {
setRemoteState(4);
}
}
}
void receivedata(){
while (Serial.available() ) {
// get the new byte:
delay(3);
char inChar = Serial.read();
// add it to the inputString:
inputString += inChar;
}}
它仍然不起作用:/