Eingabe vom Serial Monitor verwenden

Moin Leute, bin neu in diesem Forum :D.
Ich habe ein kleines Problem, was ich nicht gelöst bekomme. Ich habe schon auf einigen Seiten geschaut aber nichts nützliches gefunden. Ich möchte über den Serial Monitor die Helligkeit einer LED steuern, und habe jetzt ein Code aus dem Internet, wo das, was man schreibt auch wieder ausgegeben wird, ich kann es aber nicht an eine Variable weiter geben, von wo aus ich den Wert an den LEDPin geben kann. Kann mir jemand sagen, wie ich das eingebene an eine Variable weiter geben kann? Oder direkt an die LED.
Bin noch Anfänger in Arduino.
Hier erstmal der Code:

void setup (){
  Serial.begin(9600);
  Serial.flush();
  digitalWrite (13, HIGH);      //turn on debugging LED
}

void loop (){

  int i=0;
  char commandbuffer[100];

  if(Serial.available()){
     delay(100);
     while( Serial.available() && i< 99) {
        commandbuffer[i++] = Serial.read();
     }
     commandbuffer[i++]='\0';
  }

  if(i>0)
     Serial.println((char*)commandbuffer);

}

Wenn du beeinfluissen möchtest, wie hell eine LED ist, musst du einen Analogen Pin verwenden. Digital geht nur an oder aus.

LG

Fipsi

Ich weiß, nur das Problem ist ja, das ich nicht analogWrite(Ledpin, (char*)commandbuffer); schreiben kann. Das Problem ist halt, das ich das eingegebene wieder ausgeben kann, aber nicht an den Ledpin weiter geben kann.

Das hier dürfte dir helfen:

LG

Fipsi

Schonmal Danke für den Code.

const int ledPin = 6;      // the pin that the LED is attached to

void setup()
{
  // initialize the serial communication:
  Serial.begin(9600);
  // initialize the ledPin as an output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  byte brightness;

  // check if data has been sent from the computer:
  if (Serial.available()) {
    // read the most recent byte (which will be from 0 to 255):
    brightness = Serial.read();
    // set the brightness of the LED:
    analogWrite(ledPin, brightness);
    Serial.println(brightness);
  }
}

Habe erst mal byte brightness; zu char brightness; gemacht, damit er die Zeichen nicht als DEC ausgibt. Jetzt gibt er sie auch so aus, wie ich sie haben möchte. Jetzt ist es aber so, das wenn ich z.B. 255 eingebe, er jede Ziffer einzeln an die LED gibt, so das sie am Ende die 5 bekommt. Deswegen hatte ich den anderen Code mit dem "CommandBuffer", aber da kann ich die Zahl halt nur ausgeben und nicht "verwenden". An die LED weitergeben. Ich hoffe Ihr versteht mein Problem.

Serial.read(brightness, 3);

Die Ziffer sagt, wieviele byte er abfragen soll dafür.

LG

Fipsi

Du weisst sicher schon, dass Serial.read() ein einzelnes Zeichen ( z.B. einen Buchstaben ) liest.
und dass analogWrite (LED, brightness); eine Zahl 0 ... 255 in der Variablen brightness erwartet.

Buchstaben ( char ) und kleine Zahlen (byte) sind gleich groß und du kannst sie gleich verwenden.
Das Dumme ist nur, dass z.B. die Zahl 0 und der Buchstabe '0' verschieden sind.

Ein kleines Spielzeug:

char c = Serial.read();
if ( c >= '0' && c <= '9' )
{  //  wir haben eine Ziffer 0 .. 9 empfangen
      byte b = c - '0';  // b ist jetzt eine Zahl 0 .. 9
      analogWrite(LED, b*28); // 0 = AUS , 9  =  HELL 
}

Welchen Wert der Buchstabe '0' hat, ist egal. Zum Glück sind die Buchstaben '1' '2' ... direkt darauffolgend.

Schau dir doch mal das Beispiel "Comminication" => "ReadASCIIString" an.

Da wird genau das gemacht:
im Serial Monitor ein Wert eingegeben, der in LED-Helligkeit umgesetzt wird.
Im Beispiel sind es drei werte und eine RGB-LED.

Danke euch beiden :slight_smile: