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
Berücksichtigung des A0-Einganges in if-Schleife
17.02.2019, 15:55
Beitrag #1
Berücksichtigung des A0-Einganges in if-Schleife
Hallo werte Foristi,

es ist für Euch warscheinlich einfach, aber mir hat es schon mindestens
eine Packung Moncherie und vier graue Haare gekostet.

Ich möchte einen Zeittakt in Abhängigkeit des Eingangswertes des Analogeinganges
A0 derart verändern, das sich die Pausenzeit nach erreichen eines Schwellwertes
verändert.

Mein Plan sieht so aus:

Code:
// Variablen deklarieren in denen die Startzeiten
// der einzelnen Zeitfunktionen gespeichert werden

unsigned long startzeit_2 = 0;
unsigned long startzeit_3 = 0;

// Definition der High-Zeit

#define        laufzeit_3     50UL  //ein


// Die Anschlusspins festlegen

const int LED = 13;


// Ablauf


void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);

}

void loop() {


  Serial.println(analogRead(A0));

//Definition der Low-Zeit in Abhängigkeit der Eingangsgröße vom Pin A0

  if (analogRead(A0) < 300) {
#define  laufzeit_2   300UL
  } else {

#define        laufzeit_2    600UL  //aus

  }


  // Zeitprogramm

  if (!digitalRead(LED) && millis() - startzeit_2 >= laufzeit_2 ) {
    startzeit_3 = millis();
    digitalWrite(LED, digitalRead(LED) ^ 1);
  }
  if (digitalRead(LED) && millis() - startzeit_3 >= laufzeit_3 ) {
    startzeit_2 = millis();
    digitalWrite(LED, digitalRead(LED) ^ 1);
  }
}

Im Moment wird nur die Pausenzeit 'laufzeit_2' 600UL ausgeführt. Unabhängig davon
ob der Schwellenwert über oder unterschritten ist. (Ich über- oder unterschreite
sehr weit, so das ein Auswertefehler nicht sein kann)

Was muß ich ändern, damit die Bedingung in der if-Schleife ausgeführt wird? Also das sich die Low-Zeit (nach überschreiten des A0 - Wertes von 300) von 600 ms auf 300 ms reduziert?

(Alles zum SerialPrint brauche ich erstmal nur zur Kontrolle mit dem Serial Monitor)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.02.2019, 16:03
Beitrag #2
RE: Berücksichtigung des A0-Einganges in if-Schleife
#define sind reine Textersetzungen, die vor dem Lauf des Kompilers durchgeführt werden. Damit kann man nichts zur Laufzeit steuern.

if-Schleifen gibt es nicht, nur if-Abfragen.

Lege Dir eine Variable an und weise der den jeweiligen Wert zu.
Code:
uint32_t laufzeit_3 = 600UL;
...

if (analogRead(A0) <300) laufzeit_3 = 300UL;
else laufzeit_3 = 600UL;

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
17.02.2019, 16:31
Beitrag #3
RE: Berücksichtigung des A0-Einganges in if-Schleife
(17.02.2019 16:03)Tommy56 schrieb:  #define sind reine Textersetzungen, die vor dem Lauf des Kompilers durchgeführt werden. Damit kann man nichts zur Laufzeit steuern.

if-Schleifen gibt es nicht, nur if-Abfragen.

Gruß Tommy

Es gibt sehr wenige Genie's. Du bist eins davon!
In so kurzer Zeit ein Problem zu erfassen und zu lösen ist Können.

Habe nach Deiner Vorgabe gearbeitet, die Größe 'laufzeit_3' in 'laufzeit_2'
geändert und alles im Sketch platziert.

Es funktioniert. Es funktioniert!!

Ich bedanke mich bei Dir und wünsche noch einen schönen Restsonntag.

PS.: Ich bin kein sattelfester Programmierer. Deswegen auch der Formulierungs-
fehler mit der if-Schleife / if-Abfrage. Habe auch hier dazu gelernt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.02.2019, 16:33
Beitrag #4
RE: Berücksichtigung des A0-Einganges in if-Schleife
Schön, dass es funktioniert und danke für die Rückmeldung.

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
  Variable in for-Schleife volllaufen lassen. gutschy 7 717 09.04.2021 17:54
Letzter Beitrag: Tommy56
  If-Schleife wird nicht mehr durchlaufen LK2567 2 711 05.02.2021 21:20
Letzter Beitrag: LK2567
  for Schleife behindert teilweise Ablauf rev.antun 5 685 23.11.2020 14:43
Letzter Beitrag: rev.antun
  While Schleife FoxFactoy 8 1.707 01.08.2020 14:58
Letzter Beitrag: Tommy56
  millis Schleife bleibt hängen Cubicany 10 2.179 28.06.2020 18:39
Letzter Beitrag: Tommy56
  for-schleife, delay, millis, interrupt Harry 8 2.353 31.03.2020 21:02
Letzter Beitrag: Harry
  int variable wird nicht in Schleife übertragen ha0248 8 2.083 11.02.2020 15:25
Letzter Beitrag: ha0248
  Schleife nur 1x durchlaufen ohne for... Hanibal_Smith 3 1.663 01.10.2019 19:44
Letzter Beitrag: Tommy56
  For-Schleife ohne Begrenzung? Batucada 4 1.905 26.04.2019 09:54
Letzter Beitrag: Batucada
  Schleife (Durchlauf) abbrechen wann ich es will EXCLUZIVE 11 3.193 22.01.2019 15:52
Letzter Beitrag: Vapalus

Gehe zu:


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