While Loop

Иногда вы хотите, чтобы все в программе остановилось, пока выполняемое условие верно. Вы можете сделать это, используя цикл «While». Этот пример показывает, как использовать цикл while, чтобы калибровать значение аналогового сенсора.

В главном цикле, скетч ниже читает значение фоторезистора на аналоговом пине А0 и использует его, чтобы погасить светодиод на пине D9. Но в то время как кнопка, подключенная к цифровому пину D2, нажата, программа запускает метод, который называется calibrate(), который ищет самые высокие и самые низкие значения аналогового сенсора. Когда вы отпускаете кнопку, скетч продолжает с главным циклом.

Эта техника позволяет вам обновлять максимальные и минимальные значения для фоторезистора, когда условия освещения изменяются.

Необходимые аппаратные средства:

  1. Плата Arduino
  2. 1 цифровая кнопка или выключатель
  3. 1 фотоэлемент или аналоговый датчик
  4. 2 резистора на 10 КОм
  5. Макет

Цепь:

Соедините ваш аналоговый датчик (например, потенциометр, светочувствительный датчик) с аналоговым входом 2 с 10 КОм резистором, для заземления. Подключите вашу кнопку к цифровому пину, снова с 10 КОм резистором, чтобы заземлить. Соедините ваш светодиод с цифровым пином 9, с резистором на 220 Ом, последовательно.

Схема:

Код:

// These constants won't change:
const int sensorPin = A2;       // pin that the sensor is attached to
const int ledPin = 9;           // pin that the LED is attached to
const int indicatorLedPin = 13; // pin that the built-in LED is attached to
const int buttonPin = 2;        // pin that the button is attached to


// These variables will change:
int sensorMin = 1023;  // minimum sensor value
int sensorMax = 0;     // maximum sensor value
int sensorValue = 0;         // the sensor value


void setup() {
  // set the LED pins as outputs and the switch pin as input:
  pinMode(indicatorLedPin, OUTPUT);
  pinMode (ledPin, OUTPUT);
  pinMode (buttonPin, INPUT);
}

void loop() {
  // while the button is pressed, take calibration readings:
  while (digitalRead(buttonPin) == HIGH) {
    calibrate();
  }
  // signal the end of the calibration period
  digitalWrite(indicatorLedPin, LOW);  

  // read the sensor:
  sensorValue = analogRead(sensorPin);

  // apply the calibration to the sensor reading
  sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);

  // in case the sensor value is outside the range seen during calibration
  sensorValue = constrain(sensorValue, 0, 255);

  // fade the LED using the calibrated value:
  analogWrite(ledPin, sensorValue);
}

void calibrate() {
  // turn on the indicator LED to indicate that calibration is happening:
  digitalWrite(indicatorLedPin, HIGH);
  // read the sensor:
  sensorValue = analogRead(sensorPin);

  // record the maximum sensor value
  if (sensorValue > sensorMax) {
    sensorMax = sensorValue;
  }

  // record the minimum sensor value
  if (sensorValue < sensorMin) {
    sensorMin = sensorValue;
  }
}
Поделиться
Отправить
Запинить
2018  
Популярное