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);
}
}