アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、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が押されたら、なんのデータが実行されないようにしたい。

コードはどう変えれば良いのか、教えていただけますでしょうか?

質問者からの補足コメント

  • どう思う?

    すみませんが、一つお伺いしたいのですが、
    変更前:if KEY2.value() == 0:

    変更後:if KEY2.value() == 0 and state == True:

    どうしてそういうふうに変えますか?state == Trueというのは、stateの値が0(初期値)という意味ですか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/06/15 17:18
  • うーん・・・

    そのプログラミングコードには、前のところに、state=0がしか書いてないので、
    どうして、後ろにstate=Trueを変更していただいたのですか?(state=Trueが定義されてないのに?)

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/06/15 17:30
  • どう思う?

    申し訳ございませんが、すこし変なところが変わったらしいです。

    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()が実行されるというふうにしたい。

    宜しければ、どう修正したら、良いでしょうか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2023/06/15 18:04
  • 本当にありがとうございます。昨日、直してくれたものが意図通りになっている。

    後は、2つお願いがありますが、今、def reverseGPIO()文のところで、stateの値1と0を設定しようとしているけど、また、信号が変です。宜しければ、チェックしていただけますか?

    信号波形図の写真とプログラミングファイルをアップロードしたので、ご確認ください。
    https://datadeliver.net/receiver/file_boxes/b50d …

    図003は、波形図の写真。
    図1と2は、コードの修正前と後の様子。
    詳しい情報をかいてあります。

    お手数ですが、よろしくお願いいたします。

    No.4の回答に寄せられた補足コメントです。 補足日時:2023/06/16 09:29
  • どう思う?

    ご回答ありがとうございます。大変助かりました。

    すみませんが、別の質問(Python変数)をお伺いしたいのですが、
    Pythonの素人です。今日、「Python変数か関数を使えば、プログラムコードの長い部分をコンパクトさせるし、全体として見やすくなる」と言われましたが、具体的にどんなPython変数を使ったら良いのか分からないので、宜しければ、教えていただけないでしょうか?

    仕様書と写真をアップデートしました。
    https://datadeliver.net/receiver/file_boxes/1994 …

    注1:写真は、今まで、直していただいたプログラムの前半部分です。
    注2:仕様書は全部英語です。

    お手数をおかけしますが、よろしくお願いいたします。

    No.5の回答に寄せられた補足コメントです。 補足日時:2023/06/16 22:50

A 回答 (6件)

異なる質問ですし、答えられるかどうかも分かりませんし、これはこれで、解決したのであれば、閉じていただいた方がいいです

    • good
    • 0

変更点確認しました。

自分の説明が悪く、勘違いさせたようです


変更前の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の処理は無視されます
この回答への補足あり
    • good
    • 0

ああ、なるほど、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 # 元に戻す


これでどうでしょうか?
この回答への補足あり
    • good
    • 0

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が有効になるので良いように思えます
この回答への補足あり
    • good
    • 0

解決できて何よりです。

この回答への補足あり
    • good
    • 0

ありがとうございます。

見やすくなりました

2箇所のみ変更すれば大丈夫だと思います


変更箇所①
__while True:
___if KEY1.value() == 0:
____state = not state # 追加
____time.sleep_ms(10)


変更箇所②
__if KEY2.value() == 0 and state == True: # 変更
___# state = not state 削除
この回答への補足あり
    • good
    • 0
この回答へのお礼

どうもありがとうございました!
意図通りになっています。
心より本当に感謝しています。

お礼日時:2023/06/15 17:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!