Hallo zusammen,
dies ist mein erster Post, seid bitte gnädig...
Ich würde gerne an meiner Espressomaschine einen Timer nachrüsten. Ich möchte keinen kaufen, sondern Spass am Bauen haben...
Was soll es können?
Ein Reed Sensor merkt wenn ein Kaffee gezogen wird.
Daraufhin startet ein OLED Display eine "Stoppuhr". Wenn der Bezug vorbei ist (Reed ohne Magnetfeld) wird die vergangene Zeit noch 5 Sekunden angezeigt, dann geht das Display aus und wartet auf den nächsten Bezug.
Ich habe VIEL versucht und nun seit ihr der nächste Schritt zur Lösung
Was kann ich bis jetzt?
OLED startet bei Aktivierung des Reed Kontakts und zählt hoch. Wenn ich den Magneten weg nehme wird die vergangene Zeit angezeigt.
Mehr bekomme ich nicht hin. Der Code ist aus verschiedenen Beispielen und Versuchen zusammengewürfelt und vermutlich furchtbar. Der Schaltplan sieht so aus:
Der Code so:
// Arduino OLED ShotTimer
#include <U8g2lib.h> // u8g2
#include <Wire.h> // u8g2
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// SCL A5
// SDA A4
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0,U8X8_PIN_NONE,16,17); //u8g2 OLED Construktor
void setup() {
//pinMode(6,INPUT_PULLUP); //Taster, später Reed Kontakt
pinMode(5,INPUT_PULLUP); //Taster, später Reed Kontakt
u8g2.begin();
}
int poz=1;
int broj=1;
int kretanjeY=30;
int sec1=0; //Sekunde
int min1=0; //Minute
unsigned long msec=0;
unsigned long mili=0;
int pres=0;
int fase=0;
int start=0;
unsigned long tim=0;
void loop()
{
u8g2.clearBuffer();
if(digitalRead(5)==LOW)// Timer gestartet
{
{
if(start==0)
{
start=1;
tim=millis();
}
msec=(millis()-tim);
min1=msec/60000;
if((msec/1000)>59)
{
sec1=(msec/1000)-(min1*60);
}else{
sec1=msec/1000;
}
//mili=(msec%1000)/10;
//u8g2.setFont(u8g2_font_logisoso62_tn);
u8g2.setCursor(25,62); //Sekundenplatzierung
if(min1<=9)
{
}else {u8g2.print(min1);
//u8g2.sendBuffer();
}
if(sec1<=9)
{
u8g2.print("0");//führende 0
u8g2.print(sec1);
u8g2.sendBuffer();
}else {u8g2.print(sec1);
u8g2.sendBuffer();
}
if(mili<=9)
{
}else {
}
}
//if(fase==2)
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_logisoso62_tn);
u8g2.setCursor(25,62); //Sekundenplatzierung
if(sec1<=9)
{
u8g2.print("0");
u8g2.print(sec1);
u8g2.sendBuffer();
}else {u8g2.print(sec1);
//u8g2.sendBuffer();
}
}
//u8g2.clearBuffer();
//if(digitalRead(5)==HIGH)// Reed ohne Magnet
//void(* resetFunc) (void) = 0; // declare reset fuction at address 0
}
}
Ich bin für alles zu haben, Feedbach, hilfe, fertige Lösungen.
Danke und Grüße
Ralf
Hallo,
In deiner akruellen Schaltung kann man nicht erkennen, wie du den Taster angeschlossen hast. Das sieht mehr nach einem Kurzschluss aus.
Und wozu der Widerstand, wenn du doch einen Pullup im Sketch verwendest ?
Manchmal werden Gedanken wahr.
Aber manchmal sieht das nur so aus....
z.B. ich habe noch nie eine Entprellung gesehen, welche auf einem einsamen Widerstand basiert. Gaube auch nicht, dass dieses jemals geschieht.
Aber vielleicht ist meine Fantasie auch zu begrenzt.
Hallo zusammen,
nein, kein Reset. Auch das Schaltungsprogramm nutze ich zum ersten mal, sorry.
Ich habe die beiden alten Themen gelesen, konnte dafür für mich aber leider nichts ableiten.
Ich hatte im Code einen Versuch mit einem Reset des Codes gemacht, weil ich keine Ahnung habe warum der nicht mit dem Zählen aufhört...#
Überraschung... hat nicht funktioniert.
Jetzt habe ich soviel in dem Code rumgefuscht, dass ich den Überblick verloren habe.
Hallo,
Eventuell hilft dir ein logischer Ablaufplan
du solltest feststellen wenn der Kontakt gerade geschlossen wird und wenn er gerade geöffnet wird, also eine Flankenerkennung machen.
ist gerade geschlossen worden ( positive Flanke) Kontakt==HIGH && merker ==LOW
Startzeit setzen (startzeit=millis();
merker =HIGH
ist geschlossen
Anzeige aktuelle Differenz
Differenz = millis()-Startzeit
ist gerade geöffnet worden (negative Flanke) Konatkt==LOW && Merker==HIGH
Merker =LOW
Differenz bilden millis()-startzeit
Ergebnis Differenz anzeigen
delay (5000) (im einfachsen Fall )
Display dunkel schalten
Wenn Du einen Widerstand als externen Pullupwiderstand nehmen willst dann mußt Du ihn zwischen +5V und dem Pin das zum digitalen Eingang geht (also am anderen Pin des Tasters).