如果第57行的text_view_text_size
语句被注释掉,led将不会更新预期的方式。但是,否则。
基本思想是,如果输入在短时间内变为1,则LED在2秒钟内变为红色。一个简单的延迟将无法完成任务,因为该arduino还需要为我的项目做其他事情。
这可能与VirtualWire库以及与Serial.println("something");
方法结合使用的计时器有关吗?但是,这只是一个猜测。
VirtualWire库是用于基本无线电通信的库,有关https://www.airspayce.com/mikem/arduino/VirtualWire/的更多信息
millis()
如果第57行上的#include <VirtualWire.h>
const int ledPin[4] = {7, 6, 5, 4}; //format: R, G, B, GND
const bool ledGreen[4] = {0, 1, 0, 0};
const bool ledRed[4] = {1, 0, 0, 0};
bool holdBtnStatus = 0;
long holdStartTime;
int holdTime = 2000;
bool readRF() {
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) {
return (bool) buf[0];
} else {
return 0; //if there is nothing in buffer return 0
}
}
void updateLed(bool btnStatus) {
if (btnStatus == 0) {
for (int i = 0; i < sizeof(ledPin); i++) {
digitalWrite(ledPin[i], ledGreen[i]);
}
} else {
for (int i = 0; i < sizeof(ledPin); i++) {
digitalWrite(ledPin[i], ledRed[i]);
}
}
}
void setup() {
vw_set_rx_pin(11);
vw_setup(1000);
vw_rx_start();
//only for testing
Serial.begin(9600);
pinMode(ledPin[0], OUTPUT);
pinMode(ledPin[1], OUTPUT);
pinMode(ledPin[2], OUTPUT);
pinMode(ledPin[3], OUTPUT);
}
void loop() {
bool btnInput;
if (holdBtnStatus == 0) {
btnInput = readRF();
if (btnInput == 1) {
holdBtnStatus = 1;
holdStartTime = millis();
}
} else if (millis() - holdStartTime >= holdTime) {
holdBtnStatus = 0;
}
Serial.println("something"); //commenting out this line wil keep the led from becoming red
updateLed(btnInput);
delay(10);
}
未注释掉,则Serial.println("something");
变为1后,led保持红色2秒钟。
如果注释了第57行上的btnInput
,则保持绿色,但有少量红色闪烁。