Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// partage de liens //// une carte des membres//// (apéros) codelab


#1 2016-09-26 10:56:59 Librairie pour faire des rampes / automation

reno-
membre
Date d'inscription: 2010-01-12
Messages: 113

Librairie pour faire des rampes / automation



Bonjour à tous,

Je me demandais s'il y avais une librairie pour effectuer des rampes / automations en python.

Je pensais à une librairie en C afin d'avoir un maximum d'optimisation en terme de processeur.

J'ai essayé une bidouille en python, mais ca m'a pas l'air sérieux du tout… donc je me dis qu'il y a quelque chose qui doit exister.

une idée?

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import threading
from time import sleep
import datetime

class Ramp(threading.Thread):
    """Instanciate a thread for Playing a ramp
    Allow to do several ramps in a same scenario"""
    def __init__(self, origin, args):
        threading.Thread.__init__(self)
        self.args = args
        self.origin = origin
        self.start()

    def run(self):
        print('ramp starts in ' + self.name + ' at ' + str(datetime.datetime.now()))
        index = self.args.index('ramp')
        ramp = self.args[index+1]
        ramp = int(float(ramp) * 1000)
        dest = self.args[index-1]
        value = self.origin
        delta = dest - value
        delta = float(delta)
        step = delta / ramp
        print('ramp : ' + str(ramp), 'dest : ' + str(dest), 'origin : ' + str(value), 'step : ' + str(step))
        for millisec in range(ramp):
            value += step
            sleep(0.00072)
            print(value)
        print('ramp ends in ' + self.name + ' at ' + str(datetime.datetime.now()))

val = Ramp(1.0, [0.0, 'ramp', 1])

Hors ligne

 

#2 2017-01-17 13:28:30 Re : Librairie pour faire des rampes / automation

reno-
membre
Date d'inscription: 2010-01-12
Messages: 113

Re: Librairie pour faire des rampes / automation



Merci @avilleret pour ton aide hors-forum.
Voici la réponse à ma question…

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import threading
import time
import datetime

current_milli_time = lambda: time.time() * 1000

class Ramp(threading.Thread):
    """Instanciate a thread for Playing a ramp
    Allow to do several ramps in a same scenario"""
    def __init__(self, origin, args):
        threading.Thread.__init__(self)
        self.args = args
        self.origin = origin
        self.start()

    def run(self):
        print('ramp starts in ' + self.name + ' at ' + str(datetime.datetime.now()))
        index = self.args.index('ramp')
        ramp = self.args[index+1]
        ramp = int(float(ramp) * 1000)
        dest = self.args[index-1]
        value = self.origin
        index = self.args.index('grain')
        grain = float(self.args[index+1])
        step = float( (dest - value) / ( float(ramp / grain) ))

        print('ramp : ' + str(ramp), 'dest : ' + str(dest), 'origin : ' + str(value), 'step : ' + str(step) + ' grain: '+ str(grain))
        start = current_milli_time()
        last = start

        print(value) # print the first ValueError(" error")
        while (current_milli_time() < (start + ramp)):
            while (current_milli_time() < last + grain):
                pass # wait
            last = current_milli_time()
            value += step
            print(value)
        print('ramp ends in ' + self.name + ' at ' + str(datetime.datetime.now()))

val = Ramp(1.0, [0.0, 'ramp', 1, 'grain', 50])

Dernière modification par reno- (2017-01-17 13:28:55)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2017