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
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?!
Ja, Ich progrmaiere leider nicht viel.
Es hat funktoniert mit den Tastendrucker
mahmoud-alhmada:
if(button1 == HIGH){
The pushbutton code is correct
J-M-L
November 24, 2021, 10:50am
5
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..?
The Arduino programming language Reference, organized into Functions, Variable and Constant, and Structure keywords.
This example is almost what you are looking for;
Tom....
1 Like
J-M-L
November 24, 2021, 11:00am
10
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
noiasca
November 24, 2021, 11:25am
14
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
noiasca
November 24, 2021, 11:29am
17
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
mahmoud-alhmada:
einfach
einfach ist : 1 Zeichen => 1 analogWrite Ausgabe.
ganz einfach wären aufeinanderfolgende Zeichen
1 Like
vielen Dank für die Antwort
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