Arduino Tocuhsensor LED "Dimmen"

OP (Firma: PC) #6312729
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.
Angehängte Dateien:
Gast #6312748
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.
Gast #6312762
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.
OP (Firma: PC) #6331328
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
Angehängte Dateien:
Gast #6332990
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.
#6333035
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
  }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren