Analogwert wird als Batteriesymbol auf LCD angezeigt



Ziel:

Ziel ist es, Spannungen von 0V bis 5V als Batteriesymbol darzustellen.

Hierbei geht es nicht um Genauigkeit, sondern um das schnelle Erfassen eines Zustandes zwischen „leer“ und „voll“.

Folgendes Symbol signalisiert uns: „fast halbvoll“:

                   




Schaltung:

Als Schaltungsaufbau benutzen wir Arduino, LCD-Shield und einen einstellbaren 10KΩ-Widerstand, der in bekannter Weise 0...5V an Analog_1 einspeist:

                   




Programmcode:


/*
  Analogwert als Battriesymbol
 
  Arduino + LCD-Shield + 10K-Poti liefert 0...5V an Analog_1
  
  www.arduinospielwiese.de

*/



#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

uint8_t f; // Füllstand
int value; // Wert vom ADC

// 6 Byte-Arrays für 6 verschiedene Batteriesymbole
byte battery_0[8] = { 0b01110, 0b11011, 0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b11111 };
byte battery_1[8] = { 0b01110, 0b11011, 0b10001, 0b10001, 0b10001, 0b10001, 0b11111, 0b11111 };
byte battery_2[8] = { 0b01110, 0b11011, 0b10001, 0b10001, 0b10001, 0b11111, 0b11111, 0b11111 };
byte battery_3[8] = { 0b01110, 0b11011, 0b10001, 0b10001, 0b11111, 0b11111, 0b11111, 0b11111 };
byte battery_4[8] = { 0b01110, 0b11011, 0b10001, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 };
byte battery_5[8] = { 0b01110, 0b11011, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 };

void setup(){
  lcd.clear();
  lcd.begin(16, 2);

  // 6 der 8 Speicherplätze des LCD für selbstdefinierte Symbole mit den oben definierten Byte-Arrays befüllen
  lcd.createChar(0, battery_0);
  lcd.createChar(1, battery_1);
  lcd.createChar(2, battery_2);
  lcd.createChar(3, battery_3);
  lcd.createChar(4, battery_4);
  lcd.createChar(5, battery_5);
}

void loop(){
  value = analogRead(A1);
  f = (uint8_t) (value / 190);
  lcd.setCursor(0, 0);
  lcd.write(f);
  delay(250);
}





Erklärungen zum Programmcode:

Wie man ein eigene Symbole auf LCD ausgibt findest Du unter: Eigene Symbole erschaffen und im LCD ausgeben

Wie man einen Analogwert mit Arduino verarbeitet findest Du hier.

Was bedeutet die Zeile: f = (uint8_t) (value / 190);
  • value ist der Wert, den der ADC liefert.
    Es können Werte von 0 bis 1023 sein - wenn Spannungen von 0V bis 5V an den Analogeingang A1 gelegt werden.

  • Mit dem Trick (value / 190) entstehen Zahlenwerte von rund 0 bis rund 5.
    Diese werden in das Format uint8_t umgewandelt (gecastet) und der Variablen f zugewiesen, die diesen Datentyp besitzt.

  • Die Variable f wird später in der Anweisung lcd.write(f) den gewünschten Batteriesymbol-Speicherplatz (0 bis 5) auf dem LCD abbilden.