Analóg bemenet, kimenet soros monitorra

Egy analóg bemeneti kivezetés olvasása, kalibrálja az eredményt, majd használja ezt az adatot a LED elsötétítésére vagy világosabbá tételére.


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


Ez a példa bemutatja, hogyan kell beolvasni egy analóg bemeneti kivezetést, leképezni az eredményt egy 0 és 255 közötti tartományra, ezzel az eredménnyel beállítani a kimeneti érintkező impulzusszélesség-modulációját (PWM) a LED elhalványítására vagy világosabbá tételére, és kinyomtatni az értékeket az Arduino Software (IDE) soros monitorára.

Hardver szükséglet

  • Arduino kártya

  • Potenciométer

  • Piros LED

  • 200 ohm-os ellenállás

Az áramkör

Csatlakoztassa a potméter egyik érintkezőjét az 5 V-hoz, a középső érintkezőt az analóg 0-s kivezetéshez, a fennmaradó érintkezőt pedig a földhöz. Ezután csatlakoztasson egy 220 ohmos áramkorlátozó ellenállást a 9-es digitális kivezetéshez, sorba kapcsolva a LED-del. A LED hosszú, pozitív lábát (anódját) az ellenállás kimenetére, a rövidebb, negatív lábát (a katódot) a testre kell kötni.

Vázlat

A kód

Az alábbi vázlaton két kivezetés-hozzárendelés (analóg 0 a potenciométerünkhöz és digitális 9 a LED-hez) és két változó, a sensorValue és outputValue deklarálása után a setup() függvényben csak a soros kommunikáció elindítása szükséges.

Ezután a fő ciklusban a sensorValue hozzá van rendelve a potenciométerről leolvasott nyers analóg érték tárolásához. Az Arduino analogRead tartománya 0 és 1023 között van, az analogWrite tartománya pedig csak 0 és 255 között van, ezért a potenciométer adatait át kell alakítani, hogy a kisebb tartományba illeszkedjenek, mielőtt a LED tompítására használnák.

Ennek az értéknek a konvertálásához használja a map() nevű függvényt:

outputValue = map(sensorValue, 0, 1023, 0, 255);

Az outputValue értéke megegyezik a potenciométer skálázott értékével. A map() öt argumentumot fogad el: A leképezendő érték, a bemeneti adatok alacsony és magas értékei, valamint az újraleképezendő adatok alacsony és magas értékei. Ebben az esetben az érzékelő adatai az eredeti 0 és 1023 közötti tartományról 0 és 255 közöttire vannak leképezve.

Az újonnan leképezett szenzoradatok ezután az analogOutPin kimenetre kerülnek, és a LED elsötétül vagy világosabbá válik a potenciométer elforgatásakor. Végül mind a nyers, mind a skálázott szenzorértékek elküldésre kerülnek az Arduino Software (IDE) soros monitor ablakába, folyamatos adatfolyamban.

/*
  Analog input, analog output, serial output

  Beolvas egy analóg bemeneti kivezetést, leképezi az eredményt egy 0 és 255
  közötti tartományra, és az eredményt használja a kimeneti kivezetés
  impulzusszélesség-modulációjának (PWM) beállításához.

  Az eredményeket a Serial Monitorra is kinyomtatja.

  Az áramkör:
  - potenciométer a 0 analóg kivezetéshez csatlakoztatva.
    A potenciométer középső csatlakozója az analóg kivezetéshez megy.
    A potenciométer oldalsó csatlakozói +5V-ra és a földelre mennek. 
  - A LED a 9-es digitális kivezetésről a földre csatlakozik.
  
  created 29 Dec. 2008
  modified 9 Apr 2012
  by Tom Igoe

  Ez a kód nyilvános.

  https://docs.arduino.cc/built-in-examples/analog/AnalogInOutSerial
*/
// Ezek az állandók nem változnak. A használt kivezetések elnevezésére szolgálnak: 
const int analogInPin = A0; // Analóg bemeneti kivezetés, amelyhez a potenciométer csatlakozik
const int analogOutPin = 9; // Analóg kimeneti kivezetés, amelyhez a LED csatlakozik

int sensorValue = 0;        // a potméterből kiolvasott érték
int outputValue = 0;        // érték a PWM kimenethez (analóg kimenet)

void setup() {
  // a soros kommunikáció inicializálása 9600 bps-sel:
  Serial.begin(9600);
}

void loop() {
  // olvassa el az analóg be értéket:
  sensorValue = analogRead(analogInPin);

  // képezze le az analóg kimenet tartományára:
  outputValue = map(sensorValue, 0, 1023, 0, 255);

  // módosítsa az analóg kimenet értékét:
  analogWrite(analogOutPin, outputValue);

  // nyomtassa ki az eredményeket a Serial Monitorba:
  Serial.print("sensor = ");
  Serial.print(sensorValue);
  Serial.print("\t output = ");
  Serial.println(outputValue);

  // várjon 2 ezredmásodpercet a következő ciklus előtt, hogy az analóg-digitális
  // átalakító rendeződjön az utolsó leolvasás után:
  delay(2);
}

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.