hallo,
neulich fand ich auf garage_lab

folgenden
Code:
#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 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:
Code:
  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