Hallo Bodo,
ich kenne mich mit Arduino-Boards selbst jetzt nicht so gut aus, aber der Timer1 scheint zumindest bei "Timer1.pwm(9, 512);" doch schon von "Timer1.attachinterrupt(callback);" in Benutzung zu sein?! Alternative mal prüfen ob es einen anderen Timer gibt der eine der beiden Funktionen auch ausführen kann.
Wenn man Anfänger ist wäre meine Empfehlung nicht gleich mit einem derartige Code anzufangen der möglicherweise eine Mehrfachnutzung eines Timers benutzt, die man ggf noch nicht nachvollziehen kann.
Wenn man rumprobiert mit der gesamt Systemlaufzeit ( currentMillis ) und irgednwann alles durcheinander ist, dann kann es helfen einen kompletten loop-Block dafür anzulegen und dann durch auskommentiren ganzer loop-Blöcke (siehe unten) zu arbeiten.
Es sieht sehr nach zusammenkopiertenm Code aus. Zumal der Programmierstil echt unterirdisch ist und man wirklich nur schwer lesen kann. Sorry.
Was sollen diie ganzen Sternchen da? Ist dir bewußt dass des " * "-Symbol auch ein Programierelement von C ist.
Neben der mathematishcen Bedeutung vom " * ", wird der u.a. noch bei "Zeigern" benutzt. Dazu kommt das man damit ganze Codeblöcke (unter bestimmten Bedingungen ) auskommentieren kann. Es Ist also nicht nötig jede Zeile mit " // " rauszunehmen, hier bietet sich ein " /* bzw */ " an, womit der umschliessende Code auskommentiert wird. Also so: /* Code der auskommentiert werden soll */ .
Dazu schaut man sich am besten einen Tutoriel wie dieses Hier bei You Tube an (klick mich). Hier habe ich grade sogar noch was gelernt
Für Codeeinrückungen bietet sich die Tab " ->| " an - kann man auch zweimal drücken um mehr einzurücken oder man stellt die Einstellungen so um das gleich mehr eingerückt wird.
Da die LED als Hardware-Interrupt programmiert ist, blinkt sie eben auch wenn "das Programm durchlaufen" ist. Hierzu muss man sagen dass das Programm nur im Ablauf durch Deine Eingaben abgezweigt wird. Das Programm selbst läuft immer in der loop - solange ausreichend Spannung vorhanden ist.
Um das abzustellen ist es nötig den Interrupt mit einem Ereignis innerhalb der loop zu verbinden welches die Blink-Bedingung auslöst oder anhält.
Das Seilwindenproblem entsteht vermutlich ganz genau wie Du schon sagst wegen den ganzen Delays. Wird der Arm jetzt per RC-Fernsteuerung auch mit Knüppel gesteuert oder nur per Taster an/aus auf der Fernsteuerung?
Viele Grüße
Jörg
Lesezeichen