преобразовать аналоговое чтение в диапазон времени - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь мигать светодиодом с аналоговым датчиком от 8 до 40 раз в минуту.

Я пробовал этот код, но я понимаю, что мне пришлось преобразовать valorSensor во время. Как это сделать?

int led = 13;
int pinAnalogo = A0;
int analogo;
int valorSensor;

void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  analogo = analogRead(pinAnalogo);
  valorSensor = map(analogo, 0, 1023, 4, 80);
  digitalWrite(led, HIGH);   
  delay(valorSensor);                       
  digitalWrite(led, LOW);    
  delay(valorSensor);                      

}

1 Ответ

0 голосов
/ 19 апреля 2020

Проблема здесь не столько в коде, сколько в биологии. Чтобы увидеть мигание (а не просто мерцание, вам понадобится время от 250 мс и более), 24 кадра / сек c воспринимаются как движение, поэтому для получения «мигания» вы можете начать с 4 кадров / сек c (= 250 мс) Таким образом, мое предложение - мигание без задержки как функция и параметр настройки (blinkSpeedMultiplyer) для тестирования

 /* Blink without Delay as function
    Turns on and off a light emitting diode (LED) connected to a digital pin,
  without using the delay() function. This means that other code can run at the
  same time without being interrupted by the LED code.*/

// constants won't change. Used here to set a pin number:
const int blinkSpeedMultiplyer = 50; // very low
const int ledPin = 13;
const int pinAnalogo = A0;
// Variables will change:
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long startTime = millis();        // will store last time LED was updated
unsigned long blinkTime;           // interval at which to blink (milliseconds)
int analogo;
int valorSensor;
int ledState = LOW;             // ledState used to set the LED

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  analogo = analogRead(pinAnalogo);
  valorSensor = map(analogo, 0, 1023, 4, 80);
  blinkLed(valorSensor); // call the function
}

// Function to blink without blocking delay
void blinkLed(int inValue) {
  blinkTime = blinkSpeedMultiplyer * inValue;
  if (millis() - startTime >= blinkTime) {
    // save the last time you blinked the LED
    startTime = millis();

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...