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:
Code:
bool sicherheit = 1;
In loop() geht es dann mit while weiter, while wird solange ausgeführt, wie die angegebene Bedingung erfüllt ist:
Code:
while( sicherheit == 0 )
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:
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);
Zum Verständnis muss man wissen: was soll sicherheit bewirken/bezwecken?
Um das Verständnis zu verbessern, warum nicht zum Beispiel so:
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
}
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);
}
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();
}
Lesezeichen