Hallo! Ich möchte auf einem LCD mittels Balkengrafik Messwerte darstellen. (127 Messwerte = 127 Balken) ab dem 128. Messwert soll der 1. Messwert aus dem Schieberegister rausfallen. Also ein SR wo ich 127 Bytewerte speichern kann. Kann mir da wer einen Tip geben, wie ich das mache?
Ich würde es als Ringspeicher auslegen. mit zwei Zeigern, einer wo der neue Wert geschrieben wird und einer womit der Ausgabe begonnen wird.
@ m. g. (ixil96) >Ich möchte auf einem LCD mittels Balkengrafik Messwerte darstellen. >(127 Messwerte = 127 Balken) >ab dem 128. Messwert soll der 1. Messwert aus dem Schieberegister >rausfallen. >Also ein SR wo ich 127 Bytewerte speichern kann. >Kann mir da wer einen Tip geben, wie ich das mache? Mit einem Array in Form eines FIFO.
Gute Frage, aber meine rudimentären C Kenntnisse reichen nicht zur Antwort. Ein entsprechend großes Array mit 2 Multipliziert schiebt die Bitstellen raus. Was am Ende des Arrays steht müsste dann vorn wieder rein, also Addition + 1. Mit deutschen Worten bekomme ich es wohl hin, wenn das so passt, aber nicht in der Fremdsprache "C"... Wo sind die Übersetzer?
Aber was Du beschreibst würde doch keine Balkengrafik darstellen?!
@ Gutefrage (Gast) >Gute Frage, aber meine rudimentären C Kenntnisse reichen nicht zur >Antwort. Dann kannst du auch keine Darstellung in C programmieren. >Ein entsprechend großes Array mit 2 Multipliziert schiebt die Bitstellen >raus. ? >Mit deutschen Worten bekomme ich es wohl hin, wenn das so passt, aber >nicht in der Fremdsprache "C"... Nicht mal in deutsch ist das verständlich. Lies den Artikel FIFO wie man sowas mit Pointern und Überlauf machen kann.
Gutefrage schrieb: > Aber was Du beschreibst würde doch keine Balkengrafik darstellen?! alles ist relativ. anstatt Daten zu schieben, schiebst du den Index. Wie hoch sind die Balken? Ist das ein binärer Wert? Wenn du viel Speicher hast, würde sich unsigned char fifo[128]={0}, idxRead=0, idxWrite=0; anbieten Wenn die Werte binär sind und du nicht viel Speicher hast, dann müsste man sich Lösung mit "Bitschieberei" überlegen. Was aber auch einfach wäre.
Daniel -. schrieb: > Wie hoch sind die Balken? Ist das ein binärer Wert? also ich verwende für die Darstellung des "Balkens" eine Funktion aus der u8glib.
1 | u8g_DrawVLine(&u8g, x, y, h); |
Damit wird eine vertikale Linie an der Position x, y, mit der Höhe h (in Pixel) gezeichnet. In h wird der Messwert dargestellt. Mit jeder neuen Messung soll die Linie um 1 Schritt nach links wandern.
@m. g. (ixil96) >Damit wird eine vertikale Linie an der Position x, y, mit der Höhe h (in >Pixel) gezeichnet. In h wird der Messwert dargestellt. Mit jeder neuen >Messung soll die Linie um 1 Schritt nach links wandern. Gut. Dann fang mal mit dem direkten, einfachen Ansatz an. Ein Array aus 127 Elementen, das deine 127 Messwerte enthält. Nach jedem Durchlauf kopierst du die um eins nach vorn und speicherst den neuesten Meßwert am Ende
1 | uint8_t mdata[127]; |
2 | |
3 | for (i=0; i<126; i++) { |
4 | mdata[i]=mdata[i+1]; |
5 | }
|
6 | mdata[126]=neuer_messwert; |
7 | lcd_neu_zeichnen(); |
Wenn das alles läuft, kann man das optimieren und das massenhafte Umkopieren einsparen, indem man mit einem Ringpuffer arbeitet. Aber das erst, nachdem die einfache Version läuft!
Falk B. schrieb: > @ Gutefrage (Gast) > >>Gute Frage, aber meine rudimentären C Kenntnisse reichen nicht zur >>Antwort. > > Dann kannst du auch keine Darstellung in C programmieren. Behauptete er das? > >>Ein entsprechend großes Array mit 2 Multipliziert schiebt die Bitstellen >>raus. > > ? Na klar Bitschieberei, sollte Falk doch auch kennen! > >>Mit deutschen Worten bekomme ich es wohl hin, wenn das so passt, aber >>nicht in der Fremdsprache "C"... > > Nicht mal in deutsch ist das verständlich. Und schon gar nicht in Eurem Lieblingsdialekt ;-) > > Lies den Artikel FIFO wie man sowas mit Pointern und Überlauf machen > kann. Imperativ, also mach das !!!
Hier meine Version:https://github.com/ChrisMicro/ArduinoWebServerPlot/blob/master/DS18x20_TemperatureGraphServer/ringBuffer.c
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.