以下のソース(スケッチ)を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 件のコメント:
コメントを投稿