Mein erstes Projekt, bin Anfänger: Für meine Tonbandmaschine möchte ich ein Digitaldisplay realisieren. Aufgebaut mit einem Arduino Nano, Oled SSD1306 128*32 Display und Fotosensor der Digitalsignal ausgibt und am D3 Input vom Nano hängt. Ich hab das Problem dass auf dem Oled Display nicht der Wert Angezeigt wird wie im Serial Monitor. Soweit Funktioniert auch erstmal alles. Im Serial Monitor, zählt der Wert bei jedem Ausschlag vom Fotosensor 1 hoch, Prima soll genau so sein. Im Oled Display steht immer der Anfangswert, es aktuallisiert sich nicht so wie im Serial Monitor sichtbar.
EDIT: Hab gerade gesehen, dass sich das Display sehr langsam (20-40 Sek.) aktualisiert. Der alte Wert bleibt und wird "überschrieben" Danke für die Hilfe, Gruß Alex
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_SSD1306.h>
#include <splash.h>
#include <Adafruit_GFX.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//int analogPin = A0; // Testsensor Hallgeber
//int val = 0; // Testsensor Hallgeber
int IR = 3; // Pin, der gelesen werden soll
long x = 0; // Zähler
void setup()
{
Serial.begin(9600); // Setup der seriellen Verbindung
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
display.begin();
display.setTextSize(4);
display.setTextColor(WHITE);
//display.setCursor(0, 1);
display.clearDisplay();
}
void loop() {
static int counterLst = 0;
int counter = digitalRead(3);
if (counterLst != counter) {
counterLst = counter;
if (HIGH == counter)
x++;
//if (LOW == counter)x--; // Für Rewind, bekommt eigenen InputPin und wird per Relais geschaltet
}
Serial.println(x);
display.println(x);
display.display();
//delay(10);
}
Das liegt an deiner Art, wie du deine Impulse zählst und zur Anzeige bringst.
Was das überschreiben betrifft, solltest du am einfachsten den letzten Wert speichern und wenn der sich änderdert, den gespeicherten mit schwarz den angezeigten Wert überschreiben. Dann den neuen Wert rein schreiben.
Hallo Wwerner,
danke dir erstmal. Das zählen klappt jetzt- Super.
Bleibt nur noch das problem das die Zahlen nicht gelöscht werden wenn eine neue kommt.
Also die 1 steht im Display, dann kommt der Zählimpuls und die 2 wird über die 1 geschrieben, die eins aber nicht gelöscht.
Hoffe das ist verständlich, kann gerne auch ein Video davon machen.
Du hast aber nächste Stolperfalle, wenn das band rückwärts läuft bleib dir die erste angezeigte zahl "hängen"
ZB.
Zähler ist bei 1032, bei rückwärts laufen kommt der Zähler auf 110, dann wird angezeigt 1110
Wurde so was ähnlich Mechanischen Zähler bauen mit vorgestellter null
0012
Dazu switch case nehmen oder mit If abfrage das erschlagen.
Danke Fony, dass du solche gedanken machst. Ich bin gerade auf der Such nach den "führenden Nullen" aber noch nichts gefunden.
Dein letzten Satz hab ich noch nicht so richtig verstanden "Dazu switch case nehmen oder mit If abfrage das erschlagen"
Kannst du mir den Code zeigen? Danke und Gruß Alex
Das muss man schon selber bauen war ja nur Vorschlag.
Um nicht nötigen Zeichen löschen löschen gibt's mehrere Möglichkeiten, mansche Bibliotheken machen das selber, die Adafruit jedoch nicht, wen mich nicht irre, nutze sehr sehr selten Adafruit für Displays.
Zeige dein aktuellen Sketsch, schaue mir das später an.
Beispiele sind gut nur öfters zeigen nicht das was man möchte sehen, sind ja nur Beispiele, anpassen muss man selber.
Die Anzahl der Nullen ist in der 5 versteckt
Wenn x ein (u)int16_t Wert ist, so hast Du insgesamt maximal 5 Stellen. Wenn Du sicherstellen kannst, dass Du die nicht vollständig brauchst, kannst auch 4 nehmen ....