LED soll leuchten während ich am poti drehe

Hallo zusammen,

ich positioniere mit einem Poti einen Servo und lasse mir das PWM Signal mit dem seriellen Monitor ausgeben.

Zusätzlich dazu hätte ich gerne als visuelle Anzeige, dass der Poti/Servo gerade bewegt wird eine leuchtende LED. Quasi so:

Sobald am Poti gedreht wird–> LED=High; sobald nicht mehr am Poti gedreht wird → LED = LOW

kann mir hier bitte jemand mit dem code helfen?

Danke sehr!

#include <Servo.h> 
 
const int servoPin = 11;          // digital pin 11 connected to servo 
const int potpin = A0;            // analog pin connected to potentiometer
const int LED = 7;

int val;    // variable to read the value from the analog pin 

Servo myservo;  // create servo object to control a servo 
 
void setup() 
{ 
  myservo.attach(11);  // attaches the servo on digital pin 11 to the servo object 
  Serial.begin(9600); // initializes serial monitor at baudrate 9600

 pinMode (LED,OUTPUT);

} 
 
void loop() 
{ 
  int val = analogRead(potpin); 
  val = map(val, 0, 1023, 549, 2390);     // remaps poti values to PWM servo values
  myservo.writeMicroseconds(val);         // moves servo
  Serial.print("PWM Signal/Microseconds: ");
  Serial.println(val);                   // prints out remapped PWM values
  delay(15);
}

Sowas? Fehlt nur noch die Rücksetzung nach x-Sekunden. Das darfste selber machen mit millis.

uint8_t last_val = 0;
uint8_t led_state = 0;

void loop(void)
{
int val = analogRead(potpin);

if(val >= last_val + 5 || val <= last_val - 5)
{
last_val = val;
led_state = 1;
}

}

Super danke!

Versteh ich aber nicht ganz :slight_smile:

So? Muss das nicht noch mit der LED an pin 7 verknüpft werden? und wie zurücksetzen? Damit der byte Wert nicht überläuft? ich drehe halt immer mal wieder für ein paar sek am poti und da wärs schön wenns immer wenn ich drehe leuchten würde!

viele Grüße

#include <Servo.h> 
 
const int servoPin = 11;          // digital pin 11 connected to servo 
const int potpin = A0;            // analog pin connected to potentiometer
const int LED = 7;

byte lastLEDval = 0;
byte LEDstate = 0;

int val;    // variable to read the value from the analog pin 

Servo myservo;  // create servo object to control a servo 
 
void setup() 
{ 
  myservo.attach(11);  // attaches the servo on digital pin 11 to the servo object 
  Serial.begin(9600); // initializes serial monitor at baudrate 9600
  pinMode (LED,OUTPUT);
} 
 
void loop() 
{ 
  int val = analogRead(potpin); 
  if(val >= lastLEDval + 5 || val <= lastLEDval - 5)
{
lastLEDval = val;
LEDstate = 1;
}
  val = map(val, 0, 1023, 549, 2390);     // remaps poti values to PWM servo values
  myservo.writeMicroseconds(val);         // moves servo
  Serial.print("PWM Signal/Microseconds: ");
  Serial.println(val);                   // prints out remapped PWM values
  delay(15);
}

Wenn du das noch nicht verstehst, solltest du dir mal Lektüre und/oder das Playground hier durcharbeiten.

Meine Lösungweg ist nichts anderes, als jedes Mal zu überprüfen, ob der Wert um >= 5 vom letzten Mal abweicht. Die 5 habe ich gewählt, da ein Poti für das Einstellen relativ ungenau ist und die Werte gerne mal um 1-2 Stellen springen können.

Erst wenn das Ereignis eintritt, wird der letzte Wert erneut zwischengespeichert. Du musst nun irgendwo den Wert von led_state abfragen. Wenn der von 0 nach 1 wechselt, muss die ihn nach der Zeit x wieder manuell zurücksetzen.

Ansonsten stimme ich Michael zu, muss wohl gerade der Schwung von Weihnachten hier reinkommen :grin:

Hallo;

wollte mal berichten, dass ich es hinbekommen habe :slight_smile:

Habe deine Ausführungen bzgl millis() aber leider nicht verstanden weshalb ich es ein kleines bisschen anders gemacht habe;sollte so auch funktionieren oder?

Viele Grüße

#include <Servo.h> 

const int ledPinY = 7;            // digital pin 7 connected to yellow LED
int last_val = 0;
boolean led_state = 0;

Servo myservo;  // create servo object to control a servo 
 
const byte potpin = A0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin 
 
void setup() 
{
  pinMode(ledPinY,OUTPUT);             // initializes the yellow LED as an output 
  myservo.attach(11);  // attaches the servo on pin 9 to the servo object 
  Serial.begin(9600);
  led_state = LOW;
} 
 
void loop() 
{ 
  int val = analogRead(potpin);
  val = map(val, 0, 1023, 544, 2400);
  if(val >= last_val + 10 || val <= last_val - 10)
{
last_val = val;
led_state = 1;
}else{led_state = 0;
}
digitalWrite(ledPinY, led_state);
  myservo.writeMicroseconds(val);
  Serial.println(val);
  delay(15);
 }