LED Dimmen mit Serial Port! Bitte :/

Hallo Leute,
Ich möchte gern eine LED in 4 Stuffe dimmen (25%-50%-75%-100%) mit dem dem Serial port.
D.H: wenn ich im Serial Port 56 eingebe bekomme ich 25%
75 eingebe bekomme ich 50% usw..
mein Ziel ist eine kleine Software mit Python schreiben und diese LED steuern!!
Hier ist die Code, die ich schon geschrieben habe, aber leider funktioniert es nicht :frowning:

char serialData;
const int LED = 3;
int dim_value;

void setup() {
  
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  }

void loop() {
  
  if(Serial.available () > 0 ) {
    serialData = Serial.read();
    Serial.print(serialData);
    
    if(dim_value = 56) {
      dim_value = dim_value;}  
    else{
      dim_value = 56;
      delay(300);}
  }
  if(Serial.available () > 0 ) {
    serialData = Serial.read();
    Serial.print(serialData);
    
    if(dim_value = 75) {
      dim_value = dim_value;}  
    else{
      dim_value = 75;
      delay(300);}
  }
  if(Serial.available () > 0 ) {
    serialData = Serial.read();
    Serial.print(serialData);
    
    if(dim_value = 112) {
      dim_value = dim_value;}  
    else{
      dim_value = 112;
      delay(300);}
  }
  if(Serial.available () > 0 ) {
    serialData = Serial.read();
    Serial.print(serialData);
    
    if(dim_value = 225) {
      dim_value = dim_value;}  
    else{
      dim_value = 225;
      delay(300);}
  }
  if(Serial.available () > 0 ) {
    serialData = Serial.read();
    Serial.print(serialData);
    
    if(dim_value = 0) {
      dim_value = dim_value;}  
    else{
      dim_value = 0;
      delay(300);}
  }      
    analogWrite(LED,dim_value);
    
  }  

Ich habe diese Code Probiert mit 5 Drucktaster und es hat funktioniert!!

const int LED1 = 3;


const int Button1 = 2;
const int Button2 = 4;
const int Button3 = 5;
const int Button4 = 6; 
const int Button5 = 7;

int button1,button2,button3,button4,button5,dim_value;

void setup() {
  
  Serial.begin(11500);
  
  pinMode(Button1, INPUT);
  pinMode(Button2, INPUT);
  pinMode(Button3, INPUT);
  pinMode(Button4, INPUT);
  pinMode(Button5, INPUT);
  
  pinMode(LED1, OUTPUT);
}

void loop() {
  button1 = digitalRead(Button1);
  button2 = digitalRead(Button2);
  button3 = digitalRead(Button3);
  button4 = digitalRead(Button4);
  button5 = digitalRead(Button5);
  
  if(button1 == HIGH){
    if(dim_value = 56) {
      dim_value = dim_value;
    }
    else{
      dim_value = 56;
      delay(100);
    }
  }
  if(button2 == HIGH){
    if(dim_value = 112) {
      dim_value = dim_value;
    }
    else{
      dim_value = 112;
      delay(100);
    }
  }
  
  if(button3 == HIGH){
    if(dim_value = 168) {
      dim_value = dim_value;
    }
    else{
      dim_value = 168;
      delay(100);
    }
  }
  
  if(button4 == HIGH){
    if(dim_value = 225) {
      dim_value = dim_value;
    }
    else{
      dim_value = 225;
      delay(100);
    }
  }
  
  if(button5 == HIGH){
    if(dim_value = LOW) {
      dim_value = dim_value;
    }
    else{
      dim_value = LOW;
      delay(100);
    }
  }  
  Serial.println(dim_value);
  //Serial.println(dim_value_b);
  
  analogWrite (LED1, dim_value);

  
}

kann jemand von euch mir bitte hilfen oder einen Vorschlage geben?!

Oops

Multiple times

Ja, Ich progrmaiere leider nicht viel.
Es hat funktoniert mit den Tastendrucker

The pushbutton code is correct

Was erwarten Sie von dieser Logik? (auch wenn Sie das = de == korrigieren)

es lautet: Wenn der Wert 56 ist, dann ändern Sie die Variable nicht, sonst weisen Sie ihr 56 zu ...

im Grunde tun Sie also dim_value = 56;

Ah. ok now I understand what you mean!!
But what should I do, when I want to write in Serial Port 56 to get 25% from the LED?!

Ich erwarte davon, dass wenn ich 56 in dem Serial Port eingebe, schaltet die LED in niedrigste Stuffe und bleibt an, oder?

Hi,
Instead of all those if.. else, have you looked at switch.. case..?
https://www.arduino.cc/reference/en/language/structure/control-structure/switchcase/

This example is almost what you are looking for;

Tom.... :smiley: :+1: :coffee: :australia:

1 Like

Versuchen Sie dies

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() != 0) {
    char serialData = Serial.read();
    if (serialData == '8') { // ASCII code for '8' is 56
      Serial.println("Bingo");
    } else {
      Serial.println("Keine Zigarre");
    }
  }
}
1 Like

ASCII '8' has the value 56.
But a 25% duty cycle would be 64, or ASCII '@'

1 Like

Du hast da gleich mehrere Probleme.
Das:

  if (Serial.available () > 0 )

gehört nur einmal - dann einlesen - dann auswerten.
Das:

    serialData = Serial.read();
    Serial.print(serialData);
    if (dim_value = 56)

ist dein größter Fehler.
Du wertest das gelesene nie aus UND das: = ist eine Zuweisung und kein Vergleich.
Daher ist die Bedingung immer true.
Vielleichtt so?

char serialData;
const int LED = 3;
int dim_value;

void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop()
{
  if (Serial.available () > 0 )
  {
    serialData = Serial.read();
    Serial.print(serialData);
  }
  if ((serialData == 56) || (serialData == 75) || (serialData == 112) || (serialData == 254) || serialData == 0)
  {
    dim_value = serialData;
  }
  analogWrite(LED, dim_value);
}

( die 255 geht in das char nicht rein )

1 Like

Du willst in Python hoffentlich nicht den Text "56" auf dem Serial Port ausgeben...
Oder erkläre, warum das so sein muss.

56 == '8' --> 25%
75 == 'K' --> 50%

das "usw." kann ich mir daraus leider nicht ableiten.

mein Ziel ist eine kleine Software mit Python schreiben

Dann mach die doch so, dass sie '0' ... '4' für 0 .. 100% ausgibt.
Der Arduino reagiert auf diese 5 Zeichen und ignoriert alles andere. (Leerzeichen, Zeilenende, usw.) Den Arduino kannst du auch leicht mit SerialMonitor statt Python-Programm testen.

1 Like

du willst also auf der Seriellen 0 bis 100 eingeben können und das soll auf 0 bis 255 gemappt werden und anschließend eine PWM LED mit analogread angesteuert werden
Ist das richtig?

Kannst du deine Eingabe (0 ... 100) mit einem Linefeed/Carriage Return abschließen - auch von deinem späteren Programm aus?

Ja, Genau ... das ist mein Ziel.
Ich möchte einfach dei LED dimmen in 4 Verschiedene Stuffen.
25% 50%75% 100%

Danke für die Antwort. Ja genau .... mit dem Python ist es eine andere Geschichte... ich wollte jetzt nur mit dem Serial Port steuern

aber dann sollst du erstmal lesen was Serial. Read genau macht

https://www.arduino.cc/reference/en/language/functions/communication/serial/read/

Returns

The first byte of incoming serial data available (or -1 if no data is available).

das heißt du musst so lange lesen bis du z.B. ein Zeilenende erhältst und dann die (bis zu) 3 Ziffern zu einer Zahl machen.

Richtig?

1 Like

einfach ist : 1 Zeichen => 1 analogWrite Ausgabe.
ganz einfach wären aufeinanderfolgende Zeichen

1 Like

vielen Dank für die Antwort :slight_smile:
Die Code ist richtig schön, deutlicher als meie und einfacher
Aber leider hat nicht funktioniert!!
Die LED bleibt immer aus

Weil das mit Deinen 56 nicht klappt.
Versuch es mit richtigen Buchstaben:

char serialData;
const int LED = 3;
int dim_value;

void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop()
{
  if (Serial.available () > 0 )
  {
    serialData = Serial.read();
    Serial.print(serialData);
  }
  switch (serialData)
  {
  case 'a':
   dim_value = 0;
  break;
  case 'b':
   dim_value = 56;
  break;
  case 'c':
   dim_value = 75;
  break;
  case 'd':
   dim_value = 112;
  break;
  case 'e':
   dim_value = 255;
  break;
  }
  analogWrite(LED, dim_value);
}

Leseempfehlung für jeden Abend ein paar Seiten - nicht auswendig lernen nur lesen, damit Du weisst, was drin steht: ArduinoForum.de - Das deutschsprachige Forum rund um den Arduino - Arduino Code-Referenz (deutsch) dort das pdf runterladen...

1 Like

Jaaa, jetzt verstehe was du meinst!!
doch das funktioniert...
Ich sollte dafür die ASCII code Tabelle benutzen..
Vielen Dank ....
Das mache ich sehr gern (Lesen)
falls du noch mehr Vorschläge oder Resource hast, wäre ich dir sehr dankbar