pythonのsleep関数の精度について質問です。
LEDを点灯させて2分後に停止するプログラムをsleep,およびtimesleepを使っておこないましたが、1分30秒くらいで止まってしまいます。
いずれは30分後に停止するとかの、プログラムをくみたいのですが、なにか精度を上げる方法はないでしょうか?
調べたところによるとOSの設定を変更すると良いとの記事もみましたが、それで精度があがるのでしたら、Linuxの設定方法のなにかしらの変更の仕方をご教授いただけないでしょうか。
宜しく御願い申し上げます
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
解決したようですが。
NTPで時刻合わせしているとかですと話は変わりますが、でない場合は基盤のclockをカウントしているので、その周波数の安定性や精度によります。発振器周りの部品の温度でも変わりますし。
ので、
私がやるとすると、
通常運転レベルに基盤が温まってから、
何回か 設定 と 実際 の値を取り、
らしき補正係数を求めて
希望時間x補正係数 で設定します
投稿2021/12/31 01:41
総合スコア23569
0
ご回答ありがとうございます!
カレンダの時刻を読んで、そこから希望の時刻に停止させればいいかと。
↑たしかにそれも一つの方法のですね!
できれば時刻を設定せずに、タイマー的な感じでテキストボックスに数字をいれて、その任意の分数後に停止させたいのですが!
いま現状、30分設定しても26分で停止してしまってます…。
index.html
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <title>WebIOPi | Light Control</title> 6 <script type="text/javascript" src="/webiopi.js"></script> 7 <script type="text/javascript"> 8 webiopi().ready(function() { 9 // Following function will process data received from set/getLightHours macro. 10 var updateLightHours = function(macro, args, response) { 11 var hours = response.split(";"); 12 // Following lines use jQuery functions 13 $("#inputOn").val(hours[0]); 14 $("#inputOff").val(hours[1]); 15 } 16 17 // Immediately call getLightHours macro to update the UI with current values 18 // "getLightHours" refers to macro name 19 // [] is an empty array, because getLightHours macro does not take any argument 20 // updateLightHours is the callback function, defined above 21 webiopi().callMacro("getLightHours", [], updateLightHours); 22 23 // Create a button to call setLightHours macro 24 var sendButton = webiopi().createButton("sendButton", "Send", function() { 25 // Arguments sent to the macro 26 var hours = [$("#inputOn").val(), $("#inputOff").val()]; 27 // Call the macro 28 webiopi().callMacro("setLightHours", hours, updateLightHours); 29 }); 30 31 // Append the button to the controls box using a jQuery function 32 $("#controls").append(sendButton); 33 34 // Create a "Light" labeled button for GPIO 17 35 var button = webiopi().createGPIOButton(17, "Light"); 36 37 // Append the button to the controls box 38 $("#controls").append(button); 39 40 // Refresh GPIO buttons 41 // pass true to refresh repeatedly of false to refresh once 42 webiopi().refreshGPIO(true); 43 44 }); 45 </script> 46 47<style type="text/css"> 48 button { 49 display: block; 50 margin: 5px 5px 5px 5px; 51 width: 160px; 52 height: 45px; 53 font-size: 24pt; 54 font-weight: bold; 55 color: white; 56 } 57 58 #gpio17.LOW { 59 background-color: Black; 60 } 61 62 #gpio17.HIGH { 63 background-color: Blue; 64 } 65 </style> 66 67</head> 68<body> 69 70<div align="center"> 71稼働時間を入力してください<input type="text" id="inputOn" /> 72 73 74<div id="controls"></div> 75 76</div> 77 78</body> 79</html>
script.py
1import webiopi 2import RPi.GPIO as GPIO 3import time 4 5 6 7 8 9GPIO = webiopi.GPIO 10 11LIGHT = 17 # GPIO pin using BCM numbering 12 13HOUR_ON = 0 # Turn Light ON at 08:00 14HOUR_OFF = 0 # Turn Light OFF at 18:00 15 16# setup function is automatically called at WebIOPi startup 17def setup(): 18 # set the GPIO used by the light to output 19 GPIO.setFunction(LIGHT, GPIO.OUT) 20 21 22 23# loop function is repeatedly called by WebIOPi 24def loop(): 25 # retrieve current datetime 26 for i in range(1): 27 GPIO.output(LIGHT, GPIO.HIGH) # LED on 28 time.sleep(0) 29 GPIO.output(LIGHT, GPIO.LOW) # LED off 30 time.sleep(HOUR_ON + 10) 31 32 33 34 35# destroy function is called at WebIOPi shutdown 36def destroy(): 37 GPIO.digitalWrite(LIGHT, GPIO.LOW) 38 39@webiopi.macro 40def getLightHours(): 41 return "%d;%d" % (HOUR_ON, HOUR_OFF) 42 43@webiopi.macro 44def setLightHours(on, off): 45 global HOUR_ON, HOUR_OFF 46 HOUR_ON = int(on) 47 HOUR_OFF = int(off) 48 return getLightHours()
こちらがコードです。
初めてだらけで何が何だかわかりませんが、一応sheepの引数には変数を置いておき、変数にユーザが任意の分数をテキストボックスにいれて時間を設定するプログラムを書いたつもりですが、おかしいところありますか??
投稿2021/12/31 01:28
編集2021/12/31 01:50総合スコア3
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/31 01:38
2021/12/31 03:47
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/31 01:50