些細な事ですが、mbed LPC1768+mbedシールドのGrove部分を動かすメモです。デジタルとアナログで一体どのピンを使うかがわからなくなったので、回路図を見ながら試してみました。
今回の構成
スイッチサイエンス製のmbedシールドとmbed LPC1768でMilkcocoaで有線LANの接続を行っていたのですが、いよいよGrove使ってみたところでつまづいてしまいました。
J16、J10、J13、J7と刻印されているのですがピンの番号ではないらしく、どのピンが割り当てられているかさっぱり分からない…
回路図を見てみる
しかたないので回路図を見てみます。Mbed Shield – Seeed Wikiから回路図をダウンロードして、AUTODESK EAGLE8.0で開いてみたところ
対応するピン番号が分かってきました。
// p14 = j10 // p27 = j7 // p10 = j13
デジタルなピンはこのようになっているようです。
LED点滅させてみる
早速やってみます。J7に接続した場合です。
#include "mbed.h" DigitalOut myled(p27); // p14 = j10 // p27 = j7 // p10 = j13 int main() { // check that myled object is initialized and connected to a pin if(myled.is_connected()) { printf("myled is initialized and connected!\n\r"); } // Blink LED while(1) { myled = 1; // set LED1 pin to high printf("\n\r myled = %d", (uint8_t)myled ); wait(0.5); myled.write(0); // set LED1 pin to low printf("\n\r myled = %d",myled.read() ); wait(0.5); } }
こちらを動かすと無事以下のようにログが出力されGrove LEDが点滅します。
アナログピンの場合
たとえば、このようにJ16のアナログピンに挿してアナログ値の明るさセンサーを受け取るときです。
J16のアナログピンの場合はピンを番号がわからなくてもうまくいきました。
AnalogIn – Handbook | mbed を参考に以下のように書きます。
#include "mbed.h" Serial pc(USBTX, USBRX); AnalogIn ain(A0); DigitalOut dout(LED1); int main(void) { while (1) { if(ain > 0.3f) { dout = 1; } else { dout = 0; } pc.printf("percentage: %3.3f%%\n\r", ain.read()*100.0f); pc.printf("normalized: 0x%04X \n\r", ain.read_u16()); wait(1.0); } }
こちらを動かすと無事以下のようにログが出力され明るさセンサーの値が表示されます。
検索して調べればすぐ出てくるだろうと思っていたら、調べ方がよくないのか、ぜんぜん出てこなかったので、未来の自分のために書き留めておきます。
それではよき Milkcocoa mbed Life を!