Hallo in die Runde, Ich habe ein Problem. Ich habe leider ein Arduinosketch verloren, den ich jetzt neu Schreiben muss. Damals hatte ich Hilfe. Und haben eine Funktion genutzt, die sah so ähnlich aus: Int LED=3; PinMode(LED, OUTPUT); LED B|0,1,1,0,1,1,0 Dies war dann sogesehen ein Blinken ohne Delay. Irgendwo war noch festgelegt, das jeder "kommaschritt" einen eingestellten Wert hatte. Jetzt mal zb 10ms. Also war die LED 10ms aus. Dann 20ms an und wieder 10ms aus. Ich benötige diese Funktion, da der Arduino nebenbei andere Sachen machen soll. Das blinken aber beibehalten soll Diese Funktion benötige ich. Weiß weder Name noch was da noch alles zugehörte. Ich hoffe irgendjemand weiß, was ich meine und kann mir Funktiobsname oder sogar ein Beispiel schreiben. Vielen Dank und schönen Abend
:
Verschoben durch Moderator
Sowas: https://forum.arduino.cc/index.php?topic=441987.0 oder muss es P. P. schrieb: > jeder "kommaschritt" einen eingestellten Wert hatte sein? Gruss Chregu
Leider muss es mit diesen einzelnen Kommerstellen sein. Da das Blinkmuster einen ungleichen Takt hat.
P. P. schrieb: > Leider muss es mit diesen einzelnen Kommerstellen sein. Da das > Blinkmuster einen ungleichen Takt hat. Was hindert dich daran diese Funktion zu schreiben!? Bzw. was ist genau deine Frage eigentlich?
Meine Frage ist, wie sich diese gemeinte Funktion nennt. Was anderes kann und möchte ich ungern nutzen, da dieses Blinkmuster bzw verschiedene dieser Art parallel laufen könnrn und müssen. Da regelmäßig ein Wert abgefragt wird, kann es nicht zu umfangreich geschrieben werden
P. P. schrieb: > kann es nicht zu umfangreich geschrieben werden Wer hindert dich, die Funktion zu schreiben? MfG von der Spree Frank
Beitrag #6160141 wurde von einem Moderator gelöscht.
Beitrag #6160157 wurde von einem Moderator gelöscht.
Beitrag #6160174 wurde von einem Moderator gelöscht.
Beitrag #6160182 wurde von einem Moderator gelöscht.
Beitrag #6160190 wurde von einem Moderator gelöscht.
Danke für eure, leider teils sinnlosen, Kommentare. Ich bin gelernter Elektroniker. Mein Arduino ist seit der Ausbildung nur sehr eingerostet. Braucht man in den wenigstem Firmen. Array sieht sehr nach der gesuchten Funktion aus. Muss mal rumprobieren. Der Grund für diesen Weg damals war überschreiten des Programmspeicherplatzes. Am Programm hängt noch einiges mehr
P. P. schrieb: > Ich benötige diese Funktion, da der Arduino nebenbei andere Sachen > machen soll. Das blinken aber beibehalten soll dann brauchst du nen freien Timer, an den du ein Interrupt hängst. > Dies war dann sogesehen ein Blinken ohne Delay. Irgendwo war noch > festgelegt, das jeder "kommaschritt" einen eingestellten Wert hatte. > Jetzt mal zb 10ms. > Also war die LED 10ms aus. Dann 20ms an und wieder 10ms aus. also stellst du den Timer so ein dass er ca. 10ms braucht bis zum Überlauf/TOP. CTC Modus, Vorteiler anpassen, TOP setzten sodass es ca. 10ms gibt, ISR auf den Zählerüberlauf. In der ISR zählst du dann eine Variable hoch (von 0 bis array Länge-1), und schreibst dann 1 oder 0 auf den Pin, je nachdem ob im Array an der Position halt 1 oder 0 steht. Diese variable muss entweder global und volatile sein (schlechtere Variante), oder aber in der ISR definiert und static (bessere Variante). wenn die Variable > Array Länge-1, dann wird sie wieder zu null. Eine FOR Schleife, ein IF, beides mit 1-2 Zeile Code dahinter. Nimm keinen Arduino Scheiß in der ISR (Digitalwrite oder wie der bullshit heißt, dauert Ewigkeiten), sondern schreib direkt und das passende PORT Register. > Int LED=3; das soll wohl den Pin definieren, besser wäre aber direkt ins PORT Register zu schreiben (und vorher DDR zu setzen). > PinMode(LED, OUTPUT); das wird die Initialisierung sein, die den Timer startet > LED B|0,1,1,0,1,1,0 das sollte wohl mal ein Array werden, hat aber irgendwie so nicht geklappt. jetzt bist du dran, das ist ja so gut wie schon geschrieben. Wenn das Grundgerüst steht meld dich wieder, dann gibts mehr Hilfe. > Ich hoffe irgendjemand weiß, was ich meine und kann mir Funktiobsname > oder sogar ein Beispiel schreiben. Funktionsname gibts so nicht (soweit ich weiß), und schreiben werd ich dir nichts. so weit kommts ja noch, das Forum ist für Hilfe zur Selbsthilfe, nicht zum Vorkauen von 5 Zeilen einfachstem Code. P. P. schrieb: > Der Grund für diesen Weg damals war überschreiten des > Programmspeicherplatzes. Am Programm hängt noch einiges mehr welcher Speicherplatz, Flash oder RAM? Wenn das Array sehr lang ist und RAM knapp, hilft ein Progmem attribut (wirds so ähnlich auch in Arduino geben, ich kenn nur C), dann bleibt das Array im Flash und wird nicht in den RAM geladen was auch unnötig ist wenn es sich nicht ändert.
:
Bearbeitet durch User
P. P. schrieb: > Ich benötige diese Funktion, da der Arduino nebenbei andere Sachen > machen soll. Erstmal brauchst du ein vernünftiges Backup-System. Als nächstes ein Buch o.w.a.i. mit elementaren Grundlagen von C. array[] hat mit Funktionen nun wirlich nichts zu tun.
Beitrag #6160329 wurde von einem Moderator gelöscht.
Hallo, suchst du sowas ? int so_viel_wie_auch_immer = 10; // Anzahl der Sequenz (array größe) bool abfolge[so_viel_wie_auch_immer] = {0,1,1,0,1,1,0,1,1,0}; // Array das die Sequenz speichert int zeahler=-1; // zaehlvariable für array bool timer=0; // Flag wenn 10ms erreicht sind unsigned long millis_10ms = 0; // Vergleichswert für millis() void setup(){ pinMode(LED,OUTPUT); } void loop(){ if(millis()-millis_10ms>=10){ millis_10ms+=10; // erhöht den Vergleichswert um 10 timer=1; // Timer Flag, zeigt an das 10ms vorbei sind } if(timer){ // Auswertung der Flag timer=0; // Rücksetzen der Flag zaehler++; // Array Position digitalWrite(LED,abfolge[zaehler]); // Pin für LED schalten jeh nach Sequenz if(zaehler == (so_viel_wie_auch_immer-1) ) zaehler=-1; // Array auf Anfangswert setzen } } Das ist bestimmt nicht die eleganteste Methode aber da du geschrieben hast es wär ähnlich aufgebaut wie das blink without delay ist der oben stehende Code dran angelegt. Natürlich wär es besser sich mit Timer und Interrupts zu beschäftigen, aber um erstmal weiter zu kommen. Viel Spaß.
:
Bearbeitet durch User
Michael M. schrieb: > suchst du sowas ? > > int so_viel_wie_auch_immer = 10; // Anzahl der Sequenz (array größe) > ... So würde es sogar der Compiler schlucken:
1 | #define LED LED_BUILTIN
|
2 | |
3 | const int so_viel_wie_auch_immer = 10; // Anzahl der Sequenz (array größe) |
4 | bool abfolge[so_viel_wie_auch_immer] = {0, 1, 1, 0, 1, 1, 0, 1, 1, 0}; // Array |
5 | |
6 | int zaehler = -1; // zaehlvariable für array |
7 | bool timer = 0; // Flag wenn 10ms erreicht sind |
8 | unsigned long millis_10ms = 0; // Vergleichswert für millis() |
9 | |
10 | void setup() { |
11 | pinMode(LED, OUTPUT); |
12 | }
|
13 | |
14 | void loop() { |
15 | if (millis() >= millis_10ms + 10) { |
16 | millis_10ms += 10; // erhöht den Vergleichswert um 10 |
17 | timer = 1; // Timer Flag, zeigt an das 10ms vorbei sind |
18 | }
|
19 | |
20 | if (timer) { // Auswertung der Flag |
21 | timer = 0; // Rücksetzen der Flag |
22 | zaehler++; // Array Position |
23 | digitalWrite(LED, abfolge[zaehler]); // Pin für LED schalten jeh nach Sequenz |
24 | if (zaehler == (so_viel_wie_auch_immer - 1) ) |
25 | zaehler = -1; // Array auf Anfangswert setzen |
26 | }
|
27 | }
|
Also ich habe es so verstanden, das ist einfach nicht genau genug erklärt/gefragt..
1 | int led=7; |
2 | boolean ledstate=false; |
3 | int taktung[]={10,20,10,20,10,20}; |
4 | void setup() { |
5 | // put your setup code here, to run once:
|
6 | pinMode(led, OUTPUT); |
7 | }
|
8 | unsigned long lastswitch =millis(); |
9 | int steps=0; |
10 | void loop() { |
11 | // put your main code here, to run repeatedly:
|
12 | unsigned long tempmillis =millis(); |
13 | if(lastswitch+taktung[steps]>=tempmillis) |
14 | {
|
15 | ledstate=!ledstate; |
16 | lastswitch=tempmillis; |
17 | digitalWrite(led, ledstate); |
18 | if(steps<5) |
19 | steps++; else steps=0; |
20 | |
21 | }
|
22 | |
23 | }
|
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.