[Python-es] Control de tiempo entre conmutaciones de 0 y 1
Carlos Zuniga
carlos.zun en gmail.com
Mar Mar 21 16:07:52 EDT 2017
2017-03-20 23:05 GMT-05:00 Rolando Paz <flxpaz en gmail.com>:
> Hola a todos de nuevo...
>
> Ahora regreso con un pequeño código:
>
> import time
>
> start_time = time.time()
> #tiempo total en segundos, como ejemplo 10.
> tiempo_total = 10
> #numero de conmutaciones generadas, como ejemplo 4.
> conmutaciones = 4
> for offset in range(tiempo_total):
> while (time.time() - start_time) < offset:
> time.sleep(0.01)
> #lo siguiente realiza una conmutacion entre 0 y 1.
> count = 0
> for i in range(conmutaciones):
> count = (count + 1) % 2
> print count
>
> Lo que hace este código es conmutar entre 0 y 1, tantas veces como se defina
> en "conmutaciones", durante el tiempo establecido en "tiempo_total".
>
> La salida es la siguiente.
>
> 0
> 1
> 0
> 1
>
> Estoy tratando de entender cómo usar este código para controlar los tiempos
> que se definen en la imagen adjunta, es decir:
>
> T1 = tiempo durante el cual la conmutacion es 1
> T0 = tiempo durante el cual la conmutacion es 0
> Tiempo Total = tiempo total de las conmutaciones
>
> Agradecería cualquier comentario sobre como poder controlar los tiempos
> anteriores.
>
Tu intención es que espere un tiempo tras cada print de 0 o 1? o que
imprima 0/1 4 veces y luego esperar?
import time
from itertools import cycle
conmutador = cycle((0,1))
tiempo_total = 10
conmutaciones = 4
start = time.time()
end = start + tiempo_total
time_per_pulse = tiempo_total / conmutaciones
while end > time.time():
pulse_start = time.time()
print(next(conmutador))
pulse_end = time.time()
time.sleep(time_per_pulse - (pulse_end - pulse_start))
Ahora, time.sleep no es exacto, el tiempo va a ser normalmente mayor
al que especificas, depende del sistema. También hay
threading.Event.wait que puede ser más exacto.
Saludos
Más información sobre la lista de distribución Python-es