Zur Unterbrechung Deiner Programmschleife, falls die längere Zeit in Anspruch nimmt. Andernfalls könnte Dir das Gerät einfrieren/abstürzen. Normal baut man das beispielhaft am Ende innerhalb loop() ein. Unterbricht die aktuelle Schleife um dem Prozessor Zeit für andere Aufgaben zu geben.
yield()
Description
Passes control to other tasks when called. Ideally yield() should be used in functions that will take awhile to complete.
Syntax
yield();
Parameters
none
Returns
nothing
- - - Aktualisiert - - -
Du initialisierst sicherheit mit 1:In loop() geht es dann mit while weiter, while wird solange ausgeführt, wie die angegebene Bedingung erfüllt ist:Code:bool sicherheit = 1;Da sicherheit schon den Wert 1 hat, macht die while-Schleife gar nichts (While ist zur Schleifenbildung gedacht). Daher geht es dann mit dem Code weiter:Code:while( sicherheit == 0 )
Zum Verständnis muss man wissen: was soll sicherheit bewirken/bezwecken?Code:digitalWrite(MOTOR_1, HIGH); digitalWrite(MOTOR_2, HIGH); // Geschwindigkeit regeln analogWrite(PWM, poti_Value / 4); // Drehrichtung Links digitalWrite(MOTOR_1, HIGH); digitalWrite(MOTOR_2, LOW); // Drehrichtung Rechts digitalWrite(MOTOR_1, LOW); digitalWrite(MOTOR_2, HIGH);
Um das Verständnis zu verbessern, warum nicht zum Beispiel so:
Sofern ich das richtig verstanden habe, könntest Du das dann auch so machen:Code:/* Analog Input */ #define MOTOR_1 2 #define MOTOR_2 4 #define POTI A0 #define PWM 9 #define TASTER 7 #define LED 3 //int poti = A0; // select the input pin for the potentiometer int poti_Value = 0; // variable to store the value coming from the sensor int poti_prozent = 0; bool sicherheit = 1; void setup() { // declare the ledPin as an OUTPUT: //pinMode(ledPin, OUTPUT); Serial.begin(9600); //pinMode(MOTOR_1,OUTPUT); //pinMode(MOTOR_2,OUTPUT); pinMode(LED,OUTPUT); pinMode(TASTER,INPUT_PULLUP); pinMode(MOTOR_1,OUTPUT); pinMode(MOTOR_2,OUTPUT); pinMode(PWM,OUTPUT); digitalWrite(LED, LOW); } void loop() { int pwmSpeed; // Poti Regelbereich poti_Value = analogRead(POTI); poti_prozent = map(poti_Value, 0,1023, 0,100); // Ausgabe Serial.print("Poti = "); Serial.print(poti_prozent); Serial.println("% "); if (poti_prozent > 3 ) { digitalWrite(LED, HIGH); digitalWrite(MOTOR_1, LOW); digitalWrite(MOTOR_2, LOW); return 0; } digitalWrite(MOTOR_1, HIGH); digitalWrite(MOTOR_2, HIGH); // Geschwindigkeit regeln analogWrite(PWM, poti_Value / 4); // Drehrichtung Links digitalWrite(MOTOR_1, HIGH); digitalWrite(MOTOR_2, LOW); // Drehrichtung Rechts digitalWrite(MOTOR_1, LOW); digitalWrite(MOTOR_2, HIGH); // ENDE }
Code:/* Analog Input */ #define MOTOR_1 2 #define MOTOR_2 4 #define POTI A0 #define PWM 9 #define TASTER 7 #define LED 3 //int poti = A0; // select the input pin for the potentiometer int poti_Value = 0; // variable to store the value coming from the sensor int poti_prozent = 0; bool sicherheit = 1; void setup() { // declare the ledPin as an OUTPUT: //pinMode(ledPin, OUTPUT); Serial.begin(9600); //pinMode(MOTOR_1,OUTPUT); //pinMode(MOTOR_2,OUTPUT); pinMode(LED,OUTPUT); pinMode(TASTER,INPUT_PULLUP); pinMode(MOTOR_1,OUTPUT); pinMode(MOTOR_2,OUTPUT); pinMode(PWM,OUTPUT); digitalWrite(LED, LOW); } void loop() { int pwmSpeed; // Poti Regelbereich poti_Value = analogRead(POTI); poti_prozent = map(poti_Value, 0,1023, 0,100); // Ausgabe Serial.print("Poti = "); Serial.print(poti_prozent); Serial.println("% "); if (poti_prozent > 3 ) { digitalWrite(LED, HIGH); digitalWrite(MOTOR_1, LOW); digitalWrite(MOTOR_2, LOW); } else { digitalWrite(MOTOR_1, HIGH); digitalWrite(MOTOR_2, HIGH); // Geschwindigkeit regeln analogWrite(PWM, poti_Value / 4); // Drehrichtung Links digitalWrite(MOTOR_1, HIGH); digitalWrite(MOTOR_2, LOW); // Drehrichtung Rechts digitalWrite(MOTOR_1, LOW); digitalWrite(MOTOR_2, HIGH); } // ENDE yield(); }







Zitieren

Lesezeichen