以下のソース(スケッチ)をArduino と GR-SAKURA で動かしてみました。
#define RXDUINO #ifdef RXDUINO #include <rxduino.h> #else #include <Arduino.h> #endif #define INTERVAL 500 #define PIN_ANALOG_IN0 0 #define PIN_ANALOG_OUT 9 void setup() { // IO初期化。 pinMode(PIN_ANALOG_OUT, OUTPUT); #ifdef RXDUINO analogReference(EXTERNAL); #endif // シリアルポートを9600bpsで開始。 Serial.begin(9600); // 受信バッファにデータが入るまで待機。 while (Serial.available() == 0); Serial.println("Hello!"); // 一旦、受信バッファにデータがあれば、 if (Serial.available() > 0) { // 読み込んで、廃棄。 char c = Serial.read(); } } void loop() { unsigned int intValue = analogRead(PIN_ANALOG_IN0); Serial.println(intValue); analogWrite(PIN_ANALOG_OUT, (int)(intValue / 4)); delay(INTERVAL); }
ブレッドボード上に可変抵抗をおいて、電源電圧からボリューム調整で分圧した電圧をAN0に入れて、analogRead(AN0)で読み込みます。読み込んだ10bit値を4でわって8bit値に縮めて、analogWrite(PIN9)でPWM出力して抵抗を直列に入れたLEDを光らせています。
一応、同じような動きをしてくれていますね。ここでも、注意が必要なのは、電源電圧で、Arduinoは5V、GR-SAKURAは3.3Vで、PWM等で供給できる電圧も当然低くなるわけで。
また、AD入力も3.3V以上の入力を加えても測定できないばかりか、壊してしまう可能性もあるので、要注意です。
また、GR-SAKURAでは電源3.3Vをブレッドボードに供給して、当然、最大3.3Vがアナログ入力に帰ってくるわけですが、
analogReference(EXTERNAL);
を入れておかないと、3.3Vを5Vを1023としたときの値、3.3V→675として返して来てしまいます。3.3Vを1023として取得したい場合は、上記の記述が必要でした。
0 件のコメント:
コメントを投稿