Hallo zusammen. Ich habe ein Problem mit meinem Arduinocode. Kurz zu dem Hintergrund. Ich möchte mit dem Arduino eine LED Dimmen. Ich habe zwei Touchsensoren an PIN 5 und 6 angeschlossen. Die LED habe ich an pin 6 mit Vorwiderstand angeschlossen. Den einen Touchsensor möchte ich benutzen um die LED heller zu machen und den anderen zum dunkler machen. Dann möchte ich noch überprüfen ob der PWM wert 0 unterschreitet oder 255 überschreitet. Entweder soll die LED dann aus gehen oder maximal leuchten. Berühre ich beide Sensoren soll die LED aus gehen. Mein Problem ist das die LED nicht auf die Sensoren reagiert und Sie nur in regelmäßigen Abständen blinkt, etwa nach einem Programmdurchlauf. Wie an der Datei zu erkennen ist, ist dies die Version 19 und ich bin frustriert. Ich hoffe es kann mir jemand helfen. Vielen Dank.
:
Verschoben durch Moderator
Formatiere den Quelltext ordentlich, dann mag ich ihn mir anschauen. Vermutlich siehst du dann deinen Fehler selbst schon.
Marcel L. schrieb: > Wie an der Datei zu erkennen ist, ist dies die Version 19 .... und wie deine Schaltung aussieht müssen wir auch noch sehen. Wenn wir dir helfen sollen .... z.B. kann hier keiner hellsehen wie dein "Tocuhsensor" aussieht.
Du hast dich wohl sehr darum bemüht, den Quelltext unlesbar zu machen. Kein Wunder, dass du den Fehler selbst nicht siehst. Mache folgendes: - Richtig formatieren (Strg-T) - Aussagekräftige Variablen Namen benutzen - Konstanten groß schreiben und #define benutzen (z.B. #define LED 2) Dann musst du hinter "pinMode (l, OUTPUT);" auch nicht noch extra kommentieren, dass es dort um die LED geht. > digitalWrite (l, +50); > digitalWrite (l, -50); digitalWrite() erwartet HIGH oder LOW als parameter. Du wolltest vielleicht PWM mit analogWrite() nutzen. Aber da müssen alle Werte positiv sein. Was du da eigentlich machen willst, ist eine weitere Variable um +50 erhöhen oder verringern und die dann mit analogWrite() ausgeben. Aber l solltest du auf keinen Fall verändern, denn das ist doch die Pin-Nummer der LED. Du willst ja nicht die LED einem anderen Pin zuordnen! > if (digitalRead (th = tl) == HIGH); Hier vielleicht nochmal die Grundlagen der Programmiersprache lernen. Mit "th=tl" änderst du den Wert von th auf 6 (weil tl den Wert 6 hat). Dann liest du Pin 6 ein und vergleichst das mit HIGH. Leis nochmal nach, wo der Unterschied zwischen "=" und "==" ist und sei dir darüber im Klaren, dass du zweimal digitalRead() benutzen musst, um zwei Pins zu lesen.
Ich habe noch einen Tipp für dich: Fange einfacher an. Reduziere das Programm auf einen Touch-Sensor, mit dem man die LED heller machen kann. Lass die beiden anderen Funktionen (dunkler machen und aus schalten) erst mal weg.
Wie ein if-Statement auszusehen hat, damit es so funktioniert, wie du dir das gedacht hast, solltest du auch noch mal in einem C-Grundlagenbuch nachschlagen.
Die PWM heißt bei Arduino analogWrite(). https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/
Vielen Dank für die Schnellen Antworten. Ich werde mich die Tage mal an den Code setzen und den die vielen Ratschläge beherzigen. Im Anschluss gebe ich Rückmeldung was daraus geworden ist. Noch mal vielen Danke.
Vielen dank noch mal für die Hilfe, ich habe den Code jetzt hinbekommen. Ich habe den fertigen Code angehängt falls es noch andere gibt die ähnliche Projekte realisieren möchten. Ich habe auch einen Fehler in der Verdrahtung gefunden. Aus irgend einen Grund mag der Arduino es nicht das die Sensoren separat mit Spannung versorgt werden. LG Marcel
Leider hast du aus den zahlreichen Informationen nichts gelernt. Deinen Sketch mag sich immer noch keiner richtig durchlesen, da jegliche Formatierung fehlt. Schade dass du die wichtigen Tipps nicht annimmst. So ist es jedenfalls ein schlechtes Beispiel.
Marcel L. schrieb: > Ich möchte mit dem Arduino eine LED Dimmen. LED Fading berücksichtigt? https://www.mikrocontroller.net/articles/LED-Fading so könnte das (Beispiel) werden:
1 | #define TS_HELL_PLUS (p.y>=0 && p.y<32 && p.x<40 && hell<MAX_HELL)
|
2 | #define TS_HELL_MINUS (p.y>=0 && p.y<32 && p.x>=200 && hell>MIN_HELL)
|
3 | |
4 | void tft_hell(uint8_t m_hell, uint8_t he) { |
5 | //char tmp[
|
6 | tft.setTextSize(SMALL_TEXT); tft.setCursor(0, 8); tft.setTextColor(ILI9341_BLACK); tft.print((m_hell+1)*10); tft.print(F("%")); |
7 | tft.setCursor(0, 8);tft.setTextColor(ILI9341_WHITE);tft.print((he+1)*10);tft.print(F("%")); |
8 | analogWrite(BACKLICHT, pwmtable_8C[he]); Serial.print(F("hell= "));Serial.print((he+1)*10);Serial.println(F("%")); |
9 | delay(200); |
10 | } // if( TS_HELL_PLUS ) |
11 | |
12 | void _ts_h_plus(void) { |
13 | if(hell<MAX_HELL) |
14 | { merke_hell=hell; hell++; tft_hell(merke_hell, hell); |
15 | } // if(hell<MAX_HELL) |
16 | }
|
17 | void _ts_h_minus(void) { |
18 | if(hell>MIN_HELL) |
19 | { merke_hell=hell; hell--; tft_hell(merke_hell, hell); |
20 | } // if(hell>MIN_HELL) |
21 | }
|
22 | |
23 | // in main loop
|
24 | if(!ts.bufferEmpty()) { // touch receive? |
25 | p = ts.getPoint(); // Retrieve a point |
26 | p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width()); p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height()); // map to tft touch size |
27 | tft_prt_x_y(p.x, p.y); // in screen.ino -> print koordinates right lower corner |
28 | |
29 | if( TS_HELL_PLUS ) // #defined in ts_touch.h |
30 | _ts_h_plus(); // in screen.ino |
31 | if( TS_HELL_MINUS ) // #defined in ts_touch.h |
32 | _ts_h_minus(); // in screen.ino |
33 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.