An-Schalter mit Zeit-Start

Hallo,

Ich möchte, dass ich, wenn der Arduino schon mit Strom versorgt ist einen Schalter haben, mit dem ich das Programm starte und dann erst die Zeit läuft. Wie stelle ich das an?

Hi

Blockiere setup() so lange, bis der Taster gedrückt wird ... könnte eine zwar dieses Problem erschlagende, aber wenig hilfreiche Antwort sein.

WAS hast Du wirklich vor?

MfG

Wie blockiere ich denn setup()?

Das geht auch in der loop().
Nimm eine if-Abfrage, in der du den Taster abfragst.
Erst wenn der Taster gedrückt wird, startest du deine Funktion.
Beispiele dazu sind in der IDE.

Wie konkret geht das?

Was ist eine IDE?

nutzi:
Wie blockiere ich denn setup()?

In dem Du dort erst weiter machst, wenn der Tastendruck erkannt wird.

Wie Du einen PIN ausliest:

DATEI - BEISPIELE - DIGITAL - BUTTON

Wie Du auf den PIN wartest:

DATEI - BEISPIELE - CONTROL - WhileStatementConditional

Wie blockiere ich denn setup()?

unsigned long startZeit;
void setup() {
   pinMode(buttonPin, INPUT_PULLUP);
   while (digitalRead(buttonPin,LOW)) {} // warte bis Taster gedrückt
   delay(5); // entprellt
   while (digitalRead(buttonPin, HIGH)) {} // und wieder losgelassen wurde
 
    Serial.begin(9600);
    Serial.println("Jetzt ist setup() fertig");
    startZeit = millis();
}
void loop() {
   unsigned long dauer = millis() - startzeit;  
   if (dauer %1000 == 0) {
       Serial.print(dauer/1000); Serial.println(" sec seit Start");
       delay(1); // damit in derselben Millisekunde loop nicht nochmal zuschlägt (Demotrick)
}

loop ist nur eine Demo

Was ist eine IDE?

integrierte Entwicklungsumgebung (IDE)
Sie SW die Du von Arduino.cc heruntergeladen hast um den Arduino zu programmieren.
Grüße Uwe

nutzi:
Hallo,

Ich möchte, dass ich, wenn der Arduino schon mit Strom versorgt ist einen Schalter haben, mit dem ich das Programm starte und dann erst die Zeit läuft. Wie stelle ich das an?

Erstmal schaffst du dir ein schönes, dickes und modernes C++ Buch an.
Dort findest du die Sprachgrundlagen.
Sozusagen die Anleitung, Mittel und Grenzen, dich auszudrücken.

Desweiteren:

Ablaufsteuerung
Meine Standardantwort zu Ablaufsteuerungen:

Eine Stichworte Sammlung für Google Suchen:
Endlicher Automat,
ProtoThreads,
State Machine,
Multitasking,
Coroutinen,
Ablaufsteuerung,
Schrittkette,
BlinkWithoutDelay,

Automat (Informatik)
Blink Without Delay
Die Nachtwächter Erklärung

MicroBahner/MobaTools
Intervall Macro
Multitasking Macros
INTERVAL Ersatzstoff
CooperativeTask

nutzi:
Wie konkret geht das?

Was ist eine IDE?

Einfach mal die Beispiele durchlesen und lernen, dann klappt das schon.

Du hast eine IDE auf deinem PC und weist nicht was das ist ?
Spielst du dir immer Software auf den PC, ohne zu wissen, was das ist ?

IDE heißt auf Deutsch "Integrated Development Environment" und ist ein hochtrabender aber üblicher Begriff für die Arduino-Programmier-Software, die du dir auf deinem PC installierst.

Wird auch hier so genannt.

nutzi:
Wie konkret geht das?

Dritter Abschnitt.

Gruß

Gregor

gregorss:
Dritter Abschnitt.

Gruß

Gregor

Danke. Aber ich habe viel mit dem Millisbefehl gearbeitet, daher muss ich erreichen, dass die Zeit auch erst mit dem Drücken des Schalters läuft, da ich nicht den ganzen Scetch umschreiben will.

Aber ich habe viel mit dem Millisbefehl gearbeitet, daher muss ich erreichen, dass die Zeit auch erst mit dem Drücken des Schalters läuft, da ich nicht den ganzen Scetch umschreiben will.

Wenn du den fehlerhaften Sketch nicht umschreiben willst, wirf ihn weg und schreibe einen neuen.

Oder schreib eine Funktion millis_verzoegert() und geh mit SuchenUndErsetzen durch deinen Sketch.

nutzi:
Danke. Aber ich habe viel mit dem Millisbefehl gearbeitet, daher muss ich erreichen, dass die Zeit auch erst mit dem Drücken des Schalters läuft, da ich nicht den ganzen Scetch umschreiben will.

Wenn du alle unsere Tipps in den Wind schlägst, wird es schwer dir zu helfen.
Im übrigen gibt es keinen "Millisbefehl". millis() ist eine Funktion, die von deiner Entwicklungsumgebung bereit gestellt wird.

Zeige uns einfach deinen Sketch, damit wir nicht weiterhin im Trüben fischen müssen.
Den Sketch bitte in Code-Tags setzen.

Wenn du alle unsere Tipps in den Wind schlägst, wird es schwer dir zu helfen.

Hmmm...

Witziger weise....
... Kann man auch Leute in ihrem Irrtum bestärken. ...

z.B. dieses wäre Irrweg Nummer Eins:
(für den es überhaupt keinen vernünftigen Grund gibt)

unsigned long korrigierteMillis()
{
  static unsigned long korrekturWert = 0;
  if(!korrekturWert)korrekturWert = millis();
  return millis() - korrekturWert;
}


void setup() 
{
  Serial.begin(9600);
  Serial.println("start");
  delay(4771); // irgenwas lang laufendes
}

void loop() 
{
  Serial.println(korrigierteMillis());
  delay(1000);
}

Und hier Irrweg Nummer 2:

#include <util/atomic.h>
#define AtomicSection  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)

void setup() 
{
  Serial.begin(9600);
  Serial.println("start");
  delay(4771); // irgenwas lang laufendes
  extern volatile unsigned long timer0_millis;
  AtomicSection timer0_millis = 0;
}

void loop() 
{
  Serial.println(millis());
  delay(1000);
}

nutzi:
Danke. Aber ich habe viel mit dem Millisbefehl gearbeitet, daher muss ich erreichen, dass die Zeit auch erst mit dem Drücken des Schalters läuft, da ich nicht den ganzen Scetch umschreiben will.

Von welchem Sketch sprichst Du? Soweit ich mich erinnere, hast Du hier noch keine einzige Zeile Deines Codes gezeigt.

Gruß

Gregor

Beitrag 11 hat mir sehr geholfen. Vielen Dank.

Das Zeitproblem habe ich auch gelöst.

gregorss:
Von welchem Sketch sprichst Du? Soweit ich mich erinnere, hast Du hier noch keine einzige Zeile Deines Codes gezeigt.

Von meinem Scetch. Die Frage war allgemein gemeint, daher war es nicht nötig, meinen Scetch zu posten.

nutzi:
Von meinem Scetch. Die Frage war allgemein gemeint, daher war es nicht nötig, meinen Scetch zu posten.

Du irrst.
Ohne Sketch ist eine gute Hilfe immer schwierig.

Es ist allerdings üblich, den fertigen Sketch, fehlerfrei hier zu posten, damit alle Helfer und anderen auch geholfen wird.
Das ist der Sinn des Forums.

Ansonsten könnte man dern User ankreiden, dass er nur schmarotzen will und ihn in Zukunft ignorieren.

Gruß Tommy