Hallo zusammen, bin momentan dabei mir meine eigene Kaffeemaschine zu bauen, bin mit dem Code schon sehr weit, jedoch fehlt mir eine Grundlegende Funktion, undzwar das zeitgesteuerte starten des Brühvorgangs. Dies möchte ich gerne über ein Poti regeln, sprich Stunde und Minute im 24H-System verstellen. Da ich leider noch nicht so viel Erfahrung im programmieren habe und im Internet nix vergleichbares gefunden haben frage ich nun hier. Ich würde es mit Map Befehlen machen und dadurch das ganze von 0-1023 mehrmals unterteilen aber gibts da nix kürzeres, einfacheres und besseres? Will das man die Minuten in den Stunden einstellt, also von z.b. 0-100 H00 M0-59 und in diesem bereich dann aber zusätzlich die Minuten, und dann von 100-200 H01 M00-59 (Werte nur um auszudrücken was ich meine) Hoffe ich konnte mein Problem halbwegs verständlich ausdrücken. Gruß Chris
:
Verschoben durch User
Chris schrieb: > Werte nur um auszudrücken was ich meine Irgendwie verstehe ich nicht was du meinst. Ein Poti von 0 bis 270 Grad drehen gibt Werte von 0 bis 1023 und daraus kann man 24 Stunden machen, von 0 bis 42 die erste, von 43 bis 84 die zweite, u.s.w. Für einzelne Minuten reicht es also nicht, aber 5-Minuten Raster sollte ja auch ausreichen. Von 0 bis 4 also 0:00 , 5 bis 8 0:05 , von 9 bis 13 0:10 u.s.w. Kommt die interne Ugr dann bei der eingestellten Uhrzeit an, startet der Brühvorgang.
Nimm einen Encoder, der ist ohne Anschlag. Zudem kannst du gemütlich die Incr und Decr einstellen sowie ggf. mit der Drehgeschwindigkeit multipliziert.
So jetzt mit richtigen acc. ja 5min Raster reicht auch vollkommen aus. Ich meine das wenn ich jetzt das Poti exakt zur Hälfte gedreht hab das dann 12:00 rauskommen und wenn ich es dann ein gaaaanz kleines Stück weiter dreh 12:05 z.b. kommt. Und aus irgendeinem Grund fällt mir dazu keine Möglichkeit ein das zu programmieren. Ich müsste ja im Grunde den Bereich 1023 in 24H zerlegen, und dann jede einzelne Stunde nochmal durch 12 damit ich in mein 5min Raster komme. Nur wie programmiere ich das, die 24H mit Map Befehl gehn noch nur wie geht's weiter? Ich muss doch dann erst die vollen H zählen, und den verbleibenden Rest als min oder wie würdet ihr das machen ? Gruß Chris
Es gibt eine Standard-Funktion die beim Teilen sowohl Ergebnis als auch Rest liefert.
1 | div_t div (int numerator, int denominator) |
€dit: Je nachdem wie "teuer" Divisionen auf deinem System sind kannst du auch deine Zielzeit zwischenspeichern und nur bei einer Änderung am Poti neu teilen.
:
Bearbeitet durch User
Chris schrieb: > das zeitgesteuerte starten. Dies möchte ich gerne über ein Poti regeln, Machs wie alle: Nimm, wie bereits vorgeschlagen, einen Drehencder. Dafür gibts auch massenhaft Codebeispiele im Netz sowie hier im Tutorial. Ein Poti ist für diesen Zweck einfach zu ungenau.
Im Moment versuchst Du mit Stunden und Minuten zu rechnen. Wenn Du die Zeit mit einem Potentiometer Minutengenau einstellen möchtest, dann musst Du auch in dieser Genauigkeit rechnen, also nur mit Minuten anstatt mit Stunden. Tein Tag hat 24 Stunden, also 24*60 = 1440 Minuten. Wenn das Potentiometer auf 341 eingestellt ist, rechnest Du die Uhrzeit so aus: 341 * ( 1440 Minuten / 1023 ) = 480 Minuten 480 Minuten / 60 = 8 Stunden, die dann für 08:00 Uhr stehen
...ok, man könnte auch durch die 1024 Schritte teilen, in die sich das Potentiometer einteilen lässt (0 bis 1024) ;-)
Ja Genauigkeit bzw. Raster is wurscht Hauptsache ned größer als 5min. Ja so hab ich auch schon überlegt aber wie mach ich das der Wert der Stunde um eins erhöht wird wenn mehr als 59 min sind, nicht das mir dann angezeigt wird 12.71. Mit encoder wäre auch eine Idee allerdings hab ich die Potis hier und wöllte es erstmal gerne damit probieren
Christoph S. schrieb: > Ja so hab ich auch schon überlegt aber wie mach ich das der Wert der > Stunde um eins erhöht wird wenn mehr als 59 min sind, nicht das mir dann > angezeigt wird 12.71. Ganz einfach: Vergiss' die Stunden, rechne in Minuten, und bilde die Stunden erst zum Schluss. Ein Tag hat 1440 Minuten, wenn Du mit fünf Minuten Auflösung zurechtkommst, sind das also 288 Schritte. Dein ADC liefert einen Wert zwischen 0 und 1023; wenn Du nicht den vollen Wertebereich ausnutzt, kannst Du z.B. einen Wert von 0 bis 863 leicht auf die 288 Schritte abbilden (durch 3 teilen). Und aus diesem Minutenwert kannst Du nun sehr einfach den zugehörigen Stundenwert bestimmen. Nehmen wir mal an, Dein bestimmter Schrittwert liegt bei 123. Eine Stunde hat zwölfmal 5 Minuten, also sind das 10.25 Stunden - 10 Stunden 15 Minuten.
Christoph S. schrieb: > ... aber wie mach ich das der Wert der Stunde um eins erhöht wird > wenn mehr als 59 min sind, nicht das mir dann angezeigt wird 12.71 Wäre das so schlimm? 0.71 Stunden * 60 Minuten/Stunde = 43 Minuten
Beitrag #5361892 wurde von einem Moderator gelöscht.
Rufus Τ. F. schrieb: > Ein Tag hat 1440 Minuten, wenn Du mit fünf Minuten > Auflösung zurechtkommst, sind das also 288 Schritte. Naja, dann würde ich - auch wenn ich jetzt wieder Schläge bekommen - mit sechs-Minuten-Schritten (Zehntelstunden) rechnen; das sind dann zufälligerweise gerade 240 Zehntelstunden je Tag.
Possetitjel schrieb: > Naja, dann würde ich - auch wenn ich jetzt wieder Schläge > bekommen - mit sechs-Minuten-Schritten (Zehntelstunden) > rechnen; das sind dann zufälligerweise gerade 240 > Zehntelstunden je Tag. Dann doch gleich 1/20 Stunden. Immerhin käme man damit auf eine Auflösung von 1/480 Tag.
Christoph S. schrieb: > Und aus irgendeinem Grund fällt mir dazu keine Möglichkeit ein das zu > programmieren. I Versuche es mit einer Division.
ich hab in der Schule aufgepasst schrieb im Beitrag #5361892: > Christoph S. schrieb: >> aber wie mach ich das der Wert der Stunde >> um eins erhöht wird wenn mehr als 59 min sind, nicht das mir dann >> angezeigt wird 12.71. > Dann musst Du halt wie in der Schule gelernt rechnen - oder hast Du die > Schule noch nicht abgeschlossen? > >> die Potis hier und wöllte es erstmal gerne damit probieren > Im Deutschunterricht auch Fensterplatz gehabt, ja? > (ich wöllte glaub auch dass Deutsch meine Muttersprache wörde...) Hach diese Leute die nicht lesen können sind mir die liebsten und anscheind gehörst du diesen an, sonst hättest du gelesen das ich nicht weiß wie man es im programm umsetzt. Sry du Model wenn man auf dem Smartphone schnell schreibt dann passiert sowas halt mal. Und dann kommen halt ab und zu so leute wie Du welche mit ihrem Leben anscheinend so unzufrieden sind, dass sie sich durch das grundlose rummeckern ablenken müsssen, aber hey, mach ich gerne für Dich :) So jetzt zurück zum Thema: @mawin meinst du das "div_t div (int numerator, int denominator)"? klar man könnte jetzt 25 mal map machen und dann wäre es geregelt aber wird doch dann sau lang
Wenn Du 12,71 Uhr ausgerechnet hast, dann runde die Zahl auf eine ganze Zahl ab, also auf 12. Dann rechnest Du 12,71 - 12 = 0,71 Zum Schluss noch die 0,71 * 60 = 43 Minuten Alternativ könntest Du von der 12,71 in einer Schleife auch solange 1,0 abziehen, bis die Zahl kleiner 1,0 ist, ungefähr so (in Pseudocode): while zahl > 1,0: zahl = zahl - 1,0 end while
Ja genau das hab ich schon versucht nur wie runde ich beim Arduino ab, das ist das problem für mich.
soooo guy, habs geschafft. const int Drehregler =1; float Stunde=00.00; float Stunde2=00.0; float Minute=00; float Drehreglerwert=0; void setup() { pinMode(Drehregler, INPUT); Serial.begin(38400);// put your setup code here, to run once: } void loop() { { }// put your main code here, to run repeatedly: Drehreglerwert=analogRead(Drehregler); Drehreglerwert=map(Drehreglerwert, 0,1023,0,1440); Stunde=Drehreglerwert/60; Stunde2=map(Drehreglerwert, 0,1440,0,24); Minute=((Stunde-Stunde2)*60); Serial.print("Stunde2: "); Serial.print(Stunde2); Serial.print(" Stunde1: "); Serial.print(Stunde); Serial.print(" Minute: "); Serial.print(Minute); Serial.println(); } Angezeigt wird am ende nur die Stunde2 also der gerundete Wert, Stunde1 war zu ums zu kontrollieren ob es klappt, werde aber doch bei Gelegenheit auf encorder umstellen aber wieder was gelernt. Besten Dank
Christoph S. schrieb: > Hach diese Leute die nicht lesen können sind mir die liebsten und > anscheind gehörst du diesen an, sonst hättest du gelesen das ich nicht > weiß wie man es im programm umsetzt. > > Sry du Model wenn man auf dem Smartphone schnell schreibt dann passiert > sowas halt mal. Und dann kommen halt ab und zu so leute wie Du Das sind genau der richtige Tonfall und Schreibstil, wenn man Hilfe erwartet. Zum Thema "Poti an µC" könnte ich beitragen, aber so nicht!
Das würde ganz hübsch funktionieren, wenn Potentiometer sich ruckelfrei genau einstellen ließen... - Im wahren Leben hüpft der Einstellwert immer über den Wunschwert hinaus! Egal, ob beim Hoch-, oder wieder beim Runterdrehen. Eine echte Frustquelle! Drehencoder? Mit Billigprodukten und mieser SW-Bibliothek ist die Fummelei fast so übel, wie beim Poti... Es geht aber auch fix und feinfühlig mit der Lösung für die Zeit-/Weckzeit-Einstellung (uralter guter!) Digital-Wecker: Eine Tast-Wippe (ON-0-ON-Taster) liefert die Richtung. Je länger man drückt, desto schneller wird die Zeit hoch-, oder runtergezählt. Zum Abschluss tippt man sich an die genaue Minute. Aufwand: ADC-Eingang, ON-0-ON-Taster, 2 Widerstände und (!) einige schlaue Zeilen Software... (+)--+--------+ | | | | | R1 | | | up o | ---o-----+--------- ADC-In dn o | | | | R2 | | | | | (0)--+--------+ (R1 = R2) Da braucht man auch nicht Runden: ADC-Wert < 256 = Down ADC-Wert > 768 = Up ADC dazwischen = Nix zu tun Digital geht es auch (ohne Widerstände): 2 Eingänge mit internen PullUps, ON-0-ON-Taster und einige schlaue Zeilen Software... (In-1)--+ | | | up o ---o-----| Masse dn o | | | (In-2)--+ In-1 = In-2: Nix zu tun In-1 = 0: Up In-2 = 0: Down
@Manfred, ist immer Aktion, Reaktion ? Ich Habs gestern mal ausprobiert und das klappt eigentlich relativ gut, klar is ned optimal aber momentan reicht es
MaWin schrieb: > Ein Poti von 0 bis 270 Grad drehen gibt Werte von 0 bis 1023 Bitte nicht immer solche pauschalen, falschen, nicht zu Ende gedachten Antworten geben. In der Fragestellung des TE ( 1. Post ) war keine Angabe zum abtastenden System. Ein Poti von Null bis 270 Grad drehen gibt bei mir zuhause immernoch UNENDLICH viele Werte. ------ mfG
Test schrieb: > Ein Poti von Null bis 270 Grad drehen gibt bei mir zuhause immernoch > UNENDLICH viele Werte. Falsch.
nö. nix falsch. Is genau so wie ich es sagte, .. Ein Poti ( analog ) gibt immernoch einen analogen Wert aus. Da kann auch der werte Herr --------------------------------------------- Autor: Harald Wilhelms (wilhelms) Datum: 24.03.2018 02:56 Test schrieb: > Ein Poti von Null bis 270 Grad drehen gibt bei mir zuhause immernoch > UNENDLICH viele Werte. Falsch. ---------------------------------------------- nichts dran ändern.
Test schrieb: > Bitte nicht immer solche pauschalen, falschen, nicht zu Ende gedachten > Antworten geben. > In der Fragestellung des TE ( 1. Post ) war keine Angabe zum abtastenden > System. > > Ein Poti von Null bis 270 Grad drehen gibt bei mir zuhause immernoch > UNENDLICH viele Werte. Bitte nicht im alkoholvernebelten Kopf so einen Stuss schreiben, natürlich war das abtastende System bekannt: " 0-1023 "
Warum einfach, wenn es kompliziert (mit float) geht. In diesem Fall muss man gar nicht exakt auf 1440 Minuten kommen, d.h. man multipliziert den ADC mit 1,5 und kommt auf maximal 1023x1,5=1534. m = adc + adc/2; // genauer: m=adc+adc/2-adc/16-adc/32; std = m / 60; min = m % 60; // modulo-Funktion alternativ: min = m - std * 60; Ganz ohne Float und kompliziert.
Test schrieb: > nö. nix falsch. > > Is genau so wie ich es sagte, .. > > Ein Poti ( analog ) gibt immernoch einen analogen Wert aus. Ja nur am analogen Eingang wird das ganze vom arduino von 0(0V) bist 1023(5V) eingeteilt soweit ich die Theorie verstanden hab. Zyxw danke werde deins mal ausprobieren
Chris schrieb: > Hallo zusammen, > > bin momentan dabei mir meine eigene Kaffeemaschine zu bauen, bin mit dem > Code schon sehr weit, jedoch fehlt mir eine Grundlegende Funktion, > undzwar das zeitgesteuerte starten des Brühvorgangs. Dies möchte ich > gerne über ein Poti regeln, sprich Stunde und Minute im 24H-System ... Wenn deine Idee genial wäre, hätte mein Wecker bestimmt auch ein Poti? So ein Problem könnte man mit einem Taster lösen.
Test schrieb: > Ein Poti ( analog ) gibt immernoch einen analogen Wert aus. > Falsch. > ---------------------------------------------- > > nichts dran ändern. Bei einem Kohlepoti springt der Schleifer immer von einem Kohlekörnchen zum nächsten. Die Auflösung mag hoch sein, ist aber nicht unendlich. Für höhere Auflösung verwendet man Cermet-Potis. Abgesehen davon gehört schon etwas Übung dazu, Potis auf Bruchteile von Grad genau einzustellen.
Thomas K. schrieb: > So ein Problem könnte man mit einem Taster lösen. Meine Meinung, war so einfach das ich mir den Kommentar verkniffen habe. Entweder richtig toll mit Encoder, gut programmiertes mechanisch 360° Poti oder halt einen Taster.. die ersten 10 Sekunden 1Minute pro Halbe Sekunde und dann 10 Minuten die Sekunde in 1er Schritten und wieder von vorn.
:
Bearbeitet durch User
Harald W. schrieb: > Test schrieb: >...Abgesehen davon gehört schon etwas Übung > dazu, Potis auf Bruchteile von Grad genau einzustellen. Oder man nehme ein 10- Gang Poti?
Thomas K. schrieb: > Oder man nehme ein 10- Gang Poti? Davon hat der TE aber nichts gesagt (was nicht unbedingt etwas heissen muss). Ausserdem ist ein gutes Zehngangpoti deutlich teurer als ein guter Drehencoder. Der µC, den man zur Aus- wertung braucht, ist ja wohl sowieso vorhanden.
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.