Hallo zusammen,
ich bin eigentlich Modellbauer und versuche nun neben dem Beruf, der
Familie und dem Hobby Modellbau, einen Arduino zu programmieren.
Es fällt mir extrem schwer, aber ich bin immerhin soweit, einen Arduino
mit einem TLC zu koppeln und den einiges machen zu lassen.
Aber in meinem momentanen Sketch klemmt es. Per Eingabe teste ich
gerade, wie ich verschiedene PRogrammabläufe auslösen kann. Im diesem
Fall sollte eigentlich nach Eingabe "c" das ledPins-Array blinken. Macht
es aber nicht, sondern es leuchten alle Leds in dem Array stupide vor
sich hin. Wo ist der Fehler und kann mir jemand einen Tipp geben?
//import TLC libraries
#include "Tlc5940.h"
#include "tlc_fades.h"
int ledPins[] = {0,1,2};
int pinCount = 4;
int max = 100;
void setup()
{
// start communication with TLC chip
Tlc.init();
Serial.begin(9600);
}
TLC_CHANNEL_TYPE channel;
void loop(){
Tlc.clear();
if (Serial.available() > 0) {
int input1 = Serial.read();
switch (input1) {
case 'a':
Serial.println("a");
Tlc.set(3,4000);
Tlc.update();
break;
case 'b':
Serial.println("b");
Tlc.set(3,500);
Tlc.update();
break;
case 'c':
ledBlink();
Serial.println("Blinker");
break;
}
}
//delay(1);
}
void ledBlink(void){
Tlc.clear();
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
Tlc.set (ledPins[thisPin], max);
uint16_t duration = 150;
uint32_t startMillis = millis()+ 2000;
uint32_t endMillis = startMillis + duration;
tlc_addFade(ledPins[thisPin], 4095, max, startMillis, endMillis);
tlc_updateFades();
Tlc.update();
}
}
Gast
#3058856
Christian B. schrieb: > int ledPins[] = {0,1,2}; > int pinCount = 4; > for (int thisPin = 0; thisPin < pinCount; thisPin++) { > Tlc.set (ledPins[thisPin], max); ledPins[3] existiert nicht! out-of-bound-access
Ich hab das mal so korrigiert:
ledPins[]={2,3,4}
pincount = 3
aber dennoch passiert nach Eingabe von c nichts, ausser das die 3 Pins
leuchten. Die Fades werden nicht beachtet.
Gast
#3059326
Du definierst zwar die Fades nutzt sie aber nicht.
Versuche mal folgendes:
in der Funktion ledBlink die Befehle
tlc_updateFades();
Tlc.update();
entfernen
in der Loop die Befehle um das Delay setzen
tlc_updateFades();
delay(25);
Tlc.update();
Es scheint so als müsssen die gesetzten Fades per tlc_updateFades
innerhalb der Loop aufgerufen werden.
Gast
#3059327
Dann ist wohl das "klassische" Debuggen angesagt. Hinter jder Zeile ein print(), um zu sehen, wo der Computer überhaupt ist. Und die wichtigsten Variablen mit in das print().
Gast
#3059351
Bitte auch "Tlc.clear();" in der Loop entfernen. Das schaltet alle LED aus. Wird aber bisher nicht wirksam, weil das Tlc.update() fehlte ...
dann passiert: es blitzt jede led und dann ledPins einmal kurz,
Gast
#3059674
Christian B. schrieb: > ledPins[]={2,3,4} > pincount = 3 Mach dir das Leben einfach... pincount=sizeof(ledPins)/sizeof(int);
danke für den Tipp. aber es ändert leider nicht die Tatsache, dass void ledBLink(void) nur einmal ausgeführt wird. Ich müsste wohl irgendwo sagen "mach ledBlink solange, bis Serial.read was anderes macht. Aber ich habe keine Ahnung, wie das genau geht
Gast
#3059927
deine Antwort scheint plausibel.
Die Zeit zwischen max und min ist 150 ms.
Das wird man nur als Aufblitzen wahrnehmen.
Mit einem Wert von 5000 kann man das Verhalten sicher besser
beobachten...
Wie läßt sich dein Wunsch umsetzen ...
relativ simpel ... die Funktion muß in die Loop.
Zwei Variablen
FadeAktiv 0/1 nicht aktiv / aktiv
FadeArt 0/1 max zu min / min zu max
Innerhalb des "case 'c':" wird die Variable FadeAktiv invertiert.
Jede Eingabe von 'c' schaltet damit zwischen an/aus um.
Ausserhalb, aber innerhalb der Loop und nach
"if (Serial.available() > 0) { }", wird abgefragt of FadeAktiv <> 0
ist.
Innerhalb dieser Abfrage wird noch die Richtung abgefragt (FadeArt) und
die min max Werte entsprechend gesetzt.
Ob der FadeVorgang abgeschlossen ist zeigt der Rückgabewert von
"tlc_updateFades();" ...
ist nur ein grober Überblick ... aber so kann man es lösen
Ich habe jetzt lange herumgedoktort und warum es jetzt klapp, kann ich garnicht genau sagen. Woran es jetzt noch hängt ist, dass das Blinken beim Wechsel zwischen Mode 1 und 4 manchmal zufällig wird. Doppelblitzer oder nicht alle ledPins machen mit. Hier mal der aktuelle Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
Gast
#3064518
Christian B. schrieb: > Hier mal der aktuelle Code: Danke!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.