ich habe vor ein Projekt zu bauen bei dem ich die hier verwende.
vom Programmieren habe ich gerade einmal die Grundlagen drauf, wenn überhaupt.
Mit Bibiliotheken habe ich noch gar keine Erfahrung ( ich weiß was es ist und wofür man es nutzt), mehr aber auch nicht.
Meine Frage welche Bibiliothek brauche ich und wie bzw wo lerne ich am schnellsten welche wichtigen befehle es gibt.
ich habe einen Meter apa102 (144LED`s) hier liegen (werde sie auf 64 kürzen!?) kann ich die genauso oder zumindest ähnlich programmieren wie die ws2812 auf der Matrix ?
ich habe einen Meter apa102 (144LED`s) hier liegen (werde sie auf 64 kürzen!?) kann ich die genauso oder zumindest ähnlich programmieren wie die ws2812 auf der Matrix ?
Ja. Einfach im Setup den passenden Controller eintragen.
Ok die Bibiliothek wird ich mir mal anschauen, das Problem ist das mein Englisch nicht so sonderlich gut (reicht über Grundkenntnisse nicht hinaus) ist daher ist es immer schwierig von englischen Quellen zu lernen, wenn jemand also eine Deutsche quelle hätte wäre das super.
Wie wird das ganze an den Arduino angeschlossen ? es sind 4 Leitungen, GND und 5V sind klar dann D an einen DigitalPin aber C !?
Ich komm damit nicht weiter .. hab jetzt einiges ausprobiert das mir logisch erschien.. einmal wechselt die LED einfach die farbe wenn sie wieder von vorne los fährt das nächstemal blicken sie nur bleiben aber auf einer Position .. wäre schön wenn mir hier jemand helfen konnt nochmal zu Erklärung:
Ich möchte mehrere LED´s in einer bestimmten farbreihenfolge über den streifen wandern lassen.
Dein Dilemma steckt im delay() und der fehlenden Erkenntnis, daß loop ständig durchlaufen werden sollte. Wenn es Dir ein Trost ist, da bist Du nicht alleine: Auf Kriegsfuss mit den millis
Also delay durch millis ersetzen, nicht direkt, sondern von der Funktionalität her.
N-E-M-A-N:
okay.. das versteh ich jetzt überhaupt nicht
Da ich am besten mit einem funktionierenden Programm lerne, anbei eins, was zeigt, was ich meine.
Bitte beachte, mein LEDstreifen hängt an einem teensy 3.2 mit 62 Lichtpunkten, daher ist die Initialisierung anders. Bitte übernimm Deine Initialisierung!
Funktioniren tut es schonmal allerdings nur einmal also keine schleife.. die milibefehle versteh ich trotzdem noch nicht so ganz.. ich werd damit noch ein bisschen rumspielen und versuchen.
N-E-M-A-N:
Funktioniren tut es schonmal allerdings nur einmal also keine schleife.. die milibefehle versteh ich trotzdem noch nicht so ganz.. ich werd damit noch ein bisschen rumspielen und versuchen.
Grundlegende Zusammenhänge werden vielleicht besser verständlich wenn du aufhörst nur in "Befehlen" zu denken, sondern Operanden, Anweisungen und Funktionen unterscheidest.
+, =, && etc. sind Operanden. Die gehen in genau festgelegten Regeln mit ihren Argumenten um
for, while, if, etc. sind Anweisungen. Auch hier gilt dass genau festgelegt ist was die tun. Und wie bei Operanden kommen die von der Programmiersprache und sind Standard
millis(), delay(), addLeds(), etc. sind Funktionen. Hier wird es komplizierter. Die sind von Programmierern selbst geschrieben. Entsprechend sind sie auch dokumentiert. Entweder in der Arduino Referenz oder der Bibliothek wo sie drin stehen (wie bei FastLED).
Bei Funktionen hilft es auch sie zu analysieren: welchen Namen haben sie? Welche Parameter haben sie (sowohl Name als auch Datentyp). Welchen Datentyp hat der Rückgabewert? Aus diesen Sachen kann man oft erschließen was gemacht wird. Aber auch nicht immer.
Die millis() Thematik ist allerdings um einiges komplexer. Da kommt es eher auf den Algorithmus an wie man die Funktion verwendet.
so würde es natührlich gehen.. aber das geht doch sicherlich auch einfacher ?!
In Ergänzung zu allem bereits Gesagtem: Beim Coden von Animationen hat man 2 Herausforderungen - A) Was passiert? und B) Wann passiert es?
B) löst man wie beschrieben am besten mit millis().
A) hat 2 Antworten - entweder man kann es in einer Formel ausdrücken, oder man muss die einzelnen Schritte der Sequenz abspeichern - was Du im Prinzip getan hast, nur etwas unelegant. Ist aber am Anfang egal, Hauptsache, es funktioniert.
Wenn Du Dich mal mit Arrays beschäftigst, wirst Du bessere Ideen bekommen.
Der Königsweg sind natürlich immer Formeln - fang mal mit einem einfachen einfarbigen Lauflicht an, das geht mit einer For-Schleife und 3 Zeilen Code in der Schleife.
@agmue danke für den Code habe leider immernoch nicht ganz verstanden wie die milli Funktion Funktioniert ... wie kann ich das denn am einfachsten verstehen lernen ? am besten auf deutsch da mein englisch nicht so besonders gut ist.
@Serenifly ich nenne zwar alles Befehl aber mir ist schon klar das es unterschiede gibt und auch in etwa worin diese liegen.
@Helmuth Ich habe mal versucht dein Einfarbigeslauflicht mit der for schleife und einer LED. wäre das so denn dann richtig oder gibt es auch hier noch eine bessere Methode ?
oder war das anders gemeint ?!
Ja, so meinte ich das. Du hast das Konzept verstanden - darauf kannst Du jetzt aufbauen.
FastLED.show(10);
Kenne ich nicht. Wofür steht die 10?
FastLED.show(); reicht.
Die Sache mit den millis() wurde hier mal sehr schön anhand eines Wachmanns mit Laufzettel erklärt - aber ich finde den Link gerade nicht. Vielleicht kann jemand aushelfen?!
Helmuth:
Die Sache mit den millis() wurde hier mal sehr schön anhand eines Wachmanns mit Laufzettel erklärt - aber ich finde den Link gerade nicht. Vielleicht kann jemand aushelfen?!
Zunächst werden goMillis und aktMillis gleichgesetzt. Während goMillis unverändert bleibt, wird millis() und damit aktMillis vom System (Timer) inkrementiert. Irgendwann hat sich aktMillis soweit von goMillis entfernt, daß goIntervall den Unterschied ausmacht, also (aktMillis - goMillis >= goIntervall) wahr wird. Dann werden wieder goMillis und aktMillis gleichgesetzt und es beginnt von vorne.
@agume danke den link in #7 habe ich auch gesehen aber trotzdem nicht verstanden.. bis zu deinem Wachman link bin ich dann gar nicht gekommen.
wie die millis funktionieren weiss ich auch ich denke bei vielen "befehlen" (ich nenne sie jetzt mal wieder so ..) fällt es mir schwer sie richtig zu benutzen weil ich nicht genau weiss welcher was tut, könnte evtl. auch daran liegen das mein englisch nicht so toll ist und mir der Name daher schon gar nichts sagt ?!
villeicht kann mir ja jemand erklären welche zeile genau was bewirkt.. hier mal ein fertiger, funktionierender Sketch:
jetzt nochmal der selbe Sketch aber nur die zeilen die was mit dem milli zu tun haben ?!
unsigned long aktMillis, verzMillis, intervall = 100;
unsigned int ind;
bool initalisierung = true;
void setup() {
}
void loop() {
aktMillis = millis();
if (initalisierung) {
initalisierung = false;
ind = 0;
}
if ((aktMillis - verzMillis > intervall) && (ind < NUM_LEDS)) {
verzMillis = aktMillis;
for (byte k = 5; k > 0; k--) {
if (ind + k < NUM_LEDS) {
leds[ind + k] = leds[ind + k - 1];
}
}
leds[ind] = CRGB::Black;
ind++;
Serial.print("ind: ");
Serial.println(ind);
if (ind >= NUM_LEDS) {
initalisierung = true;
}
}
}
die Serial.print() sollte mir villeicht auch nochmal jemand genau erklären haben die in dem fall eine Funktion bzw sind sie wichtig damit das Programm läuft oder nicht ?