こんにちは、MicroPythonコードを修正しようとしていますが、
ラズパイPicoに2つのpush buttonを繋いて、Logic Analyzerで信号波形を測りました。アップロードした写真とプログラムのファイルをご確認ください。
https://datadeliver.net/receiver/file_boxes/36d1 …
まず、波形図を説明させていただきます。
Channel 0-8それぞれは、vdd, vddio, vled, en, scs, sclk, mosi, KEY1, KEY2です。
白い線で囲まれているのは、二回の繰り返しの信号。
緑で囲まれているのを消したいです。
今、修正したい部分は:
KEY1が押されたら、stateの値が1になった時、その後、KEY2が押されたら、データが出力しかされないようにしたいです。
もう一度、KEY1が押されたら、stateの値が0にった時(一回目の繰り返しが終わり)、その後、KEY2が押されたら、なんのデータが実行されないようにしたい。
コードはどう変えれば良いのか、教えていただけますでしょうか?
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
変更点確認しました。
自分の説明が悪く、勘違いさせたようです①
変更前のtest27-ネット修正03.py
def reverseGPIO():
__if state == 1:
____en(0)
____time.sleep(0.15)
変更後:
def reverseGPIO():
__if Vdd.value() ==1: # ここを戻す
____en(0)
____time.sleep(0.15)
②
変更前のtest27-ネット修正03
____if KEY2.value() == 0:
________state = not state
変更後:
____if KEY2.value() == 0 and Vdd.value() == 1: # ここに、Vddのチェックを追加
________state = not state
説明:
KEY1が押されると、reverseGPIO()で、Vddの値が1に変移します。再びKEY1が押されるまで、Vddの値は1のままです。
また、Vddの値が1の間は、KEY2が押される度に、spiに"6", 再び押されると、spiに"7"と、"6"の出力と、"7"のを繰り返し出力されます
KEY1が押され、Vddの値が0になると、KEY1の処理は無視されます
No.4
- 回答日時:
ああ、なるほど、stateはそっちの意味だったんですね。
自分の勘違いでした。申し訳ありません。変更箇所①(変更を元に戻す)
__while True:
___if KEY1.value() == 0:
____# state = not state 削除
____time.sleep_ms(10)
変更箇所②(変更した部分を変える)
__if KEY2.value() == 0 and Vdd.value() == 1: # 変更
___state = not state # 元に戻す
これでどうでしょうか?
No.3
- 回答日時:
stateの初期値は、質問者さんのコードでFalseになってます
en(0)
state = False
# key1_pressed = False
stateがFalseの状態は、KEY1が1度も押されていない状態を意図していると思います。また、KEY1が押されると
state = not state
と変更したので、KEY1が押される度に、stateがFalse(KEY1が押されてない状態)であれば、True(KEY1が1度押された状態)になり、stateがTrue(KEY1が1度押された状態)であれば、False(KEY1が押されていない状態)に変わります
KEY2が押されたときに、spi出力をする条件は、KEY1が1度押されたときなので、
if KEY2.value() == 0 and state == True:
とすることで、KEY2が押されて、そして、KEY1が1度押されてる状態(stateがTrue)の時の2つの条件が揃った時のみ、spiへの出力を行うように変更しています
state == True という条件を使ってますが、これは、
Vdd.value() == 1
という条件に置き換えても同じ結果になります。本来であれば、こっちの方が、state変数を使用しなくなるため、stateの初期値を間違えたり、どこかでstateを変更してしまっても、KEY1が押されてVddが、Highの状態でのみ、KEY2が有効になるので良いように思えます
No.1
- 回答日時:
ありがとうございます。
見やすくなりました2箇所のみ変更すれば大丈夫だと思います
変更箇所①
__while True:
___if KEY1.value() == 0:
____state = not state # 追加
____time.sleep_ms(10)
変更箇所②
__if KEY2.value() == 0 and state == True: # 変更
___# state = not state 削除
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) micropythonコード 修正 1 2023/06/13 17:22
- その他(プログラミング・Web制作) micropython コードについて 2 2023/06/14 13:13
- Java Java 南京錠 2 2023/02/04 11:46
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- その他(プログラミング・Web制作) MicroPythonコード 1 2023/07/05 15:20
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PLCとPCの通信
-
シリアル通信でのデータ取りこぼし
-
マイコンからSDカード内のテキ...
-
レジスタマップって何ですか?
-
Macターミナルで実行中のプログ...
-
緯度、経度の 10進法と 60進法...
-
C言語で、メモリを解放しないで...
-
VBSの処理中一旦処理を止めて再...
-
バックグラウンドのプロセスの...
-
ACCESS側からEXCELの書式を設定...
-
プログラミング ソースコード
-
C#でのbatファイル実行結果取得
-
小数点を含む数値かどうか判断...
-
ソケットのrecvの戻り値が0
-
bmp→jpgに、jpg→bmpに
-
コンソールアプリケーションの...
-
VBA、UserFormを前面に出力して...
-
TCP/IP通信時のサーバーからの受信
-
別のプロセスの関数を呼び出す...
-
10進数をBCDに変換する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PLCとPCの通信
-
レジスタマップって何ですか?
-
シリアル通信でのデータ取りこぼし
-
マイコンからSDカード内のテキ...
-
フラッシュメモリへの書き込み
-
組み込みマイコンでのソフトウ...
-
TCNTとTIFRの意味
-
PICマイコンのCLRWDT動作について
-
SH7144でパルス幅を測定したい。
-
Octal D-type transparent latc...
-
マイクロ秒で精度が出るタイマー
-
2つのアナログ信号が一致して...
-
マイコンのCプログラミングで未...
-
PIC12F683でLEDをスイッチで点...
-
機械語のレジスタペアについて
-
ArduinoとXBeeを用いたRSSIの取...
-
PCからシリアル通信で外部ハー...
-
A/D変換について
-
アセンブラプログラム
-
ビット演算を学びたい
おすすめ情報
すみませんが、一つお伺いしたいのですが、
変更前:if KEY2.value() == 0:
変更後:if KEY2.value() == 0 and state == True:
どうしてそういうふうに変えますか?state == Trueというのは、stateの値が0(初期値)という意味ですか?
そのプログラミングコードには、前のところに、state=0がしか書いてないので、
どうして、後ろにstate=Trueを変更していただいたのですか?(state=Trueが定義されてないのに?)
申し訳ございませんが、すこし変なところが変わったらしいです。
https://datadeliver.net/receiver/file_boxes/cb60 …
図1のように、白い線で囲まれている四つの信号をパット見たら、問題がないですが、信号を拡大して、丁寧に見たら、中身のデータが全部同じになってしまっています。
コードには、KEY2を押すことによって、spi_write_data_6()とspi_write_data_7()のデータを反転させたいから、一回押したら、spi_write_data_6()が実行され、もう一回押したら、spi_write_data_7()が実行されるというふうにしたい。
宜しければ、どう修正したら、良いでしょうか?
本当にありがとうございます。昨日、直してくれたものが意図通りになっている。
後は、2つお願いがありますが、今、def reverseGPIO()文のところで、stateの値1と0を設定しようとしているけど、また、信号が変です。宜しければ、チェックしていただけますか?
信号波形図の写真とプログラミングファイルをアップロードしたので、ご確認ください。
https://datadeliver.net/receiver/file_boxes/b50d …
図003は、波形図の写真。
図1と2は、コードの修正前と後の様子。
詳しい情報をかいてあります。
お手数ですが、よろしくお願いいたします。
ご回答ありがとうございます。大変助かりました。
すみませんが、別の質問(Python変数)をお伺いしたいのですが、
Pythonの素人です。今日、「Python変数か関数を使えば、プログラムコードの長い部分をコンパクトさせるし、全体として見やすくなる」と言われましたが、具体的にどんなPython変数を使ったら良いのか分からないので、宜しければ、教えていただけないでしょうか?
仕様書と写真をアップデートしました。
https://datadeliver.net/receiver/file_boxes/1994 …
注1:写真は、今まで、直していただいたプログラムの前半部分です。
注2:仕様書は全部英語です。
お手数をおかけしますが、よろしくお願いいたします。