While ciklus

Hogyan használhatjuk a while ciklust az érzékelő kalibrálására, miközben a gombokat olvassuk.


Utolsó felülvizsgálat: 2022.02.04 16:50


Néha azt szeretné, ha a programban minden leállna, amíg egy adott feltétel igazzá nem válik. Ezt megteheti egy while ciklus segítségével. Ez a példa bemutatja, hogyan kell egy while ciklust használni egy analóg érzékelő értékének kalibrálására.

A fő ciklusban az alábbi vázlat a 0 analóg kivezetésen lévő fotoellenállás értékét olvassa le, és ezt használja a 9. kivezetésen lévő LED fényerejéhez. De miközben a 2. digitális kivezetéshez csatlakoztatott gombot megnyomják, a program a calibrate() nevű módszert futtatja, amely az analóg érzékelő legmagasabb és legalacsonyabb értékét keresi. Amikor elengedi a gombot, a vázlat a fő ciklussal folytatódik.

Ezzel a technikával frissítheti a fotoellenállás maximális és minimális értékét, ha a fényviszonyok megváltoznak.

Hardver szükséglet

  • Arduino kártya

  • nyomógomb vagy kapcsoló

  • fotoellenállás vagy más analóg érzékelő

  • 2 10 kohmos ellenállás

  • összekötő vezetékek

  • dugdosós próbapanel (breadboard)

Az áramkör

Csatlakoztassa az analóg érzékelőt (például potenciométert, fényérzékelőt) a 2. analóg bemenethez 10 kohmos ellenállással a földeléshez. Csatlakoztassa a gombot a digitális kivezetéshez, ismét 10 kohmos ellenállással a földhöz. Csatlakoztassa a LED-jét a 9-es digitális kivezetéshez 220 ohmos ellenállással sorbakötve.

Vázlat

A kód

/*
  Conditionals - while statement

  Ez a példa a while() utasítások használatát mutatja be.

  Amíg a nyomógombot lenyomják, a vázlat a kalibrációs rutint futtatja.
  A while hurok alatti szenzor leolvasása határozza meg a fotoellenállástól
  várható minimális és maximum értéket.

  Ez a kalibrációs példa egy változata.

  Az áramkör:
  - fotoellenállás a +5V-ról az analógra 0. kivezetésre csatlakoztatva
  - 10 kilohm-os ellenállás a földről az analóg 0. kivezetésre csatlakoztatva
  - LED 220 ohmos ellenálláson keresztül a 9-es digitális kivezetésről a földre csatlakoztatva
  - nyomógomb a 2-es kivezetésről +5V-ra csatlakoztatva
  - 10 kilohm-os ellenállás a 2-es kivezetésről a földre csatlakoztatva

  created 17 Jan 2009
  modified 30 Aug 2011
  by Tom Igoe
  modified 20 Jan 2017
  by Arturo Guadalupi

  Ez a kód nyilvános.

  https://docs.arduino.cc/built-in-examples/control-structures/WhileStatementConditional
*/


// Ezek az állandók nem változnak:
const int sensorPin = A0;       // kivezetés, amelyhez az érzékelő csatlakozik
const int ledPin = 9;           // kivezetés, amelyhez a LED csatlakozik
const int indicatorLedPin = 13; // kivezetés, amelyhez a beépített LED csatlakozik
const int buttonPin = 2;        // kivezetés, amelyhez a gomb csatlakozik


// Ezek a változók megváltoznak:
int sensorMin = 1023;  // minimum érzékelő érték
int sensorMax = 0;     // maximum érzékelő érték
int sensorValue = 0;         // az érzékelő érték


void setup() {
  // állítsa be a LED kivezetéseket kimenetként és a kapcsoló kivezetését bemenetként:
  pinMode(indicatorLedPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
}

void loop() {
  // miközben a gombot lenyomva tartja, mérje le a kalibrációs értékeket:
  while (digitalRead(buttonPin) == HIGH) {
    calibrate();
  }
  // jelzi a kalibrációs időszak végét
  digitalWrite(indicatorLedPin, LOW);

  // olvassa le az érzékelőt:
  sensorValue = analogRead(sensorPin);

  // alkalmazza a kalibrálást az érzékelő leolvasására
  sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);

  // ha az érzékelő értéke kívül esik a kalibrálás során a tartományon
  sensorValue = constrain(sensorValue, 0, 255);

  // halványítsa el a LED-et a kalibrált értékkel:
  analogWrite(ledPin, sensorValue);
}

void calibrate() {
  // kapcsolja be a jelző LED-et, hogy jelezze, hogy a kalibráció történik:
  digitalWrite(indicatorLedPin, HIGH);
  // olvassa le az érzékelőt:
  sensorValue = analogRead(sensorPin);

  // rögzítse az érzékelő maximális értékét
  if (sensorValue > sensorMax) {
    sensorMax = sensorValue;
  }

  // rögzítse az érzékelő minimális értékét
  if (sensorValue < sensorMin) {
    sensorMin = sensorValue;
  }
}

Tudj meg többet

További alapvető oktatóanyagokat a beépített példák részben talál.

Felfedezheti a nyelvi referenciát is, az Arduino programozási nyelv részletes gyűjteményét.