Удаление оператора печати приводит к тому, что контакты перестают работать, как с оператором печати - PullRequest
0 голосов
/ 03 мая 2019

, если оператор 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 закомментировано , то остается зеленым, но наблюдается небольшое мерцание красного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...