inka
28.11.2016, 16:42
hallo,
neulich fand ich auf garage_lab (http://www.vielsichtig.de/index.php?id=120)
folgenden
#include <Servo.h>
const int SERVO_PIN = 6;
const int BUTTON_PIN = 8;
const int LED_PIN = 13;
Servo SRV_servo;
int SRV_pos;
boolean SRV_moveFoward;
long SRV_nextWakeUp;
int LED_value;
boolean LED_moveFoward;
long LED_nextWakeUp;
void setup()
{
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
// init the compontent’s states
SRV_servo.attach(SERVO_PIN);
SRV_pos = 0;
SRV_moveFoward = true;
SRV_nextWakeUp = millis();
LED_value = 0;
LED_moveFoward = true;
LED_nextWakeUp = millis();
}
void loop()
{
long currentTime = millis();
long nextWakeUpSRV = SRV_doStep(currentTime);
long nextWakeUpLED = LED_doStep(currentTime);
long nextMinWakeUp = (nextWakeUpSRV < nextWakeUpLED) ? nextWakeUpSRV : nextWakeUpLED;
delay(nextMinWakeUp - currentTime);
}
/* ** SERVO ** */
long SRV_doStep(long currentMillis)
{
if (currentMillis > SRV_nextWakeUp)
{
if (SRV_moveFoward)
{
SRV_pos += SRV_getIncrement();
if (SRV_pos > 180)
{
SRV_moveFoward = false;
SRV_pos = 180;
}
} else
{
SRV_pos -= SRV_getIncrement();
if (SRV_pos < 0)
{
SRV_moveFoward = true;
SRV_pos = 0;
}
}
SRV_servo.write(SRV_pos);
SRV_nextWakeUp = currentMillis + 100;
}
return SRV_nextWakeUp;
}
int SRV_getIncrement()
{
if (digitalRead(BUTTON_PIN))
{
return 1;
} else
{
return 5;
}
}
/* ** LED ** */
long LED_doStep(long currentMillis)
{
if (currentMillis > LED_nextWakeUp)
{
if (LED_moveFoward)
{
LED_value += 3;
if (LED_value >= 200)
{
LED_moveFoward = false;
}
} else
{
LED_value -= 3;
if (LED_value <= 0)
{
LED_moveFoward = true;
}
}
analogWrite(LED_PIN, LED_value);
LED_nextWakeUp = currentMillis + 1;
}
return LED_nextWakeUp;
}
er funktioniert (https://youtu.be/Xf8AL0CzHVk) super, ich habe den ursprungscode um eine zweite LED und einen SR-04 erweitert und wollte ihn hier einfach mal weitergeben. Eine passage im code (in der loop) verstehe ich allerdings nicht:
long nextMinWakeUp = (nextWakeUpSRV < nextWakeUpLED) ? nextWakeUpSRV : nextWakeUpLED;
delay(nextMinWakeUp - currentTime);
könnte mir bitte jemand erklären wozu er ist? Der code funktioniert nämlich auch ohne die passage, zumindest erkenne ich keinen unterschied :-(
neulich fand ich auf garage_lab (http://www.vielsichtig.de/index.php?id=120)
folgenden
#include <Servo.h>
const int SERVO_PIN = 6;
const int BUTTON_PIN = 8;
const int LED_PIN = 13;
Servo SRV_servo;
int SRV_pos;
boolean SRV_moveFoward;
long SRV_nextWakeUp;
int LED_value;
boolean LED_moveFoward;
long LED_nextWakeUp;
void setup()
{
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
// init the compontent’s states
SRV_servo.attach(SERVO_PIN);
SRV_pos = 0;
SRV_moveFoward = true;
SRV_nextWakeUp = millis();
LED_value = 0;
LED_moveFoward = true;
LED_nextWakeUp = millis();
}
void loop()
{
long currentTime = millis();
long nextWakeUpSRV = SRV_doStep(currentTime);
long nextWakeUpLED = LED_doStep(currentTime);
long nextMinWakeUp = (nextWakeUpSRV < nextWakeUpLED) ? nextWakeUpSRV : nextWakeUpLED;
delay(nextMinWakeUp - currentTime);
}
/* ** SERVO ** */
long SRV_doStep(long currentMillis)
{
if (currentMillis > SRV_nextWakeUp)
{
if (SRV_moveFoward)
{
SRV_pos += SRV_getIncrement();
if (SRV_pos > 180)
{
SRV_moveFoward = false;
SRV_pos = 180;
}
} else
{
SRV_pos -= SRV_getIncrement();
if (SRV_pos < 0)
{
SRV_moveFoward = true;
SRV_pos = 0;
}
}
SRV_servo.write(SRV_pos);
SRV_nextWakeUp = currentMillis + 100;
}
return SRV_nextWakeUp;
}
int SRV_getIncrement()
{
if (digitalRead(BUTTON_PIN))
{
return 1;
} else
{
return 5;
}
}
/* ** LED ** */
long LED_doStep(long currentMillis)
{
if (currentMillis > LED_nextWakeUp)
{
if (LED_moveFoward)
{
LED_value += 3;
if (LED_value >= 200)
{
LED_moveFoward = false;
}
} else
{
LED_value -= 3;
if (LED_value <= 0)
{
LED_moveFoward = true;
}
}
analogWrite(LED_PIN, LED_value);
LED_nextWakeUp = currentMillis + 1;
}
return LED_nextWakeUp;
}
er funktioniert (https://youtu.be/Xf8AL0CzHVk) super, ich habe den ursprungscode um eine zweite LED und einen SR-04 erweitert und wollte ihn hier einfach mal weitergeben. Eine passage im code (in der loop) verstehe ich allerdings nicht:
long nextMinWakeUp = (nextWakeUpSRV < nextWakeUpLED) ? nextWakeUpSRV : nextWakeUpLED;
delay(nextMinWakeUp - currentTime);
könnte mir bitte jemand erklären wozu er ist? Der code funktioniert nämlich auch ohne die passage, zumindest erkenne ich keinen unterschied :-(