🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

1488閲覧

PYTHONでの動作でループが止まらない

evo_electric

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/02/14 10:00

編集2021/02/14 11:13

Python

1.pyの中身です。 2import time 3 4GPIO = webiopi.GPIO 5 6POW_PIN = 26 7STRONG_PIN = 13 8MODE_PIN = 19 9WEAK_PIN = 6 10 11COMMAND = "reset" 12 13def setup(): 14 GPIO.setFunction( POW_PIN, GPIO.OUT ) 15 GPIO.setFunction( STRONG_PIN, GPIO.OUT ) 16 GPIO.setFunction( MODE_PIN, GPIO.OUT ) 17 GPIO.setFunction( WEAK_PIN, GPIO.OUT ) 18 19 GPIO.digitalWrite( POW_PIN, GPIO.LOW ) 20 GPIO.digitalWrite( STRONG_PIN, GPIO.LOW ) 21 GPIO.digitalWrite( MODE_PIN, GPIO.LOW ) 22 GPIO.digitalWrite( WEAK_PIN, GPIO.LOW ) 23 24def loop(): 25 if ( COMMAND == "POW" ): 26 GPIO.digitalWrite( POW_PIN, GPIO.LOW ) 27 sleep(1) 28 GPIO.digitalWrite( POW_PIN, GPIO.HIGH ) 29 elif ( COMMAND == "STRONG" ): 30 GPIO.digitalWrite( STRONG_PIN, GPIO.LOW ) 31 sleep(1) 32 GPIO.digitalWrite( LEFT_PIN, GPIO.HIGH ) 33 elif ( COMMAND == "MODE" ): 34 GPIO.digitalWrite( MODE_PIN, GPIO.LOW ) 35 sleep(1) 36 GPIO.digitalWrite( MODE_PIN, GPIO.HIGH ) 37 elif ( COMMAND == "reset" ): 38 GPIO.digitalWrite( POW_PIN, GPIO.HIGH ) 39 GPIO.digitalWrite( STRONG_PIN, GPIO.HIGH ) 40 GPIO.digitalWrite( WEAK_PIN, GPIO.HIGH ) 41 GPIO.digitalWrite( MODE_PIN, GPIO.HIGH ) 42 sleep(1) 43 44def destroy(): 45 GPIO.digitalWrite( POW_PIN, GPIO.HIGH ) 46 GPIO.digitalWrite( STRONG_PIN, GPIO.HIGH ) 47 GPIO.digitalWrite( WEAK_PIN, GPIO.HIGH ) 48 GPIO.digitalWrite( MODE_PIN, GPIO.HIGH ) 49 50@webiopi.macro 51def command( com ): 52 global COMMAND 53 if ( com == "1" ): 54 COMMAND = "pow" 55 elif ( com == "2" ): 56 COMMAND = "strong" 57 elif ( com == "3" ): 58 COMMAND = "weak" 59 elif ( com == "0" ): 60 COMMAND = "mode" 61 62②HTMLです 63<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 64<html> 65<head> 66 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 67 <title>Tank Remote Controller</title> 68 <script type="text/javascript" src="/webiopi.js"></script> 69 <script type="text/javascript"> 70 webiopi().ready(function() { 71 webiopi().callMacro( "command", 5 ); 72 }); 73 74 function pushBotton( com ) { 75 webiopi().callMacro( "command", com ); 76 } 77 78 79 80 </script> 81</head> 82<body> 83<h1>コントローラー</h1> 84<table> 85<tr> 86 <td> </td> 87 <td><input type="button" name="pow" value="電 源" style="font-size:3em;" onclick="pushBotton(1)"></td> 88 <td> </td> 89</tr> 90<tr> 91 <td><input type="button" name="reset" value="リセット" style="font-size:3em;" onclick="pushBotton(6)"></td> 92 <td><input type="button" name="storong" value=" 強 " style="font-size:3em;" onclick="pushBotton(3)"></td> 93  <td><input type="button" name="weak" value=" 弱 " style="font-size:3em;" onclick="pushBotton(2)"></td> 94  <td><input type="button" name="mode" value="モード" style="font-size:3em;" onclick="pushBotton(0)"></td> 95</tr> 96</table> 97 98</body> 99</html> 100 101 102```ラズパイ+PYTHONでWebからの入力でリレーモジュールを稼働させています。 103Webからボタン入力はできるのですが一度LOWにしたらすぐにHIGHにしたいので 104下記のようにしたのですが3秒ごとにLOW、HIGHが切り替わるまでは良いのですが 1053秒ごとにループしてしまいます。ループが止まるようにしたいのですが、どのようにすればよいのか 106わからず困っています。 107BREAK文とか入れてみたのですが動作せず困っています。 108動きとして 109POW、STRONG、MODE、WEAKの4つは一度LOWになってHIGHに変わればOKです 110 111実現したいことは以下になります。 112①ループを止めたい 113②同じボタンが押すことができないので一度リセットボタンを設けているのを 114同じボタンが押せるようにしたい。 115初心者ですがよろしくお願いいたします。 116 117### 該当のソースコード 118python``` 119コード 120def loop(): 121 if ( COMMAND == "POW" ): 122 GPIO.digitalWrite( POW_PIN, GPIO.LOW ) 123 sleep(1) 124 GPIO.digitalWrite( POW_PIN, GPIO.HIGH ) 125     break

上記のBreakの書き方だとWeb画面がエラーで表示されなくなります。

試したこと

Breakやif GPIO.digitalreadなど、初心者なので書き方がおかしいのかもしれません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/02/14 10:19

コードは「コードの挿入」で記入してください。
退会済みユーザー

退会済みユーザー

2021/02/14 10:27 編集

ソースコードにインデントがありません。 「編集」ボタンを押して、ソースコードの挿入のやり方に従って「```ここに言語名を入力」と 「``````」の間にコードを記入しなおしてください。 >「Webからボタン入力はできるのですが」 >「②同じボタンが押すことができないので一度リセットボタンを設けているのを同じボタンが押せるようにしたい。」 それも含めて質問するのならばhtmlのコードも全部記載してください。
evo_electric

2021/02/14 10:35

HTMLを追加しましたが、この追加方法でよろしかったのでしょうか。 いろいろありがとうございます。
fumu7

2021/02/14 10:59

質問のプログラムには、Breakが使われていません。それが、ループが止まらない原因です(止まる(Break)が無いので、止まらない)。 どのような条件になった時にループを止めたいのかが判らないので、具体的なプログラムを示すことができませんが、ループを止めたい条件が成立した時にBreakが実行されるように書けば良いです。
guest

回答2

0

多分ですが、こちらが参考になるのではないでしょうか。

multithreading - Exiting a continuous loop in python via webiopi - Stack Overflow

投稿2021/02/14 12:56

phoepsilonix

総合スコア233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

evo_electric

2021/02/27 06:02

回答ありがとうございます。まだ稼働はしていないのですが、参考になりました。 スクリプト自体を変えてみようと思っております。
guest

0

質問のプログラムには、Breakが使われていません。それが、ループが止まらない原因です(止まる(Break)が無いので、止まらない)。

どのような条件になった時にループを止めたいのかが判らないので、具体的なプログラムを示すことができませんが、ループを止めたい条件が成立した時にBreakが実行されるように書けば良いです。

投稿2021/02/14 11:01

fumu7

総合スコア121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

evo_electric

2021/02/14 11:14 編集

fumu7さん ありがとうございます。 一度 LOWのあとにHIGHになったときにループが止まればよいのですが if ( COMMAND == "POW" ): GPIO.digitalWrite( POW_PIN, GPIO.LOW ) sleep(1)   GPIO.digitalWrite( POW_PIN, GPIO.HIGH )    break で書き込むとWebが開けなくなってしまうので書き方が悪いのかと思い苦戦しております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問