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

from machine import Pin, SPI
import time

KEY1 = Pin(0, Pin.IN, Pin.PULL_UP)
KEY2 = Pin(15, Pin.IN, Pin.PULL_UP)
Vdd = Pin(2, mode=Pin.OUT, value=0)
spi = SPI(0, baudrate=7500000, polarity=0, phase=0, bits=8, firstbit=SPI.MSB, sck=Pin(6), mosi=Pin(7))
cs = Pin(1, mode=Pin.OUT, value=0)
cs(1)
Vdd(0)
state = False

def spi_write_data_1():
spi.write(bytes([0x01]))

def spi_write_data_2():
spi.write(bytes([0x02]))

def spi_write_data_3():
spi.write(bytes([0x03]))

def spi_write_data_4():
spi.write(bytes([0x04]))

def spi_write_data_5():
spi.write(bytes([0x05]))

def spi_write_data_6():
spi.write(bytes([0x06]))

def spi_write_data_7():
spi.write(bytes([0x07]))

def spi_write_data_8():
spi.write(bytes([0x08]))

def reverseGPIO():
if Vdd.value() == 1:
cs(0)
spi_write_data_1()
spi_write_data_2()
spi_write_data_8()
spi_write_data_4()
spi_write_data_5()
cs(1)
time.sleep(0.008)

else:
Vdd(1)
time.sleep(0.1)

cs(0)
spi_write_data_1()
spi_write_data_4()
spi_write_data_5()
spi_write_data_3()
spi_write_data_2()
cs(1)

time.sleep(0.008)

try:
while True:
if KEY1.value() == 0:
time.sleep_ms(10)
if KEY1.value() == 0:
reverseGPIO()

while KEY1.value() == 0:
time.sleep_ms(10)

if KEY2.value() == 0:
state = not state

if state:
cs(0)
spi_write_data_6()
cs(1)


else:
cs(0)
spi_write_data_7()
cs(1)

while KEY2.value() == 0:
time.sleep_ms(10)

except:
pass

こんにちは、MicroPythonコードを修正したいのですが、このように実行させたいので、どう修正したら、全然わからなくて、宜しかったら、教えていただけますでしょうか?

1. まず、初めにKEY 1を押してから直ぐに放した後、以下のデータを実行され:
Vdd(1)
time.sleep(0.1)
cs(0)
spi_write_data_1()
spi_write_data_4()
spi_write_data_5()
spi_write_data_3()
spi_write_data_2()
cs(1)
time.sleep(0.008)
2. そして、初めにKEY2を押してから直ぐに放したら、以下のデータが実行され:
cs(0)
spi_write_data_6()
cs(1)
3. それから、二回目KEY2を押してから直ぐに放したら、このデータが実行され:
cs(0)
spi_write_data_7()
cs(1)
4. 2番と3番がずっと繰り返せる
5. 最後に、KEY1を押してから直ぐ放したら、このデータが実行され:
cs(0)
spi_write_data_1()
spi_write_data_2()
spi_write_data_8()
spi_write_data_4()
spi_write_data_5()
cs(1)
Vdd.value(0)
time.sleep(0.1) 
6. 5番が実行された後、1番に戻り、無限に繰り返せる。
7. 1番から5番までの内容は、一回目の繰り返しです。KEY1を押す前と最後にKEY1を押した後、KEY2を押しても何のコードが実行されないように修正したい。つまり、最初にKEY1が押され、その直後にKEY2が押された場合のみ、データが出力される。

Logic Analyzerで解析した波形図をアップロードします。ご参照ください。
写真のように、
1.チャンネル0~3は、それぞれVdd、Vddio、Vled、enを表します。
2.チャンネル7はKEY1、チャンネル8はKEY2を表しています。
3.図の白丸で囲った2つの部分は、コードが実行された後のループ(繰り返し)です。
4. 緑で囲った部分は、ボタン2を押してすぐに離すと、このサイクル(繰り返し)の外で発生する信号です。
5.緑で囲まれている部分から発生する信号をなくしたい(青色の丸で囲った部分と同じにしたい)

「micropythonコード 修正」の質問画像

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

  • CPUボードはラズパイpico

    回路図は今だにないですが、とりあえず、picoから出す信号を作ってみたいです。

    目的は、picoを使って、二つのボタンを繋いで、長方形LEDライトボードを光らせるようにしたいです。

      補足日時:2023/06/13 20:53

A 回答 (1件)

何の話か書かないと回答付きにくいと思う。



CPUボードは何か?
目的は何か?
回路図とかないの?

インデントの消えたPythonコードを読むのもつらい。
    • good
    • 0

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