私はArduino(および一般的なコンピュータプログラミング)を初めて使用するので、この質問がばかげているようでしたら申し訳ありません。
基本的なarduino-LED接続をセットアップしたら、シリアルポートを介してINTEGERSをarduinoに送信できません。「m」や「o」などの文字は簡単に送信できます。ただし、数値を送信すると、取得できないように見えます。
これがArduinoコードです。理想的には、USBポートからPythonまたはシリアルモニターを介して値を取得し、その値に従ってLEDの輝度を調整します。(値は[0,255]の範囲内でなければなりません)。
注:私はARDUINO UNOとPYTHON 3を使用しています
// --------------------------
int LED = 10;
int number;
void setup(){
pinMode(LED,OUTPUT);
Serial.begin(9600);
}
void loop(){
number = Serial.read();
Serial.print(number);
Serial.print('\n');
if(number == -1){
number = 0;
}
else if(number > 255){
number = 255;
}
else if(number < 0){
number = 0;
}
analogWrite(LED,number);
delay(1000);
}
ただし、シリアルポートまたはPythonを介して、たとえば0の値を入力すると、48が回答として返され(興味深いことに、0のASCIIコードです)、LEDが点灯します。 0でLEDはオフになるはずです!! 何か不足していますが、何が見つかりません...何が悪いのか教えていただけませんか?
Pythonで使用するコードは次のとおりです。
import serial
import time
try:
arduino = serial.Serial(port,speed)
time.sleep(2)
print("Connection to " + port + " established succesfully!\n")
except Exception as e:
print(e)
#Note: for characters such as 'a' I set data = b'a' to convert the data in bytes
#However the same thing does not work with numbers...
data = 0
data = arduino.write(valueToWrite)
time.sleep(2)
arduino.close()
私は何を間違っているか、誤解していますか?ありがとうございました。
arduino.write(chr(valueToWrite))