Guten Tag,
ich bin zur zeit damit beschäftig das Oled Display "ssd1306" (128*64px version) am Nano zum Laufen zu bringen. Normale Schrift und alles funktioniert, wie es soll allerdings bekomme ich Variablen nur eingeschränkt zum laufen. Ich habe mir einen kleinen Code zusammengesucht um mithilfe von millis() die Laufzeit in Minuten und Stunden zu errechnen. Ich habe 2 eigentlich identische Versionen des Quellcodes, eine gibt die Minuten, Stunden und Sekunden über den seriellen Monitor aus und die andere Sollte die zeiten eigentlich am Display ausgeben. Nach 60 sekunden soll die minute auf 1 gehen und die Sekunde aus 0, was leider nur am seriellen Monitor funktioniert.
unsigned long time;
unsigned long sekunden;
unsigned long minuten;
unsigned long stunden;
int output;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
stunden= millis() / 3600000;
minuten= millis() / 60000 - (stunden)*60;
sekunden= millis()/ 1000 - (minuten) * 60;
//millisekunden werden in Minuten umgewandelt, Stunden werden in minuten ungewandelt und dann von den aktuellen Minuten abgezogen
Serial.println(stunden);
Serial.println(minuten);
Serial.println(sekunden);
// wait a second so as not to send massive amounts of data
delay(1000);
}
#include <U8glib.h>
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
unsigned long time;
unsigned long sekunden;
unsigned long minuten ;
unsigned long stunden;
int output;
void draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.setFont(u8g_font_unifont);
//u8g.setFont(u8g_font_osb21);
char buf [9];
sprintf (buf, "%d", (stunden));
u8g.drawStr( 10, 10, buf);
char buf2 [9];
sprintf (buf2, "%d", (sekunden));
u8g.drawStr( 90, 10, buf2);
char buf3 [9];
sprintf (buf3, "%d", (minuten));
u8g.drawStr( 70, 10, buf3);
}
void setup(void) {
stunden= millis() / 3600000;
minuten= millis() / 60000 - (stunden)*60;
sekunden= millis()/ 1000 - (minuten) * 60;
// flip screen, if required
// u8g.setRot180();
// set SPI backup if required
//u8g.setHardwareBackup(u8g_backup_avr_spi);
// assign default color value
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
u8g.setColorIndex(255); // white
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
u8g.setColorIndex(3); // max intensity
}
else if ( u8g.getMode() == U8G_MODE_BW ) {
u8g.setColorIndex(1); // pixel on
}
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
u8g.setHiColorByRGB(255,255,255);
}
}
void loop(void) {
// picture loop
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
delay(250);
}
Der erste Code funktioniert einwandfrei, allerdings die Version für das Display bleibt jeweils bei 0 stehen ohne das etwas passiert. Ich muss zugeben das ich nicht gerade viel Ahnung von Arduinos habe.
Ich wäre euch sehr dankbar wenn ihr mir ein paar tipps geben könnt in welche Richtung sich meine Recherche richten sollte um die Lösung für mein Problem zu finden.