1 pièce(s) jointe(s)
Comment exécuter une partie de script avec un autre script
Bonsoir à tous,
Je suis en train de réaliser un projet à base de raspberry pi 3 et d’une carte Stepper Motor HAT, qui permet d’ajouter jusqu’à 4 moteurs à courant continu et 4 servo. (descriptif en PJ)
Pour faire fonctionner ce petit monde j’utilise Domoticz. Un logiciel de domotique qui gère l’activation des scripts python selon l’activation de capteur et ça marche très bien.
MAIS, j’ai un problème pour faire fonctionner mon moteur CC et les servos en même temps.
Je ne peux pas exécuter le script moteur et servo en même temps, car lors de l’exécution il réinitialise l’adresse I2C, ce qui a pour conséquence de couper le script en cours.
Ce qu’il fraudrait c’est d’exécuter un script en arr!ère plan qui serait toujours actif avec les différentes commandes du servo et du moteur, et un autre script qui viendrait dire au script actif,
lance la partie moteur et ou servo.
Voici le script test qui intègre la bibliothèque du moteur et du servo qui permet de lancer les deux en même temps sans coupure.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #!/usr/bin/python
from Raspi_MotorHAT import Raspi_MotorHAT, Raspi_DCMotor
from Raspi_PWM_Servo_Driver import PWM
import time
# create a default object, no changes to I2C address or frequency
mh = Raspi_MotorHAT(addr=0x6f)
pwm = PWM(0x6f)
servoMin = 150 # Min pulse length out of 4096
servoMax = 600 # Max pulse length out of 4096
def setServoPulse(channel, pulse):
pulseLength = 1000000 # 1,000,000 us per second
pulseLength /= 60 # 60 Hz
print "%d us per period" % pulseLength
pulseLength /= 4096 # 12 bits of resolution
print "%d us per bit" % pulseLength
pulse *= 1000
pulse /= pulseLength
pwm.setPWM(channel, 0, pulse)
pwm.setPWMFreq(60) # Set frequency to 60 Hz
while (True):
# Change speed of continuous servo on channel O
pwm.setPWM(0, 0, servoMin)
time.sleep(1)
pwm.setPWM(0, 0, servoMax)
time.sleep(1)
################################# DC motor test!
myMotor = mh.getMotor(3)
#Initialise le moteur en marche avant
myMotor.run(Raspi_MotorHAT.FORWARD);
#Demarre le moteur a la vitesse 70 a 255
if (True):
for i in range(70,255):
myMotor.setSpeed(i)
time.sleep(0.02) |
Est-il possible de faire ce genre de chose en faisant appelle aux variables ou à d’autre fonctions.
Votre aide me serait d’un grand secours.
Si vous avez besoin de plus de précision n’hésitez pas.
En vous remerciant par avance et espérant trouver une solution à mon problème.
Bonne soirée.