Forum: Mikrocontroller und Digitale Elektronik Arduino Tocuhsensor LED "Dimmen"


von Marcel L. (Firma: PC) (mk14ai)


Angehängte Dateien:

Lesenswert?

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
von Stefan F. (Gast)


Lesenswert?

Formatiere den Quelltext ordentlich, dann mag ich ihn mir anschauen. 
Vermutlich siehst du dann deinen Fehler selbst schon.

von Erschüttert (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Formatiere den Quelltext ordentlich

Das ist wirklich ein Graus.

von Erschüttert (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Georg M. (g_m)


Lesenswert?

1
int l = 2;
2
3
if (l > 255);
Wie soll es funktionieren?

von Stefan F. (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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.

von Georg M. (g_m)


Lesenswert?


von Marcel L. (Firma: PC) (mk14ai)


Lesenswert?

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.

von Marcel L. (Firma: PC) (mk14ai)


Angehängte Dateien:

Lesenswert?

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

von Brain 2.0 (Gast)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

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
Noch kein Account? Hier anmelden.