LED Dimmen mit Serial Port! Bitte :/

wenn da noch eifrig weiterdiskutiert wird.
Also ich hätte es ursprünglich so gelesen, als dass da Prozentwerte von 0 .. 100 über die Schnittstelle kommen.
Ein valider Weg ist dann wie in den Serial Input Basics beschrieben ist.

@mahmoud-alhmada : ich empfehle dir auf alle Fälle das Tutorial auch zu lesen, es erklärt einiges wie man mit der Seriellen umgeht.

Hier eine Umsetzung - man muss darauf achten, dass der Serial Monitor auch mit einem Linefeed abschließt:

// read: https://forum.arduino.cc/t/serial-input-basics-updated/382007/3
// Example 4 - Receive a number as text and convert it to an int

const byte numChars = 32;
char receivedChars[numChars];   // an array to store the received data

boolean newData = false;

int dataNumber = 0;             // new for this version

const int ledPin = 3;

void setup() {
  Serial.begin(9600);
  Serial.println("<Arduino is ready>");
  pinMode(ledPin, OUTPUT);
}

void loop() {
  recvWithEndMarker();
  showNewNumber();
}

void recvWithEndMarker() {
  static byte ndx = 0;
  char endMarker = '\n';
  char rc;

  if (Serial.available() > 0) {
    rc = Serial.read();

    if (rc != endMarker) {
      receivedChars[ndx] = rc;
      ndx++;
      if (ndx >= numChars) {
        ndx = numChars - 1;
      }
    }
    else {
      receivedChars[ndx] = '\0'; // terminate the string
      ndx = 0;
      newData = true;
    }
  }
}

void showNewNumber() {
  if (newData == true) {
    dataNumber = 0;             // new for this version
    dataNumber = atoi(receivedChars);   // new for this version
    Serial.print("This just in ... ");
    Serial.println(receivedChars);
    Serial.print("Data as Number ... ");    // new for this version
    Serial.println(dataNumber);     // new for this version
    newData = false;
    // convertieren
    if (dataNumber > 100) dataNumber = 100;
    int pwm = dataNumber * 255 / 100;
    Serial.print("converted ... ");
    Serial.println(pwm);
    // ausgeben
    analogWrite(ledPin, pwm);
  }
}
1 Like