analogRead läßt servo verstummen

OP #4537442
Lesenswert?
• ▲
▼
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...
Angehängte Dateien:
#4537461
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.