Ich wünsche einen angenehmen Abend!
Ich habe mir ein neues Projekt vorgenommen, welches mich nun bereits einige Nächte beschäftigt.
Das Ansteuern von Servo-Motoren mit einem Potentiometer über das Raspberry.
Zum umwandeln der analogen Signale in digitale Signale verwende Ich dieses Kerlchen: http://www.conrad.de/ce/de/product/…t=detview1&rb=1
Ein Script, mit welchem Ich die Signale einlese und per "Print" Befehl in Python ausgeben kann, habe Ich bereits geschrieben.
Mein Problem ist nun, dass Ich es einfach nicht schaffe, den Servo mit diesen Signalen zu steuern.
Hier mein Script:
---------------------------------
[font="Menlo"]import time[/font]
[font="Menlo"]import RPi.GPIO as GPIO[/font]
[font="Menlo"]import os[/font]
[font="Menlo"]GPIO.setmode(GPIO.BCM)[/font]
[font="Menlo"]GPIO.setwarnings(False)[/font]
[font="Menlo"]SERVO_MAX = 14.5[/font]
[font="Menlo"]SERVO_MIN = 2.5[/font]
[font="Menlo"]GPIO.setup(4, GPIO.OUT)[/font]
[font="Menlo"]p = GPIO.PWM(4, 50)[/font]
[font="Menlo"]p.start(2.5)[/font]
[font="Menlo"]HIGH = True [/font]
[font="Menlo"]LOW = False[/font]
[font="Menlo"]def getAnalogData(adCh, CLKPin, DINPin, DOUTPin, CSPin):[/font]
[font="Menlo"] GPIO.output(CSPin, HIGH)[/font]
[font="Menlo"] GPIO.output(CSPin, LOW)[/font]
[font="Menlo"] GPIO.output(CLKPin, LOW)[/font]
[font="Menlo"] cmd = adCh[/font]
[font="Menlo"] cmd |= 0b00011000[/font]
[font="Menlo"] for i in range(5):[/font]
[font="Menlo"] if (cmd & 0x10 [/font]
[font="Menlo"] GPIO.output(DINPin, HIGH)[/font]
[font="Menlo"] else:[/font]
[font="Menlo"] GPIO.output(DINPin, LOW)[/font]
[font="Menlo"] GPIO.output(CLKPin, HIGH)[/font]
[font="Menlo"] GPIO.output(CLKPin, LOW)[/font]
[font="Menlo"] cmd <<= 1[/font]
[font="Menlo"] adchvalue = 0[/font]
[font="Menlo"] for i in range(11):[/font]
[font="Menlo"] GPIO.output(CLKPin, HIGH)[/font]
[font="Menlo"] GPIO.output(CLKPin, LOW)[/font]
[font="Menlo"] adchvalue <<= 1[/font]
[font="Menlo"] if(GPIO.input(DOUTPin)):[/font]
[font="Menlo"] adchvalue |=0x01[/font]
[font="Menlo"] time.sleep(0.05)[/font]
[font="Menlo"] return adchvalue[/font]
[font="Menlo"]CH = 0[/font]
[font="Menlo"]CLK = 18[/font]
[font="Menlo"]DIN = 24[/font]
[font="Menlo"]DOUT = 23[/font]
[font="Menlo"]CS = 25[/font]
[font="Menlo"]GPIO.setup(CLK, GPIO.OUT)[/font]
[font="Menlo"]GPIO.setup(DIN, GPIO.OUT)[/font]
[font="Menlo"]GPIO.setup(DOUT, GPIO.IN)[/font]
[font="Menlo"]GPIO.setup(CS, GPIO.OUT)[/font]
[font="Menlo"]while True:[/font]
[font="Menlo"]------ ab hier (Bis zur nächsten [/font][font="Menlo"]Markierung) habe Ich einen Schnipsel, welchen Ich verwenden kann/könnte oder auch nicht. Damit müsste es eigentlich machbar sein, doch reichen meine Kenntnisse dafür noch nicht ganz aus. [/font]
[font="Menlo"] p = getAnalogData(CH, CLK, DIN, DOUT, CS)[/font]
[font="Menlo"] if lastp != p:[/font]
[font="Menlo"] val = (1023 - pot) * (SERVO_MAX - SERVO_MIN) / 1024 + SERVO_MIN[/font]
[font="Menlo"] pot.setp(0, 0, val)[/font]
[font="Menlo"] lastp = p[/font]
[font="Menlo"]------[/font]
[font="Menlo"] print getAnalogData(CH, CLK, DIN, DOUT, CS)[/font]
[font="Menlo"]---------------------------------[/font]
Der Servo (Modelcraft Y-3009) ist an Pin 7 (GPIO 4) angeschlossen.
Mit Strom wird das ganze (noch) über den Pi versorgt.
Als Sprache wollte Ich auch weiterhin Python(2.7) verwenden
Meine Frage lautet nun, ob mir jemand dabei aushelfen könnte.
Oder zumindest Tipps geben könnte, da Ich immerhin auch selbst daran arbeiten und auch lernen möchte.
Vielen Dank schon einmal im Voraus!