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.