hallo liebes forum, ich habe ein problem mit einer servo-steuerung über arduino. über zwei potentiometer soll ein servo gesteuert werden. ein poti ist für die stellung des servos, der zweite poti realisiert eine "shutter"-funktion, also der servo bewegt sich von seiner ausgangsstellung 30° nach links und wieder zurück. über den poti wird die geschwindigkeit dieser bewegung gesteuert. (ca. von 0/min bis 20/min) mein programm dazu ist vielleicht nicht das schönste und schlankeste, funktioniert jedoch eigentlich. es hatte den makel, dass das einlesen des poti-wertes über analogRead schwankende werte liefert und der servo damit etwas zuviel hin- und herspringt. um dieses problem zu beseitigen, wollte ich neben einer hysterese die werte des potis 10x hintereinander einlesen lassen und dann mitteln. und da sitze ich jetzt seit stunden vor und komm nicht weiter: mein programm liefert mir zu jedem zeitpunkt (über serielle ausgabe tausendfach gegengecheckt) für alle größen die richtigen werte; also die stellung der potis werden zu jedem zeitpunkt richtig erkannt; die berechnungen kommen hin; das programm hängt sich nicht auf, sondern liefert stets alles so, wie es sein soll. jedoch: der servo bewegt sich nicht - kein mucks zu hören oder zu sehen. nehme ich hingegen im code das zehnmalige auslesen und mitteln des poti-wertes weg, stellt sich der motor, wie er soll (dann machen aber die schwankenden poti-werte probleme...) nun habe ich gesucht und wenig gefunden; ein delay hinter analogRead bringt nichts. vermutlich hat es was mit der größe des potis zu tun (180k)..? aber wenn das der grund sein soll, verstehe ich nicht, warum ich mir meine werte direkt vor und nach dem befehl myservo.write() ausgeben lassen kann, und sie immer stimmen, der motor sich mit diesen werten jedoch nicht bewegt. wie gesagt, kürze ich die mittelung raus, funktioniert es. und die mittelung funktioniert auch... weil es im gleichen aufbau mit weniger analogRead alles klappt, schließe ich eine zu geringe stromversorgung als fehlerursache aus... über anregungen wäre ich sehr dankbar, ich versteh es einfach nicht. was macht dieses analogRead mit dem arduino? warum wäre 10k poti besser als 180k? gute nacht euch allen und danke für etwaige hilfe, carsten und ich bin noch anfänger, bitte nicht über den schlampigen code schimpfen... p.s. nochmal nachgemessen: der arduino sendet einfach kein signal am servo-pin. doch es liegt nicht am pin, der funktioniert beim servo-beispielprogramm einwandfrei...
...im quelltext muss es heißen: int pos_average[10], shut_average[10]; anstelle von int pos_average[5], shut_average[5]; aber hat mit dem problem nichts zu tun und ist generell etwas unnütz, so wie es dann im code realisiert wurde. is aber auch ncit schlimm....
Du greifst auf die arrays falsch zu. Ein Array mit n Elementen hat immer den Index 0 bis n-1. Du greifst aber auf 1 bis n zu. Das Element mit dem Index n gibt es nicht. Sollte der MC doch an diese Adresse schreiben wird die Variable die da steht überschrieben. Deine for Schleife müsste lauten
1 | for (int i=0; i<Anzahl; i++) |
Gruß JackFrost
:
Bearbeitet durch User
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.