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
  Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht TimeMen 24 744 02.07.2016 14:18
Letzter Beitrag: hotsystems
  Den 1. nRF24L01 auf "T" setzen und den 2. auf "R" setzen, wie geht das bitte ? arduinofan 3 443 01.02.2016 20:10
Letzter Beitrag: arduinofan
  Kann ich in eine For Schleife einen delay einbauen JanGamer11 6 616 05.01.2016 12:34
Letzter Beitrag: Hilgi
  Pins setzen und auslesen im Yun mit FreeBasic arduinofan 3 556 08.12.2015 15:03
Letzter Beitrag: manau21
  Problem einen code zu schreiben der das macht was ich möchte.... Katzenfreund 11 1.462 01.11.2015 17:50
Letzter Beitrag: Katzenfreund
  Einen Arduino mega mit einem anderen Arduiono Mega als ISP laden. JoeR9 0 607 30.09.2015 19:10
Letzter Beitrag: JoeR9
  Langes delay - wie macht man das? Gelegenheitsbastler 17 2.446 02.09.2015 20:48
Letzter Beitrag: Gelegenheitsbastler
  Integer Wert in das Eprom schreiben und auslesen Schrittmotor 5 1.273 02.08.2015 14:15
Letzter Beitrag: hotsystems
  Taster für zwei Funktionen nutzen - wie macht man das? Gelegenheitsbastler 2 950 22.07.2015 11:56
Letzter Beitrag: Scherheinz
  Hilfe für Grafikfunktion Setzen jgrothe 5 767 19.06.2015 14:23
Letzter Beitrag: torsten_156

Gehe zu:


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