das heißt nun du schickst nicht mehr 0 bis 100 sonder a bis e?
Wenn das für dich akzeptabel ist, dann markiere die Lösung von xy als Lösung.
Dann kann hier zugemacht werden.
Es kommt doch entweder ein Byte oder -1, wenn keine Daten vorhanden, oder klemmt es jetzt bei mir. (Um die -1 abzubilden bräuchte es einen signed int, aber doch nicht für die Nutzdaten.)
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);
}
}
ich hab mich gestern die ganze Zeit beschäftigt, mit dem (Case-Switch) Funktion und das war sehr Interssant....
Vielen Dank für den Tipp, der mich sehr geholfen hat
Ich wollte euch berrichten, was ich gefunden habe, vielleicht wäre das für euch auch Interssant @J-M-L
diese Code hat funktioniert. Ich habe das für meinem Fal geändert. D.H:
Ich habe einfach nur 5 Cases von 0 bis 5.
Wenn ich 1 eingebe bekomme ich 0,5 volt (25%)
Wenn ich 2 eingebe bekomme ich 1 volt (50%) usw..
0 ist ausschalten
aber das Problem war, wenn ich 1 eingebe mancmal reagiert nicht ich muss 2 oder 3 mal eingeben!! als die Sync. stimmt nicht so gut!! Ich habe die Baud Rate auf 115200 gesteigert!! es hat nicht richtig geholfen
@my_xy_projekt
diese Code hat auch funktioniert, aber
wenn ich b eingebe, bekomme ich 0,4 Volt
wenn ich c eingebe, bekomme ich 0,6 Volt
wenn ich d eingebe, bekomme ich 0,9 Volt
wenn ich e eingebe, bekomme ich 2 Volt!!!!!
a war auschalten.... das war für mich überhaupt unlogisch
Aber diese Code hat kein Sync. Problem, D.H: die LED reagiert sehr schnell, wenn ich einen Befehl gebe.
Naaa...
Das ist ein PWM-Signal. Da einfach mit nem Voltmeter ranzugehen macht keinen wirklichen Sinn... https://www.arduino.cc/reference/de/language/functions/analog-io/analogwrite/
Wennn Dir die Werte nicht passen, musst Du die ändern.
64 für 25%, 128 für 50% 192 für 75%, 255 für 100
Aus machste nicht mit 0 sondern mit digitalWrite(pin, LOW).
Was aber das gleiche ist , analogWrite(pin,0) wird intern in digitalWrite(pin, LOW). umgesetzt,
Ebenso wird analogWrite(pin,255) zu digitalWrite(pin, HIGH).
Das muss man nicht selbst beachten.
Sachen gibts,
hab da auch schon ewig nicht mehr reingesehen (wiring_analog.c)
void analogWrite(uint8_t pin, int val)
{
// We need to make sure the PWM output is enabled for those pins
// that support it, as we turn it off when digitally reading or
// writing with them. Also, make sure the pin is in output mode
// for consistenty with Wiring, which doesn't require a pinMode
// call for the analog output pins.
pinMode(pin, OUTPUT);
if (val == 0)
{
digitalWrite(pin, LOW);
}
else if (val == 255)
{
digitalWrite(pin, HIGH);
}
else
{
auch dass da ein pinMode gesetzt wird, hatte ich auch nicht mehr am Radar...