, если оператор Serial.println("something");
в строке 57 закомментирован, светодиод не будет обновлять предполагаемый путь. Тем не менее, в противном случае это так.
Основная идея состоит в том, что светодиод становится красным в течение 2 секунд, если на входе в течение небольшого момента становится 1. Простая задержка не сработает, потому что этому arduino нужно сделать и другие вещи для моего проекта.
Может быть, это как-то связано с библиотекой VirtualWire и таймерами, которые она использует в сочетании с методом millis()
? Однако это только предположение.
Библиотека VirtualWire предназначена для базовой радиосвязи, более подробную информацию о https://www.airspayce.com/mikem/arduino/VirtualWire/
#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");
в строке 57 не закомментирован, светодиод остается красным в течение 2 секунд после того, как btnInput
стал 1.
если Serial.println("something");
в строке 57 закомментировано , то остается зеленым, но наблюдается небольшое мерцание красного.