Go Down

Topic: Frontblitzer ohne Delay (Read 1 time) previous topic - next topic

timschillert

ich habe das ganze jetzt mal probiert. Irgendwie scheine ich dort aber noch einen Fehler zu haben.

Die LEDs leuchten jetzt dauerhaft und laufen danach die Funktion durch.

Ich würde das gerne so haben, das beide LEDs aus sind, sobald ich den Taster drücke die LEDs entgegengesetzt den Blinkintervall durchlaufen.

Bisher sieht der Code so aus:

Code: [Select]

void Alarm() {
  if(digitalRead(Alarmtaste)==HIGH)
  {
   digitalWrite(Blitzer, HIGH);
  static byte intervallindex = 0;
  static uint32_t vorhin;
  if (jetzt - vorhin >= Blinkintervalle[intervallindex]) {
    vorhin = jetzt;
    digitalWrite(Blitzer, !digitalRead(Blitzer));
    digitalWrite(Blaulicht, !digitalRead(Blaulicht));
    intervallindex = ++intervallindex < (sizeof(Blinkintervalle) / sizeof(Blinkintervalle[0])) ? intervallindex : 0;
  }
  }



Die beiden LEDs habe ich am Anfang auf low gesetzt, da sonst die Blitzer LED dauerhaft an wäre, der Taster ist als Pulldown-Widerstand deklariert.


combie

Quote
Ich würde das gerne so haben, das beide LEDs aus sind, sobald ich den Taster drücke die LEDs entgegengesetzt den Blinkintervall durchlaufen.

......

der Taster ist als Pulldown-Widerstand deklariert.
Was für eine Sorte Prosa ist das?


Tipp:
Ablaufsteuerungen baut man so, dass man sich einen Ablaufplan malt und den dann in Software gießt.
Solange die Gedanken nicht klar sind, ist auch der Plan unvollständig und falsch.

Säge kein Sägemehl.

agmue

Dafür wurde "else" erfunden:

Code: [Select]
  if (digitalRead(Alarmtaste) == HIGH)
  {
    // mach was
  }
  else
  {
    // mach was anderes
  }
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

(deleted)


timschillert

Dafür wurde "else" erfunden:
Stimmt, hätte ich mal drauf kommen sollen  :smiley-confuse: :smiley-confuse:


Jetzt funktioniert es soweit, ich drücke den Taster beide LEDs blinken.


Jetzt möchte ich jedoch, beide entgegensetzt blinken lassen. Den Code habe ich dafür ja schon von hier. (ein Ausgang aus High, den anderen auf Low. Entsprechend mit dem Code hat es ja so ohne Taster funktioniert.
Habe jetzt schon probiert, beide Ausgänge gleich zusetzen, sowie das negierte Auslesen wegzulassen.

combie

#35
Dec 08, 2020, 03:30 pm Last Edit: Dec 08, 2020, 09:54 pm by combie
Oder für ganz Faule:
digitalRead(Alarmtaste) ? machWas() : machWasAnderes();  :)
Aua!

Das ist sehr problematisch.

Der trinäre Operator ist ein Operator, keine Kontrollstruktur.
Kann auch keine solche Kontollstruktur ersetzen.

Wenn man das trotzdem versucht, landet man ganz schnell in der  "C++ Sequence Point" Problematik.

Es mag in bestimmten Einzelfällen funktionieren, ist aber bei mir, in der Schublade BÖSE.


Ganz klar:
Der trinäre Operator hantiert mit Daten.
Das if() Statement bestimmt den Kontrollfluss.

Ein abweichen davon widerspricht dem Prinzip der geringsten Verwunderung.


Säge kein Sägemehl.

agmue

Jetzt möchte ich jedoch, beide entgegensetzt blinken lassen.
Code: [Select]
    digitalWrite(Blitzer, !digitalRead(Blitzer));
    digitalWrite(Blaulicht, !digitalRead(Blitzer));


Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

timschillert

Code: [Select]
   digitalWrite(Blitzer, !digitalRead(Blitzer));
    digitalWrite(Blaulicht, !digitalRead(Blitzer));



danke :) Ich glaube das hatte ich ja ganz zu Anfang auch mal. Darauf bin ich nicht gekommen

timschillert

#38
Dec 18, 2020, 08:31 pm Last Edit: Dec 18, 2020, 08:33 pm by timschillert
ich hätte nochmal eine Frage.

mir ist eben aufgefallen, das meine LEDs jetzt langsamer von high auf low wechseln.  Woran kann so etwas liegen? Habe nur ein paar andere Dinge im Programm eingefügt, jedoch den Teil mit den Blitzern nicht verändert.

Weiterhin möchte ich gerne eine Textausgabe einmal zu Programmbeginn im seriellen Monitor haben.

Wenn ich den Programmteil im Setup schreibe, wird er mir jedoch nicht ausgegben. Wenn ich ihn woanders eintrage, wiederholt er sich dauerhaft.

Tommy56

Wie sollen wir das ohne Code beurteilen?

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

timschillert

#40
Dec 18, 2020, 08:46 pm Last Edit: Dec 18, 2020, 08:50 pm by timschillert
Wie sollen wir das ohne Code beurteilen?

Gruß Tommy
ja macht sinn :D

irgendwie habe ich da Probleme mit dem seriellen Monitor, mal funktioniert er, mal nicht:

Code: [Select]

void setup() {
  /*
    Abblendlcht als Ausgang
    Rücklicht als Ausgang
    Blitzer als Ausgang
    Blaulicht als Ausgang
    Alarmtaster als Eingang
    Blaulicht und Frontblitzer invertiert
  */
  Serial.begin(9600);
  Serial.println("1-8 raus");
  Serial.println("Für Standlicht 'Eingabe P':");
  Serial.println("Für Abblendlicht 'Eingabe A':");
  Serial.println("Für Fernlicht 'Eingabe F':");
  Serial.println("Für Rücklicht 'Eingabe R':");
  Serial.println("Für Bremslicht 'Eingabe B':");
 
  pinMode(Abblendlicht, OUTPUT);
  pinMode(Ruecklicht, OUTPUT);
  pinMode(Blitzer, OUTPUT);
  pinMode(Blaulicht, OUTPUT);
  pinMode(Alarmtaste, INPUT_PULLDOWN);




Tommy56

Also ich hatte noch nie Probvleme mit dem seriellen Monitor.
Du könntest die Baudrate mal etwas hoch setzen(9600 --> 115200). Auch im seriellen Monitor umstellen.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

timschillert

hat jetzt leider nichts gebracht, irgendwie wird mir jetzt gar nicht mehrs angezeigt. Komisch irgendwie

Tommy56

Ich fahre grundsätzlich mit dieser Baudrate. Hast Du auch den seriellen Monitor umgestellt? in Serial.begin und im seriellen Monitor müssen die gleichen Zahlen stehen.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

timschillert

habe jetzt folgendes:

Code: [Select]
Serial.begin(115200);

Im seriellen Monitor ebenfalls, jedoch müsste ich den Controller resetten, damit mir was angezeigt wird. Sobald ich den Controller mit dem PC verbinde und den seriellen Monitor öffne, wird mir nichts angezeigt.

Go Up