照度センサの値に応じ、モータ2つを動かすプログラムを作りたいです。
照度センサの値を出すプログラムと、モータ1つを回すプログラム、それぞれ単体では上手くできましたが、組み合わせてみた結果がうまくいきません。
SDカードをフォーマットし直したところ、つかなくなってしまっていたラズパイが使えるようになったため、大幅に加筆修正させて頂きます。
# GPIOを制御するライブラリ import wiringpi # タイマーのライブラリ import time # 引数取得 import sys # MCP3002(A/Dコンバータ)を接続したチャンネルを指定 SPI_CH = 0 # 読み込み対象のMCP3002(A/Dコンバータ)のアナログ入力チェンネルを指定 READ_CH = 0 #モータを動かすためのGPIO端子の設定 motor1_pin = 23 motor2_pin = 24 motor3_pin = 27 motor4_pin = 28 # 明るさの閾値を引数指定 param = sys.argv set_illuminance = int(param[1]) # SPI初期化 wiringpi.wiringPiSPISetup( SPI_CH, 1000000 ) while True: # MCP3002(A/Dコンバータ)に送るデータを作成 buffer = 0x6800 | ( 0x1800 * READ_CH ) buffer = buffer.to_bytes( 2, byteorder='big' ) # SPIを使ってCH0の値を取得 wiringpi.wiringPiSPIDataRW( SPI_CH, buffer ) # 値が2バイトに分かれて送られるので、1つの値にまとめる illuminance_value = ( buffer[0] * 256 + buffer[1] ) & 0x3ff # 明るさの基準値を下回ったらモータを回す if ( illuminance_value < set_illuminance ): wiringpi.digitalWrite( motor1_pin, 1 ) wiringpi.digitalWrite( motor2_pin, 0 ) wiringpi.digitalWrite( motor3_pin, 1 ) wiringpi.digitalWrite( motor4_pin, 0 ) else: wiringpi.digitalWrite( motor1_pin, 1 ) wiringpi.digitalWrite( motor2_pin, 1 ) wiringpi.digitalWrite( motor3_pin, 1 ) wiringpi.digitalWrite( motor4_pin, 1 ) # 10秒ずつ検出 time.sleep(10)
出されたエラーは、
pinMode: You have not called one of the wiringPiSetup functions, so I'm aborting your program before it crashes anyway.
です。調べたのですが、解決方法がわかりませんでした。しかし、クラッシュとあるため、このまま続けると何かまずいことが起こるのではないかと思っています。
そもそも、このプログラム(特にif文周辺)は、照度センサの値が閾値以下ならばモータを回すというものになっているのでしょうか。
なっていないのであれば、修正点を教えていただけると大変ありがたいです。
ーーーーーーーーーーーーーーーーーーー
回答1件
あなたの回答
tips
プレビュー