LED 没有打开
the led didn't switch on
我有一个奇怪的问题:o
当我点击一个按钮时,我在两个 xbee 之间建立了连接,连接到引脚 13 的 LED 灯亮起,然后 xbee 协调器发送信息以打开连接到 xbee 路由器引脚 D3 的 LED。
问题是当我有时点击按钮时,led 开关有时不亮。我不知道问题出在代码中还是只是连接问题
int led = 13;
const int bouton = 2;
boolean state;
boolean laststate;
void setup() {
// put your setup code here, to run once:
pinMode(led, OUTPUT);
Serial.begin(9600);
pinMode(bouton, INPUT);
digitalWrite(led, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
state = digitalRead(bouton);
digitalWrite(led, state);
if (state == HIGH) {
Serial.println("on");
setRemoteState(5);
delay(5000);
} else {
Serial.println("off");
setRemoteState(4);
delay(5000);
}
}
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.println(sum,HEX);
}
看来问题出在延迟(5000)上
微控制器将在按钮状态样本之间等待 5 秒。如果您删除延迟语句,它应该立即打开和关闭。
您应该尝试仅在状态更改时触发 setRemoteState,这样它就不会不断发送。
像
loop() {
state = digitalRead(bouton);
digitalWrite(led, state);
if(state != lastState)
{
if (state == HIGH) {
Serial.println("on");
setRemoteState(5);
} else {
Serial.println("off");
setRemoteState(4);
}
}
lastState = state
}
我想写这样的剧本!
String inputString;
int led = 13;
boolean state;
boolean laststate;
void setup() {
// put your setup code here, to run once:
pinMode(led, OUTPUT);
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
while (Serial.available() ) {
// get the new byte:
delay(3);
char inChar = Serial.read();
// add it to the inputString:
inputString += inChar;
}
if (inputString.length() >0) {
Serial.println(inputString);
if (inputString == "on"){
digitalWrite(led,HIGH);
setRemoteState(5);
}
if (inputString == "off"){
digitalWrite(led,LOW);
setRemoteState(4);
}
inputString="";
}
}
void setRemoteState(char value){
Serial1.write(0x7E); // start byte
Serial1.write((byte)0x0);
Serial1.write(0x10);
Serial1.write(0x17);
Serial1.write((byte)0x0);
// id of recipient or use 0xFFFF for broadcast
Serial1.write((byte)00);
Serial1.write((byte)00);
Serial1.write((byte)00);
Serial1.write((byte)00);
Serial1.write((byte)00);
Serial1.write((byte)00);
Serial1.write(0xFF);
Serial1.write(0xFF);
// 16 bit of reciepent
Serial1.write(0xFF);
Serial1.write(0xFE);
Serial1.write(0x02);
Serial1.write('D');
Serial1.write('2');
Serial1.write(value);
long sum = 0x17 + 0xFF + 0xFF + 0xFF + 0xFE + 0x02 + 'D' + '2' + value;
Serial1.write(0xFF - ( sum & 0xFF) );
Serial1.print(sum,HEX);
}
我有一个奇怪的问题:o 当我点击一个按钮时,我在两个 xbee 之间建立了连接,连接到引脚 13 的 LED 灯亮起,然后 xbee 协调器发送信息以打开连接到 xbee 路由器引脚 D3 的 LED。 问题是当我有时点击按钮时,led 开关有时不亮。我不知道问题出在代码中还是只是连接问题
int led = 13;
const int bouton = 2;
boolean state;
boolean laststate;
void setup() {
// put your setup code here, to run once:
pinMode(led, OUTPUT);
Serial.begin(9600);
pinMode(bouton, INPUT);
digitalWrite(led, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
state = digitalRead(bouton);
digitalWrite(led, state);
if (state == HIGH) {
Serial.println("on");
setRemoteState(5);
delay(5000);
} else {
Serial.println("off");
setRemoteState(4);
delay(5000);
}
}
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.println(sum,HEX);
}
看来问题出在延迟(5000)上 微控制器将在按钮状态样本之间等待 5 秒。如果您删除延迟语句,它应该立即打开和关闭。
您应该尝试仅在状态更改时触发 setRemoteState,这样它就不会不断发送。 像
loop() {
state = digitalRead(bouton);
digitalWrite(led, state);
if(state != lastState)
{
if (state == HIGH) {
Serial.println("on");
setRemoteState(5);
} else {
Serial.println("off");
setRemoteState(4);
}
}
lastState = state
}
我想写这样的剧本!
String inputString;
int led = 13;
boolean state;
boolean laststate;
void setup() {
// put your setup code here, to run once:
pinMode(led, OUTPUT);
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
while (Serial.available() ) {
// get the new byte:
delay(3);
char inChar = Serial.read();
// add it to the inputString:
inputString += inChar;
}
if (inputString.length() >0) {
Serial.println(inputString);
if (inputString == "on"){
digitalWrite(led,HIGH);
setRemoteState(5);
}
if (inputString == "off"){
digitalWrite(led,LOW);
setRemoteState(4);
}
inputString="";
}
}
void setRemoteState(char value){
Serial1.write(0x7E); // start byte
Serial1.write((byte)0x0);
Serial1.write(0x10);
Serial1.write(0x17);
Serial1.write((byte)0x0);
// id of recipient or use 0xFFFF for broadcast
Serial1.write((byte)00);
Serial1.write((byte)00);
Serial1.write((byte)00);
Serial1.write((byte)00);
Serial1.write((byte)00);
Serial1.write((byte)00);
Serial1.write(0xFF);
Serial1.write(0xFF);
// 16 bit of reciepent
Serial1.write(0xFF);
Serial1.write(0xFE);
Serial1.write(0x02);
Serial1.write('D');
Serial1.write('2');
Serial1.write(value);
long sum = 0x17 + 0xFF + 0xFF + 0xFF + 0xFE + 0x02 + 'D' + '2' + value;
Serial1.write(0xFF - ( sum & 0xFF) );
Serial1.print(sum,HEX);
}