sitemap link mailform link home

Bargraph-Anzeige mit LCD

Messwerte des Analogeingangs A0 sollen als Rohwert und als Bargraph auf dem LC-Display angezeigt werden. Dazu kann der Eingang A0 einfach offen bleiben - also unbeschaltet. Dann ergeben sich bereits unterschiedliche Messwerte bis ca. 250. Schließt man einen 20 cm langen Draht an, so bekommt man stark schwankende Messwerte bis über 600. Das entspricht Spannungen von ca. 2 bis 3 Volt. Der Draht wirkt also als Antenne!
Die gemessenen Werte hängen also mit den verschiedenen Funknetzen, atmosphärischen Störungen sowie der Netzfrequenz unserer Stromversorgung zusammen. Sie alle werden von dem Draht "empfangen".

Das LC-Display kann wie folgt angeschlossen werden:

Schaltplan

Code-Listing:

Achtung: In der Zeile #include (LiquidCrystal.h) müssen die runden Klammern gegen eckige ersetzt werden. In HTML ist die Anzeige eckiger Klammern immer etwas problematisch...

// Messwerte des Analogeingangs A0
// werden als Rohwert und als Bargraph angezeigt
// Autor: Niels Nikolaisen www.elektronik.nmp24.de
// o-------------------o
// | Messwert A0:1023 |
// | [][][][][]               | <- Bargraph-Anzeige
// o-------------------o

#include (LiquidCrystal.h) // <- hier müssen eckige Klammern hin!
// Festlegen der Pins für das LCD:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


void setup() {
  // LCD starten
  lcd.begin(16, 2);
  // LCD einmal zur Vorsicht löschen:
  lcd.clear();
  // Text in Zeile 1 ausgeben
  lcd.setCursor(0, 0); // 1. Zeichen, 1. Zeile
  lcd.print("Messwert A0:");
}


void loop() {
  // Nach dem Text "Spannung A0:" wird der
  // Rohwert des AD-Wandlers (0 bis 1023) ausgegeben
  lcd.setCursor(12, 0);
  lcd.print("    "); // Löschen der alten Anzeigewerte
  lcd.setCursor(12, 0); // Setzen auf erste Anzeigestelle
  // Die Anzeigewerte sind ein-, zwei-, drei- oder víerstellig
  // Damit die Anzeigewerte lesbar sind, wird rechtsbündig ausgegeben:
  // Spannung A0: 1023
  // Spannung A0:  576
  // Spannung A0:   37
  // Spannung A0:    0
  if (analogRead(A0) < 1000) lcd.print(" ");
  if (analogRead(A0) < 100) lcd.print(" ");
  if (analogRead(A0) < 10) lcd.print(" ");
  lcd.print(analogRead(A0));

  // Bargraphanzeige normieren:
  // Dreisatz: Barnumber / 16 = Messwert / 1023
  // -> 16-stelliges Display und 10 Bit AD-Wandler
  // Gerundet auf ganze Zahl wird automatisch bei "int"
  int Barnumber = ((analogRead(A0) * 16) / 1023);

  // Bargraph-Anzeige
  // -> Bargraph(Anzahl Kästchen, Zeile 1 oder 2, Verzögerung der Anzeige)
  Bargraph(Barnumber, 2, 0);
  delay(100); // alle 100 ms messen
}

void Bargraph(int barnumbers, int displayline, int wait_time)
{
  //Zeile elegant löschen
  lcd.setCursor(0, displayline - 1);
  lcd.print("                ");

  // Bargraph generieren
  if (barnumbers > 16) barnumbers = 16;
  for (int i; i < barnumbers; i++)
  {
    lcd.setCursor(i, displayline - 1);
    lcd.write(0xff); // Schwarzes Kästchen
    delay(wait_time);
  }
  return (0);
}

Letzte Änderung:
November 29. 2018 17:00:57
«    top    »