Dringende Hilfe beim erst Projekt gesucht!

Moin Moin,

Ich habe mir in den Kopf gesetzt mich endlich mit dem Arduino auseinanderzusetzen und bin aber vor mehrere Wände gestoßen. Mein kleiner Exkurs in die Elektrotechnik in der sechsten Klasse hat mein Latein schnell erschöpft aber ich versuche es trotzdem. Die Idee meines Projektes ist es einen Countdown von 4 Minuten zu erstellen für meinen Kaffee.

Nachdem ich mich mehrere Stunden eingelesen habe und herumgewerkelt habe, hab ich mir eine Basis für mein Projekt herausgesucht. Von Frohnix Bastelbude auf YouTube hab ich mir seinen Timer als Basis genommen und meine Modifikationen angebracht. Nun habe ich noch nie in C++ programmiert aber ich hab denke ich einen ganz akzeptablen Versuch gemacht.

Außerdem habe ich von einem Blog mir die Codebasis für einen Alarm herausgesucht und intigriert.

Ich hab zwar mein bestes getan aber ich befürchte fast, dass meine magerer Eigenanteil nicht funktioniert und hoffe auf einen erfahrenen Nutzer der einmal darüber schauen kann und Verbesserungsvorschläge bringen kann.

Vielen Dank schon einmal im Voraus,
Eure Streichwurst

SimpleTimer_copy_1_0 (1).zip (12.6 KB)

(deleted)

Wäre schön wenn Du schreibst was evtl nicht funktioniert, oder wo Du genau Hilfe suchst.

Was mir gerade beim Durchsehen deines Sketches aufgefallen ist:
Bei Deiner Klammersetzung passt etwas nicht: die void playAlarm befindet sich innerhalb der loop.

Tip: in der IDE mal Strg+T drücken, damit der Sketch richtig formatiert wird, und dann hier einstellen, wie es Peter schon schrieb.

Hallo,

den Sketch hier als zip-Datei reinsetzen ist die schlechteste Lösung.
Nicht jeder der helfen möchte, öffnet eine zip-Datei.

Setze den Sketch bitte in Code-Tags.
Dazu in der IDE Bearbeiten und "für Forum kopieren" klicken, danach hier einfügen.

Schon wird dieser für alle besser lesbar, auch für mobile Geräte.
Das kannst du auch noch nachträglich machen.

HotSystems:
Das kannst du auch noch nachträglich machen.

Oder jemand könnte es ausnahmsweise für dich tun.

Das ist die ino im zip:

#include "TM1637Display.h"
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);
int speaker = 11;                               //Hier bin ich mir nicht so sicher ob das funktioniert, laut dem Blog soll hier der Digitale Pin belegt werden
int sekunden = 0;
int minuten = 0;
int stunden = 0;
int anzeige = 0;
unsigned long timer = 0;
int helligkeit = 0;
int millistep = 1000;
int korrektur = 0;
bool flipFlop = false;


void setup() {
  // ********************** EINSTELLUNGEN *****************
  // Display Helligkeit 0 bis 7 (dunkel bis hell) hell = höchster Stromverbrauch !!!!
  helligkeit = 5;

  // +/- Sekunden pro Stunde Korrektur. Positive werte machen die Uhr schneller und umgekehrt. Keine Kommazahlen erlaubt
  korrektur = 0;
  // ******************************************************

  display.setBrightness(helligkeit);
  timer = millis() + millistep;

  sekunden = 1;                            //Die Idee ist mit einer Sekunde zu starten damit ich nicht in's negative komme
  minuten = 4;                             //
  pinMode(speaker, OUTPUT);                //!!!!!!!!!!!
}

void loop() {
  if (timer < millis()) {
    if (flipFlop == false) {
      timer = millis() + millistep;
      flipFlop = true;
    } else {
      timer = millis() + millistep - korrektur;
      flipFlop = false;
    }
    sekunden = sekunden - 1;                 //Hier ist der Countdown, er zählt von runter und
    if (sekunden <= 0) {                     //wenn die sekunden auf 0 sind schlägt er auf 59 
      { if (minuten != 0)                    //Sekunden um und zieht eine Minute ab
          sekunden = 59;                     //Wenn die Minuten 0 erreichen spielt er einen Alarm.
        minuten--;                         //!!!!!!!!!!
      }    else {                            //!!!!!!!!!!!
        playAlarm();                     //!!!!!!!!!!!

      }
      display.showNumberDecEx(anzeige, 0b01000000, true, 4, 0);
    }

    void playAlarm() {
      tone(speaker, 2000, 400);
      delay(500);
      tone(speaker, 2000, 400);
      delay(500);
      tone(speaker, 2000, 400);
      delay(500);
      tone(speaker, 2000, 400);
      delay(500);
    }

  }

Hallo,

hast Du den Sketch schon mal probiert, ich denke der läuft so nicht. Wenn Du wirklich was lernen willst dann fang eine Nummer kleiner an und arbeite die Beispiele aus der IDE systematisch durch. Wenn Du dann das Wesentliche verstanden hast wird es dir nicht schwer fallen was eigenes zu bauen.

Vorschlag denk auch mal darüber nach wie Du die Zeit verändern kannst.

Wenn Du nichts lernen willst dann kauf Dir eine Eieruhr oder mach´s mit dem Handy. ich hab mir mal kurz das Video angesehen, hab abe nicht begriffen warum er 3 Nanos verbaut. Na ja egal.

Heinz

Whandall:
Oder jemand könnte es ausnahmsweise für dich tun.
.....

OK, danke dir dafür.

Hallo,

Ich bin ganz überwältigt über die vielen Antworten und möchte gerne ein paar Fragen beantworten.
Mein Problem ist eigentlich im Kern, dass ich von meiner Position aus denke dass das Projekt so klappt aber ich mir natürlich auch nicht vormache das ich wirklich es so schnell hinbiege.
Whandall hat lieber weise den Code gepostet, tut mir leid, erster Post und so :o.
Ich habe auch die void playAlarm jetzt aus dem Loop getan, danke Moko!.
Aber konkrete Fragen habe ich ob dass in Zeile 5 so funktioniert, mit der Zuweisung des Pins und ob mein Countdown Loop sich auch so herunterzählt wie ich mir das Vorstelle.

Tut mir leid für die ganzen Schönheitsfehler, ist mein erstes Rodeo^^
Eure Streichwurst

streichwurst:
Aber konkrete Fragen habe ich ob dass in Zeile 5 so funktioniert, mit der Zuweisung des Pins und ob mein Countdown Loop sich auch so herunterzählt wie ich mir das Vorstelle.

Zeile 5 ist insoweit verbesserungswürdig, als das der PIN sich nicht ändert und somit ein const noch dazu passt.

Während Du in Zeile 6 und 7 mit 0 initialisierst, ziehst Du im setup auf 1 in Zeile 29 mit einer nicht stichhaltigen Begründung (ebenso dann in Z 30)

Der Logikfehler sitzt ab Zeile 44.
Derzeit würde der Timer jede Sekunde 0 nicht anzeigen, weil übersprungen.
So der Code und auch Dein Kommentar dazu.

Las doch sekunden negativ werden.
Wenn sekunden < 0 UND minuten >0 dann sekunden = 59 UND minuten--

Dann kann Zeile 29 komplett raus und den Eintrag aus Zeile 30 schiebst in Zeile 7

Und schau mal in diesen Thread: millis() - Deutsch - Arduino Forum
Dort ist mehrmals aufgeführt, wie das mit der Genauigkeit besser funktioniert. ab #9
Wäre dann bei Dir Zeile 37 und 40