INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Einen hochzählenden Wert auf null setzen - wie macht man das?
15.05.2015, 09:42 (Dieser Beitrag wurde zuletzt bearbeitet: 15.05.2015 09:42 von Gelegenheitsbastler.)
Beitrag #1
Einen hochzählenden Wert auf null setzen - wie macht man das?
Im nachfolgenden Sketch möchte, wenn die Anzahl der seit Start verstrichenen Sekunden 4 überschreitet, den Zähler wieder auf null setzen, so dass erneut hoch gezählt wird.

Wie macht man das?

Code:
unsigned long time;
int sekunden;

void setup(){
  Serial.begin(9600);
  pinMode (13,OUTPUT);
  digitalWrite (13,LOW);

}
void loop(){
  Serial.print("Time: ");
  time = millis();
  sekunden = (time/1000);
  Serial.println(sekunden);
  delay(1000);
  if (sekunden > 3)
  {
  digitalWrite(13, HIGH);
}

if (sekunden > 4)
{
HIER SOLL DIE BEDINGUNG STEHEN
}

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2015, 09:48
Beitrag #2
RE: Einen hochzählenden Wert auf null setzen - wie macht man das?
Hi,
welches ist der Zähler?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2015, 10:08 (Dieser Beitrag wurde zuletzt bearbeitet: 15.05.2015 10:08 von Gelegenheitsbastler.)
Beitrag #3
RE: Einen hochzählenden Wert auf null setzen - wie macht man das?
Du meinst welcher Wert auf null gesetzt werden soll? Das kann sowohl millis als auch sekunden sein. Ich habe schon verschiedene Sachen probiert, leider ohne Erfolg.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2015, 10:13
Beitrag #4
RE: Einen hochzählenden Wert auf null setzen - wie macht man das?
Hi,
wahrscheinlich kann man die millis() schon irgendwie auf Null setzen, aber das sollte man nicht machen. Vielleicht solltest Du mal sagen, was Du eigentlich machen willst. Ansonsten ungefähr so:
Code:
unsigned long startTime = 0;
unsigned long time;
int sekunden;

void setup(){
   Serial.begin(9600);
   pinMode (13,OUTPUT);
   digitalWrite (13,LOW);
}

void loop(){
   Serial.print("Time: ");
   time = millis();
   sekunden = (time - startTime) / 1000;
   Serial.println(sekunden);
   delay(1000);
   if (sekunden > 3)
   {
   digitalWrite(13, HIGH);
   }

   if (sekunden > 4)
{
     startTime = time;
}

}

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2015, 11:24 (Dieser Beitrag wurde zuletzt bearbeitet: 15.05.2015 11:39 von Gelegenheitsbastler.)
Beitrag #5
RE: Einen hochzählenden Wert auf null setzen - wie macht man das?
Perfekt. Das funktioniert. Dieser Sketch war nur zum Testen, ob das auch so funktioniert, wie ich es mir vorstelle. Die Division der millis mache ich nur, damit ich beim Rechnen nicht mit so vielen Nullen jounglieren muss.

Hintergrund ist immer noch dieses Problem:

http://www.arduinoforum.de/arduino-Threa...D-geht-das

Seit heute früh habe ich an den ATtiny einen UNO mit LCD angeschlossen, auf dem fortlaufend der Wert des Fotowiderstandes angezeigt wird. Aber das zeigt mir nur, dass die bisherigen Erkenntnisse richtig sind und das Problem durch einfache Änderungen am Sketch nicht lösbar sind. Wenn die Sonne rein scheint, zeigt der Sensor fast den selben Wert an wie in dem Moment wenn das Licht angeht.

Also muss ich doch auf irgend eine Art die Zeit berücksichtigen. Da ich es mit softwareRTC nicht hin bekommen habe und eine Hardware RTC völlig oversized wäre, werde ich wohl einfach die Sekunden zählen.

Die zähle ich 24 Stunden lang hoch, setzte sie auf null und definiere per if-Befehl, zu welchem Zeitpunkt keine Aktion stattfinden soll. Soweit zumindest der Plan. Damit müsste sich das Problem erledigt haben.

edit: Ich habe mir das nun mal genauer angeschaut. So wie ich das sehe, läuft irgendwann (knapp 50 Tage) die Zahl über die Begrenzung von unsigned long hinaus. Das wäre dann natürlich nicht so gut.

Gibt es eine Möglichkeit, einen ATtiny per Befehl zu reseten?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2015, 12:18
Beitrag #6
RE: Einen hochzählenden Wert auf null setzen - wie macht man das?
(15.05.2015 11:24)Gelegenheitsbastler schrieb:  edit: Ich habe mir das nun mal genauer angeschaut. So wie ich das sehe, läuft irgendwann (knapp 50 Tage) die Zahl über die Begrenzung von unsigned long hinaus. Das wäre dann natürlich nicht so gut.
Das ist kein Problem. Auch, wenn ein Überlauf stattfindet, dann kannst Du mit dem Coding hier immer noch die Sekunden seit dem letzten Setzen von startTime ermitteln:
Code:
time = millis();
  sekunden = (time - startTime) / 1000;
...zumindest wenn es seit dem letzten Aufruf maximal einen Überlauf gegeben hat. Du musst sozusagen "Modulo 2^32" rechnen.
Noch was: Wenn Du die Sekunden eines ganzen Tages zählen willlst, dann sollte "sekunden" auch ein long sein.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2015, 16:18
Beitrag #7
RE: Einen hochzählenden Wert auf null setzen - wie macht man das?
Das alles hat nicht so geklappt, wie ich es mir vorstelle. Nun habe ich es ganz anders gelöst. Ich messe den Lichwert, warte 500 ms und messe dann wieder. Überschreitet die Differenz einen vorzugebenden Wert, dann geht es weiter im Sketch. Bisher funktioniert das soweit. Der Sonnenschein wird in 0,5 Sekunden nicht so stark schwanken, dass die Schaltung ausgelöst wird, denke ich. Da es heute regnet, muss ein echter Test noch warten...

Soweit trotzdem danke für die bisherige Hilfe.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Int ändert bei Übergabe seinen Wert?? da_user 30 972 15.04.2018 22:12
Letzter Beitrag: da_user
  Einen Startwert für den Millis() Zähler einstellen?? Franz54 9 435 01.04.2018 17:01
Letzter Beitrag: Franz54
  Rundklammern setzen, aber wie und warum? HarryS 4 496 18.03.2018 10:25
Letzter Beitrag: HarryS
Star BME680 IAQ Wert auslesen Bitklopfer 9 1.089 18.03.2018 02:33
Letzter Beitrag: Wampo
  Hilfe bei einen kleinen Programm FPV 9 823 11.03.2018 20:42
Letzter Beitrag: Tommy56
  Neuling mit einen Projekt MrNiceGuy 39 2.746 04.02.2018 20:50
Letzter Beitrag: MrNiceGuy
  Mehrere Ausgänge mit einem Befehl auf High oder Low setzen dahans 1 505 10.01.2018 12:48
Letzter Beitrag: Tommy56
  Arduino Uno - einen digitalen Pin mit nodeMCU 12E auslesen Stargazer 6 499 17.12.2017 17:40
Letzter Beitrag: hotsystems
  Matlab und Arduino verbinden und Anal. Wert lesen Nextero 13 774 12.12.2017 20:07
Letzter Beitrag: GuaAck
  Richtungsblinker und Warnblinker über jeweils einen Schalter Crazydiver 25 1.680 04.10.2017 12:47
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste