hhhiiillllfffeeee

OP #5750355
Lesenswert?
• ▲
▼
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

unsigned long terminAlt = 0, terminNeu = 0;
int ZustandAlt = LOW ;
int ZustandNeu = LOW ;
float f = 0;
float highscore = 0.0;

void setup() {
  lcd.begin(16, 2);
  lcd.print("Freq: ");
  pinMode(A3, INPUT);
  Serial.begin(9600);
}

void loop() {
  ZustandNeu = digitalRead(A3);
  if (ZustandNeu == HIGH && ZustandAlt == LOW) {
    terminNeu = micros();
    if (terminNeu > terminAlt) {
      unsigned long T = terminNeu - terminAlt;
      f = 1000000.0 / T;

      lcd.setCursor(7, 0);
      lcd.print("            ");

      lcd.setCursor(7, 0);
      lcd.print(f);

    }
    terminAlt = terminNeu;
  }
  ZustandAlt = ZustandNeu;
}

hi ich bin neu hier hab seit kurzen einen Arduino nano bekommen und hab 
mich eine bisschen damit beschäftigt kann mir jmd hier weiter helfen 
mein lcd display flackert immer wenn ich an meinem ANEMOMETER VANE PROBE 
rein puste
#5750381
Lesenswert?
• ▲
▼
Das flackert weil du ja zuerst mal mit Leerzeichen das Feld 
überschreibst und dann erst nochmal mit Text. Der Funktionsaufruf 
print() updatet das Display sofort.
Du wirst dich wohl ein wenig mit Text-Operationen auseinander setzen 
müssen um die Zeile erstmal vor zu bereiten, und dann mit nur einem 
Aufruf zu printen.

EDIT: Zu spät ;)

Und stimmt, es spielt ja keine Rolle ob die Zeile samt Leerzeichen mal 
kürzer oder mal länger wird, Hauptsache die Leerzeichen überschreiben 
die Zahlen vom letzten Mal.
#5750485
Lesenswert?
• ▲
▼
David H. schrieb:
> mein lcd display flackert immer wenn ich an meinem ANEMOMETER VANE PROBE
> rein puste

Wenn du die Vorschläge der Vorposter umsetzt wird das Flackern wegsein, 
aber wohl selten ein lesbarer Wert am Display stehen(bleiben)
Du könntest das Aktualisieren der Anzeige auf wenige Hertz beschränken?! 
Und dann den (Mittel)wert über die Periode anzeigen. Und den Maximalwert 
(der letzten 10sec?)- nachdem du eine highscore im Code hast?
#5750516
Lesenswert?
• ▲
▼
Am einfachsten ist es, f auf (long) zu casten und dann sprintf zu 
verwenden:

// Speicherplatz für String reservieren
// Achtung: Ein Byte für abschließende \0
char textToDisplay[8];

// Zahl in formatierten String wandeln
sprintf(textToDisplay, "%8lu", (unsigned long)(f));

// und ausgeben
lcd.setCursor(7, 0);
lcd.print(textToDisplay);

Gruß
  Hermann
OP #5750594
Lesenswert?
• ▲
▼
an alle DANKE für die Hilfe!
hab es geschafft

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

unsigned long terminAlt = 0, terminNeu = 0, terminAusgabe = 0;
int ZustandAlt = LOW ;
int ZustandNeu = LOW ;
float f = 0;


void setup() {
  lcd.begin(16, 2);
  lcd.print("Freq: ");
  pinMode(A3, INPUT);
  Serial.begin(9600);
}

void loop() {
  ZustandNeu = digitalRead(A3);
  if (ZustandNeu == HIGH && ZustandAlt == LOW) {
    terminNeu = micros();
    if (terminNeu > terminAlt) {
      unsigned long T = terminNeu - terminAlt;
      f = 1000000.0 / T;
    }
    terminAlt = terminNeu;
  }
  ZustandAlt = ZustandNeu;

  if (millis() >= terminAusgabe) {
    terminAusgabe += 250;
    lcd.setCursor(7, 0);
    lcd.print("            ");

    lcd.setCursor(7, 0);
    lcd.print(f);
  }
}
#5750615
Lesenswert?
• ▲
▼
Zum Abschluss noch der obligatorische Hinweis auf das Textformat. Hilft 
den Helfenden beim helfen...
(Wie, steht über dem Texteingabefeld unter Formatierung )
1
#include <LiquidCrystal.h>
2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
3

4
unsigned long terminAlt = 0, terminNeu = 0, terminAusgabe = 0;
5
int ZustandAlt = LOW ;
6
int ZustandNeu = LOW ;
7
float f = 0;
8

9

10
void setup() {
11
  lcd.begin(16, 2);
12
  lcd.print("Freq: ");
13
  pinMode(A3, INPUT);
14
  Serial.begin(9600);
15
}
16

17
void loop() {
18
  ZustandNeu = digitalRead(A3);
19
  if (ZustandNeu == HIGH && ZustandAlt == LOW) {
20
    terminNeu = micros();
21
    if (terminNeu > terminAlt) {
22
      unsigned long T = terminNeu - terminAlt;
23
      f = 1000000.0 / T;
24
    }
25
    terminAlt = terminNeu;
26
  }
27
  ZustandAlt = ZustandNeu;
28

29
  if (millis() >= terminAusgabe) {
30
    terminAusgabe += 250;
31
    lcd.setCursor(7, 0);
32
    lcd.print("            ");
33

34
    lcd.setCursor(7, 0);
35
    lcd.print(f);
36
  }
37
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.