Potentiometer-Skalenwert

Dieses Projekt wurde entwickelt, um den Wert eines Potentiometers auszulesen und diesen Wert auf einem LCD 1620 mit einer I2C-Schnittstelle anzuzeigen. Der Wert wird auch an den seriellen Monitor gesendet, um ihn in Echtzeit anzusehen. Ein besonderes Merkmal dieses Projekts ist die visuelle Darstellung des Potentiometerwerts auf dem LCD, die einen Balken anzeigt, dessen Länge dem Wert entspricht.

1. Schalten Sie die Schaltung

../_images/10-fun-Potentiometer_scale_value_circuit.png

2. Code

  1. Öffnen Sie die Datei 10-Potentiometer_scale_value.ino unter dem Pfad ultimate-sensor-kit\fun_project\10-Potentiometer_scale_value, oder kopieren Sie diesen Code in die Arduino IDE.

3. Code-Erklärung

Das Projekt funktioniert, indem es kontinuierlich den Wert von einem angeschlossenen Potentiometer liest. Dieser Wert wird dann auf eine kleinere Skala (0-16) abgebildet und sowohl numerisch als auch visuell auf dem LCD dargestellt. Durch Überprüfung des Unterschieds zwischen aufeinanderfolgenden Messwerten stellt der Code sicher, dass nur signifikante Änderungen auf dem Display widergespiegelt werden, wodurch das Flackern reduziert wird. Dies hilft, unerwünschte visuelle Effekte durch häufiges Aktualisieren des LCD-Bildschirms zu vermeiden.

  1. Bibliothek einbinden und initialisieren:

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27, 16, 2);
    

    Hier werden die benötigten Bibliotheken (Wire für die I2C-Kommunikation und LiquidCrystal_I2C für das LCD) eingebunden. Ein LCD-Objekt wird mit der I2C-Adresse 0x27 erstellt und ist definiert mit 16 Spalten und 2 Zeilen.

  2. Variablendeklaration:

    int lastRead = 0;     // Previous potentiometer value
    int currentRead = 0;  // Current potentiometer value
    

    lastRead speichert den zuletzt gelesenen Potentiometerwert. currentRead speichert den aktuellen Wert des Potentiometers.

  3. setup() Funktion:

    void setup() {
      lcd.init();          // Initialize the LCD
      lcd.backlight();     // Turn on the LCD backlight
      Serial.begin(9600);  // Start serial communication at 9600 baud rate
    }
    

    Das LCD wird initialisiert, seine Hintergrundbeleuchtung eingeschaltet und die serielle Kommunikation mit einer Baudrate von 9600 gestartet.

  4. Hauptloop:

    void loop() {
      int currentRead = analogRead(A0);
      int barLength = map(currentRead, 0, 1023, 0, 16);
      if (abs(lastRead - currentRead) > 2) {
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Wert:");
        lcd.setCursor(7, 0);
        lcd.print(currentRead);
        Serial.println(currentRead);
        for (int i = 0; i < barLength; i++) {
          lcd.setCursor(i, 1);
          lcd.print(char(255));
        }
      }
      lastRead = currentRead;
      delay(200);
    }
    
    • Der Potentiometerwert wird gelesen und auf eine Balkenlänge (0-16) abgebildet.

    • Wenn der Unterschied zwischen dem letzten und dem aktuellen Wert größer als 2 ist, wird das LCD aktualisiert.

    • Der Wert wird in der ersten Zeile und ein Balken (basierend auf dem abgebildeten Wert) in der zweiten Zeile angezeigt.

    • Der Wert wird auch an den seriellen Monitor gesendet.

    • Vor der nächsten Iteration wird lastRead aktualisiert, und es wird eine Verzögerung von 200ms für die Stabilität eingeführt.