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
millis Schleife bleibt hängen
27.06.2020, 12:12 (Dieser Beitrag wurde zuletzt bearbeitet: 27.06.2020 12:14 von Cubicany.)
Beitrag #1
millis Schleife bleibt hängen
Habe ein Problem, wo ich nicht ganz weiß, warum das so passiert.

Ich habe an einem Uno so eine China Relaiskarte dran
hängen, welche einen 24V AC Motor schalten soll. Der Motor ist im
Steinmetz angeschlossen und über die zwei Kontakte am Kondensator
wird die Drehrichtung geändert.

Also mit der Phase ins Relais rein und mit den beiden Kontakten raus.

Per Programm soll das Relais alle 10 Sekunden umschalten.

Das ganze habe ich einmal per delay gemacht, was auch funktioniert.

Dann wollte ich das ganze in millis machen, aber hier hängt sich der
Arduino nach einiger Zeit einfach auf.

Code:
//*************** HW Pinbelegung Arduino ***************************
//Pin10 - Ausgang schalter Relais

//  ************* Variablen ******************************

  int Relay1 = 10; // Pin 10 soll Relay1 heissen

//  ************* Setup ******************************
void setup()
{
  Serial.begin (4800);  // UART Kommunikation initialisieren und auf 9600 Baud
  
// ************* Pinzuweisungen I/O *****************
  pinMode(Relay1, OUTPUT);  // Der Pin 10 der jetzt Relay1 heisst soll ein Ausgang sein
  digitalWrite(Relay1,LOW);  //Bei Programmstart soll das Relais definiert ausgeschaltet sein
}

// Programmfunktion : Alle 10 sekunden soll das Relais abwechselnd ein / aus geschaltet werden (8s hochlauf, 2s warten)
void loop()                     // Alles was zwischen den geschweiften Klammern steht wird ewig ausgeführt
{
Serial.println("Relais EIN"); // Meldung an Serial-Monitor ausgeben
digitalWrite(Relay1, HIGH);   // Relais wird eingeschaltet
delay (10000);                // 10 sekunden warten
Serial.println("Relais AUS"); // Meldung an Serial-Monitor ausgeben
digitalWrite(Relay1,LOW);     // Realis wird ausgeschaltet
delay (10000);                // 10 sekunden warten
}

Code:
const int RELAY1 = 10;

unsigned long startzeit_1 = 0;
unsigned long laufzeit_1 = 10000;      //Zeit für Zyklus festlegen
void setup()
  {

    pinMode(RELAY1, OUTPUT);
                
  digitalWrite(RELAY1, HIGH); //Relais zu Beginn ausschalten
  
  }


void loop()
{
  if (millis() - startzeit_1 >= laufzeit_1) {    //Schleife für die Links/Rechts Bewegung
  startzeit_1 = millis();
  digitalWrite(RELAY1, digitalRead(RELAY1) ^ 1);
  }
}

Einen EMV Eintrag über die Ac Leitung schließe ich nicht aus, aber warum hat die eine Schleife damit kein Problem, die millis aber schon?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2020, 20:10
Beitrag #2
RE: millis Schleife bleibt hängen
Hallo,
es antwortet keiner, weil Du sich noch nicht die Mühe gegeben hast, nach einem Beispiel zu suchen UND den verstehen. Suche nach BlinkWithoutDelay.
Ein kurzes blick (Analyse) auf den BlinkWithoutDelay Code liefert Dir Deinen Fehler.
Gruß Georg

Sorry für mein nicht korrektes Deutsch. Sad
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2020, 20:19
Beitrag #3
RE: millis Schleife bleibt hängen
(27.06.2020 20:10)georg01 schrieb:  Hallo,
es antwortet keiner, weil Du sich noch nicht die Mühe gegeben hast, nach einem Beispiel zu suchen UND den verstehen. Suche nach BlinkWithoutDelay.
Ein kurzes blick (Analyse) auf den BlinkWithoutDelay Code liefert Dir Deinen Fehler.
Gruß Georg
Wo siehst Du einen Codefehler bei millis? Ich sehe ihn nicht.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2020, 20:31 (Dieser Beitrag wurde zuletzt bearbeitet: 27.06.2020 20:31 von Vapalus.)
Beitrag #4
RE: millis Schleife bleibt hängen
Seit ca. 6 Stunden lasse ich den Code zum Testen laufen und hatte bisher keinen Absturz.
Von meiner Seite gab es deshalb nichts zum Schreiben.

In der heutigen Zeit ist gesunder Menschenverstand so etwas Ähnliches wie eine Superkraft - aber keine nützliche.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2020, 21:19
Beitrag #5
RE: millis Schleife bleibt hängen
(27.06.2020 20:10)georg01 schrieb:  Hallo,
es antwortet keiner, weil Du sich noch nicht die Mühe gegeben hast, nach einem Beispiel zu suchen UND den verstehen. Suche nach BlinkWithoutDelay.
Ein kurzes blick (Analyse) auf den BlinkWithoutDelay Code liefert Dir Deinen Fehler.
Gruß Georg

Ich kannte das hier "digitalWrite(RELAY1, digitalRead(RELAY1) ^ 1);" auch nicht. Aber das scheint ja kein Fehler zu sein. Der Code funktioniert ja. Big Grin

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2020, 23:58
Beitrag #6
RE: millis Schleife bleibt hängen
@Tommy
Ja –hast Du recht ich habe die Funktion “ millis()“ im:
if (millis() - startzeit_1 >= laufzeit_1) { //Schleife für die Links/Rechts Bewegung
als eine Variable gesehen / interpretiert.

@Franz54
Das ist mir auch neu! Werde die Materie angehen – Danke.
@TO
Sorry

Gruß Georg

Sorry für mein nicht korrektes Deutsch. Sad
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.06.2020, 07:47
Beitrag #7
RE: millis Schleife bleibt hängen
Der Code verwendet halt direkt das Register anstatt eine eigene Variable.
Für mich jetzt etwas gewöhnungsbedürftig, aber wenn man gerade kein TB an RAM rumliegen hat, keine schlechte Idee.

Mein Testaufbau lief seit ca. 16 Stunden durch. Es gab keinen Absturz, weswegen ich jetzt da das iPad zum Laden einstecken werde.
Hinweis: Der Code, so wie er gerade läuft, kann nur 49 Tage durchgehend laufen, danach muss er resettet werden.
Oder man überlegt sich, wie man den 32 Bit Overflow handhabt.

In der heutigen Zeit ist gesunder Menschenverstand so etwas Ähnliches wie eine Superkraft - aber keine nützliche.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.06.2020, 10:08
Beitrag #8
RE: millis Schleife bleibt hängen
Der Code
Code:
digitalWrite(RELAY1, digitalRead(RELAY1) ^ 1); // XOR 1
negiert genau so wie
Code:
digitalWrite(RELAY1, !digitalRead(RELAY1)); // NOT

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Hilfe Millis treibt mich in den Wahnsinn Nefrett 17 1.042 04.05.2020 20:53
Letzter Beitrag: Tommy56
  delay-millis()-while-Sensorenabfrage RCudino 22 1.618 01.04.2020 06:46
Letzter Beitrag: RCudino
  for-schleife, delay, millis, interrupt Harry 8 703 31.03.2020 21:02
Letzter Beitrag: Harry
  int variable wird nicht in Schleife übertragen ha0248 8 867 11.02.2020 15:25
Letzter Beitrag: ha0248
  Millis anstatt delay ThorstenP 25 2.610 29.11.2019 16:34
Letzter Beitrag: Tommy56
  Schleife nur 1x durchlaufen ohne for... Hanibal_Smith 3 853 01.10.2019 19:44
Letzter Beitrag: Tommy56
Question Uhr Bleibt Stehen GunterGunter 8 1.273 07.08.2019 16:15
Letzter Beitrag: Tommy56
  Millis benutzen statt delay beame 9 2.166 21.06.2019 16:16
Letzter Beitrag: Franz54
  For-Schleife ohne Begrenzung? Batucada 4 991 26.04.2019 09:54
Letzter Beitrag: Batucada
  Berücksichtigung des A0-Einganges in if-Schleife Joergi-1911 3 739 17.02.2019 16:33
Letzter Beitrag: Tommy56

Gehe zu:


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