前提・実現したいこと
ADコンバーターを用いて可変抵抗器からデジタル値をラズパイで取得し、USBを用いたシリアル通信でArduinoに値を送ろうとしています。通信はできているのですが、Arduinoに送られた値がラズパイで取得した値と異なっていると思われます。どのようなコードを書けばラズパイで取得した値がそのままArduinoに送られるのかぜひ教えていただきたいです。
現段階としてラズパイから取得した値val<500でLEDが光るようにしたところ、ちゃんと光りました。一方で試しにval>500で光るようにしたところ、光りませんでした。
初めての質問で、稚拙な文章になってしまい申し訳ありません。
発生している問題・エラーメッセージ
ラズパイからArduinoに送られた値がラズパイで取得した値と異なる。
該当のソースコード
import RPi.GPIO as GPIO import serial from time import sleep GPIO.setwarnings(False) ser = serial.Serial('/dev/ttyACM0',9600) def readadc(adcnum, clockpin, mosipin, misopin, cspin): if adcnum > 7 or adcnum < 0: return -1 GPIO.output(cspin, GPIO.HIGH) GPIO.output(clockpin, GPIO.LOW) GPIO.output(cspin, GPIO.LOW) commandout = adcnum commandout |= 0x18 # スタートビット+シングルエンドビット commandout <<= 3 # LSBから8ビット目を送信するようにする for i in range(5): if commandout & 0x80: GPIO.output(mosipin, GPIO.HIGH) else: GPIO.output(mosipin, GPIO.LOW) commandout <<= 1 GPIO.output(clockpin, GPIO.HIGH) GPIO.output(clockpin, GPIO.LOW) adcout = 0 for i in range(13): GPIO.output(clockpin, GPIO.HIGH) GPIO.output(clockpin, GPIO.LOW) adcout <<= 1 if i>0 and GPIO.input(misopin)==GPIO.HIGH: adcout |= 0x1 GPIO.output(cspin, GPIO.HIGH) return adcout GPIO.setmode(GPIO.BCM) SPICS = 8 SPIMISO = 9 SPIMOSI = 10 SPICLK = 11 GPIO.setup(SPICLK, GPIO.OUT) GPIO.setup(SPIMOSI, GPIO.OUT) GPIO.setup(SPIMISO, GPIO.IN) GPIO.setup(SPICS, GPIO.OUT) try: while True: inputVal0 = readadc(0, SPICLK, SPIMOSI, SPIMISO, SPICS) ser.write(inputVal0) print(inputVal0) sleep(0.2) except KeyboardInterrupt: pass GPIO.cleanup()
python
int val=0; #define LED_PIN 13 void setup() { pinMode(LED_PIN,OUTPUT); Serial.begin(9600); } void loop() { if(Serial.available() > 0){ val = Serial.read(); } if(val < 500){ digitalWrite(LED_PIN,HIGH); } delay(100); }
```ここに言語名を入力 c言語
補足情報(FW/ツールのバージョンなど)
Arduinoから直接USBでラズパイに接続しているので、シリアルモニターを用いた値の確認はできない状態です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 08:56