INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 2 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Thermometer mit 7 Segment Anzeige
14.05.2016, 23:03
Beitrag #9
RE: Thermometer mit 7 Segment Anzeige
Was passiert, wen du displayNumber (1234); aufrufst ?

Jetzt habe ich noch was gesehen, bei shiftOut muss auf das richtige Element von Digits zugegriffen werden. Das habe ich vorhin übersehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2016, 09:15
Beitrag #10
RE: Thermometer mit 7 Segment Anzeige
Danke, war mein Fehler mit den digits!
So bekomme ich erstmal die ganzen Zahlen vor dem Komma angezeigt.
Nach dem Komma bleibt alles auf Null!
Wo ist hier der Fehler?
Code:
void displayNumber(int n)
{
byte zahl[4];
zahl[0] = n % 10;
zahl[1] = n % 100 / 10;
zahl[2] = n % 1000 / 100;
zahl[3] = n / 1000;

    digitalWrite(LATCH, LOW);
    shiftOut(DATA, CLOCK, LSBFIRST, digits[zahl[2]]);
    shiftOut(DATA, CLOCK, LSBFIRST, digits[zahl[3]]);
    shiftOut(DATA, CLOCK, LSBFIRST, digits[zahl[0]]);
    shiftOut(DATA, CLOCK, LSBFIRST, digits[zahl[1]]);
    digitalWrite(LATCH, HIGH);
}

void loop(void) {
float temperature = getTemp();
Serial.println(temperature);
displayNumber(temperature);
delay(5000);

}

Wenn ich displayNumber(1234); eingebe, bekomme ich 3412 angezeigt.
Also alle Segmente funktionieren.

gruß ottii50
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2016, 11:56
Beitrag #11
RE: Thermometer mit 7 Segment Anzeige
Jetzt hast du es schon fast geschaft.


Jetzt noch das round mit den *100 und die Reihenfolge der shiftOut anpassen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2016, 12:50
Beitrag #12
RE: Thermometer mit 7 Segment Anzeige
Sorry, hatte ich vergessen!!! " displayNumber(temperature*100);"
Super vielen Dank!
Zahlen im negativen Bereich wird es wohl nicht anzeigen, oder?

gruß...ottii50
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2016, 16:45
Beitrag #13
RE: Thermometer mit 7 Segment Anzeige
Zitat:Zahlen im negativen Bereich wird es wohl nicht anzeigen, oder?
Ist im Prinzip schon möglich.

Ein if-Anweisung, ob die Zahle < 0 ist, wen ja ein auf dem vordersten Segment ein '-' ausgeben und anschliessen die Zahl mit abs() positiv machen.

Aber du wird ein Segment für das '-' opfern müssen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2016, 19:06
Beitrag #14
RE: Thermometer mit 7 Segment Anzeige
Oh, vielen Dank!

Ja, ich wollte auch nur eine Stelle nach dem Komma haben.
Hab jetzt " int n = round(temperature*10);" auf 10 gesetz, nun habe ich die eine Stelle nach dem Komma.
Aber das mit dem minus bekomme ich einfach nicht hin.
Die letzte Stelle vor dem Komma und die Stelle nach dem Komma werden richtig angezeigt.
Die erste Stelle zeigt Null und die zweite eine gespiegelte 9.
Ich wollte eigentlich, dass die ersten beiden Stellen bei Null ausgehen, aber irgendwo ist der Wurm drinAngry

Code:
void displayNumber(int n)
{
byte zahl[4];
zahl[0] = (n % 100) % 10;
zahl[1] = (n % 100) / 10;
zahl[2] = 0; //(n % 1000) / 100;
zahl[3] = 0; //n / 1000;

int abs = n;
if(abs < 0) {
  zahl[3] = 2; // diese beiden Zeilen sollten das
  abs *= -1;  // minus Zeichen ausgeben! ODER hab ich was falsch gelesen?
}
if(abs >= 10)  {
  zahl[2] = digits[(abs %1000) / 100 ];
  }else{
    zahl[2] = zahl[3];

    }
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2016, 16:50 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2016 16:57 von Mathias.)
Beitrag #15
RE: Thermometer mit 7 Segment Anzeige
Ich hoffe, das es so geht, habe den Text blind eingegeben.
Code:
    zahl[0] = n % 10;
    zahl[1] = n % 100 / 10;
    zahl[2] = n  / 100;

  digitalWrite(LATCH, LOW);
  shiftOut(DATA, CLOCK, LSBFIRST, digits[zahl[0]]);
  shiftOut(DATA, CLOCK, LSBFIRST, digits[zahl[1]] | 0B10000000); // Dezimalpunkt
  shiftOut(DATA, CLOCK, LSBFIRST, digits[zahl[2]]);
  if (n < 0){
    shiftOut(DATA, CLOCK, LSBFIRST, 0B01000000);
  }
  else {
    shiftOut(DATA, CLOCK, LSBFIRST, 0B00000000);
  }
  digitalWrite(LATCH, HIGH);
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2016, 17:36
Beitrag #16
RE: Thermometer mit 7 Segment Anzeige
Danke!
Aber ich brauch doch die vier Stellen. z.B. bei -22,6 °C.
Oder denke ich jetzt etwas falsch?
Das mit den Nullen abschalten habe ich schon hinbekommen, aber das mit dem minus klappt einfach nicht!!

gruß .. ottii50
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  merkwürdige Anzeige bei lektion 17 lecker16 7 166 20.11.2016 22:40
Letzter Beitrag: Tommy56
Smile Datum Anzeige mit 7 Segmentanzeige ottii50 11 903 16.05.2016 19:12
Letzter Beitrag: Mathias
  Leonardo- Anzeige von MIDI-Daten an ws2812b Modinox 7 483 26.01.2016 13:11
Letzter Beitrag: Bitklopfer
  OLED Display anzeige von Logo falsch ! b3ta 0 339 23.01.2016 15:12
Letzter Beitrag: b3ta
  8 LED , 7-Segment-Elemente einzeln ansteuern beim tm1638 und die Buttons arduinofan 0 503 15.01.2016 22:37
Letzter Beitrag: arduinofan
  8x7 Segment LED Anzeige / Sketch verändern w1ck3d 3 657 23.11.2015 17:56
Letzter Beitrag: hotsystems
  7-Segment Multiplex, überblendet Mathias 4 719 18.11.2015 17:22
Letzter Beitrag: Mathias
  Drehzahl Anzeige Analog (neuling) Kuxii 9 1.113 30.10.2015 12:01
Letzter Beitrag: hotsystems
  Sieben Segment LED Anzeige Tellen 10 1.824 18.06.2015 21:21
Letzter Beitrag: Tellen
  fehler in anzeige von float avoid 11 1.912 12.04.2015 16:32
Letzter Beitrag: HaWe

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste