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¶
2. Code¶
Öffnen Sie die Datei
10-Potentiometer_scale_value.ino
unter dem Pfadultimate-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.
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 undLiquidCrystal_I2C
für das LCD) eingebunden. Ein LCD-Objekt wird mit der I2C-Adresse0x27
erstellt und ist definiert mit16
Spalten und2
Zeilen.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.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.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 von200ms
für die Stabilität eingeführt.