おはようございます。

先週の土曜日は快晴にめぐまれたので、丸子橋(綱島街道が多摩川を渡る橋)を中心に散策をしてきました。東横線の小杉駅と新丸子駅間の高架下には、数件のシャレオツな飲み屋さんが最近新装開店したのですね。

 

JR南武線の武蔵小杉駅から東急東横線に沿って新丸子駅まで徒歩で移動、その後綱島街道に出て丸子橋を渡って、

を見学してきました。

簡単に言いますと上差しの妄想を、現実にしてきました。筋肉

 

下差し多摩川台公園から多摩川を渡る東横線の向こう(南)に見える武蔵小杉の高層マンション群

下差し丸子橋から多摩川の上流(西北西方向)を望みます。中央の橋は、多摩川を渡る東横線の線路になります。

右のこんもりした台地上に多摩川台公園があります。正面左あたりに二子玉の高島屋や楽天の本社ビル(楽天クリムゾンハウス)が写っています。

下差し丸子橋から多摩川の下流方面(東南東の方向)を望みます。当日は緩い北風が吹いていたので、羽田空港(A滑走路、C滑走路)に南側からの着陸態勢に入った旅客機を撮ったのですが、小さすぎて分からん(笑)

 

下差し映え映えのイワシ雲

下差し帰り道は小田急線の向ヶ丘遊園駅で下車して、クラフトビールのブルーパブムーンライト (Craft Beer Moon Light) に寄り道

 

さて今回は、ARM-Firstにpyboard用のMicroPython インタプリタを書き込んでみました。

MicroPython v1.17 on 2021-09-02; PYBv1.1 with STM32F405RG

上差しこれです。

 

年初に今年は、MicroPythonとBLEだ! って威勢よく宣言したのですが、放置状態でした。

年初の時点で、ARM-Firstに実装したMicroPythonでwifiを制御する方法が分からなかったのですが、シリアルI/F(UART2)でATコマンドを使ってESP8266を制御できることが分かりました。右差し ”正確に言うと気が付いた”です。

 

 

 

 

を思い出して、MicroPythonでA/D変換のスクリプトを書いてみました。 

A/D変換というと難しい表現なのですが、12ビット(0~4095)で電圧を分圧することで、検知できる電圧値に依ってどのボタンが押されたが認識できます。右差しLCD Keypad Shieldではどの様な原理で、そのボタン(SELECT, LEFT UP, DOWN, RIGHT)押下を検知できるか。

懐かしい式を思い起こしてください。 V = IR (電圧 = 抵抗 * 電流) 

 

 

#LCD1602 & push buttom test program for ARM-First
#Last update 2021/10/10
from pyb import Pin
import time, pyb

LCD_CHR=1
LCD_CMD=0
LCD_LINE_1=0x80
LCD_LINE_2=0xC0

pin_bl = Pin('A15',Pin.OUT)
pin_e  = Pin('B11',Pin.OUT)
pin_rs = Pin('A4',Pin.OUT)
pin_d4 = Pin('C13',Pin.OUT)
pin_d5 = Pin('B8',Pin.OUT)
pin_d6 = Pin('B12',Pin.OUT)
pin_d7 = Pin('C7',Pin.OUT)
pin_bl.value(1)

# Init. A/D Conversion
pin_c0 = Pin('C0',Pin.IN)
adc = pyb.ADC(pin_c0)              # create an analog object from a pin
val = adc.read()                   # read an analog value

def lcd_init():
  time.sleep_ms(15)
  
  #0011xxxx, 0110xxxx
  lcd_byte(0x33,LCD_CMD)
  #0011xxxx, 0010xxxx
  lcd_byte(0x32,LCD_CMD)
  
  # 4bit mode/2 lines/char. size 5*7
  lcd_byte(0x28,LCD_CMD)
  # display on/block cusor off/blink off
  lcd_byte(0x0C,LCD_CMD)
  # increment/shiht off
  lcd_byte(0x06,LCD_CMD)
  # display clear
  lcd_byte(0x01,LCD_CMD)

  time.sleep_us(1640)
  
def lcd_nibble(bits):
  pin_e.value(1)
  pin_d4.value(bits & 0x10)
  pin_d5.value(bits & 0x20)
  pin_d6.value(bits & 0x40)
  pin_d7.value(bits & 0x80)
  pin_e.value(0)
  
def lcd_byte(bits,mode):
  pin_rs.value(mode)
  lcd_nibble(bits)
  time.sleep_us(40)
  bits<<=4
  lcd_nibble(bits)
  time.sleep_us(40)
    
def lcd_string(message,line):
  # Send string to display
  lcd_byte(line, LCD_CMD)
  for i in range(len(message)):
    lcd_byte(ord(message[i]),LCD_CHR)
    
############################################
def main():
    lcd_init()

    lcd_string("class ADC       ",LCD_LINE_1)
    lcd_string("A/D conversion  ",LCD_LINE_2)
    
    while True:
        val = adc.read()     
        print(val)

        if val <= 20:
            print('Right')
            lcd_string("Right:" + str(val) + "          ",LCD_LINE_1)
        elif val <= 750:
            print('Up')
            lcd_string("Up:" + str(val) + "             ",LCD_LINE_1)   
        elif val <= 1600:
            print('Down')
            lcd_string("Down:" + str(val) + "           ",LCD_LINE_1)     
        elif val <= 2300:
            print('Left')
            lcd_string("Left:" + str(val)+"             ",LCD_LINE_1)  
        elif val <= 3200:
            print('Select')
            lcd_string("Select:" + str(val)+"           ",LCD_LINE_1)  
        else:
            print('Open')
            lcd_string("Open:" + str(val)+"             ",LCD_LINE_1)
            
        time.sleep_ms(500)

#############################################
main()
 

チョキ TBC

 

【参照記事】