#!/usr/bin/env python
# coding: utf-8
# オリジナルの作成:2015/01/17
# ## lbeDuino誕生の理由
# 安く、ソースデバッガーが使えて、豊富なライブラリーが使える開発環境を作ろうと少しずつ開発を進めてきました lbed ですが、Arduinoのシールドを意識しながら、lbeDuinoと言う形で整理してみたいと思います。
#
# この記事は、鈴木哲哉さんの著書
# [作って遊べるArduino互換機 ](http://www.amazon.co.jp/dp/4883378802/)
# に強く影響を受けています。 Arduinoのシールドとの変換シールドを作れば、安くて簡単な万能基板が使えることは、 気軽に電子工作を楽しむ第一歩になると考えたからです。
#
# lbeDuinoでは、プログラムの開発はLpcExpresso Ver.6以降を使っています。 デバッガには、トラ技のARMデバッガを使用しましたが、LPC-LINK, LPC-LINK2も使えます。
#
# ### beDuinoの作成方針
# Arduino勉強会では、ProtoSnap Pro Mini を使っているので、シリアル通信とUSBからの電源供給は、 FTDI USBシリアル変換アダプターを使います。 シリアル変換アダプターを購入されるのなら、 スイッチサイエンスの
# [FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き) ](https://www.switch-science.com/catalog/1032/)
# が便利かと思います。
#
#
#
# ピンの使い方は、mbed LPC1114FN28を参考にしました。
#
#
# ### lbeDuinoの回路図
# 手書きで申し訳ありませんが、lbeDuinoの回路を以下に示します。
#
# 回路のミスについて
#
# - AREFをAnalogInに接続
# - 3.3VとGNDにパスコンを追加
# - TA48M033Fの1, 3, 2ピンに5V, GND, 3.3Vであり、セラミックコンデンサーは5V, 電解コンデンサーは3.3Vに接続
# - D13とD10を入れ替えました(2015/02/08)
#
#
#
# ### lbeDuinoの組み立て
# 出来上がったlbeDuinoは、以下の様になりました。
#
#
# ### lbeDuinoの動作確認
# Arduinoの動作確認と言えばblinkなので、lbeDuinoでも以下の様なBlink.cpp作って動作を確認しました。
#
# 今回Arduino版のlbedと同じスケッチが使えるようにサンプルプログラムをArduino風に書きました。
#
# lbedのArduino版については、Arduino/Arduinoでmbedユーザライブラリーを動かすを参照してください。
#
# ledをDigitalOutのインスタンスとして作成し、LEDのオン・オフをled = !ledのように書けるところがmbed風 のプログラミングの分かりやすいところです。
#
# ```C++
# #include"lbed.h"
#
# DigitalOut led(D13);
#
# void setup() {}
#
# void loop() {
# led = !led;
# wait_ms(1000);
# }
# ```
#
# ## lbedユーザライブラリの動作確認
# これまで作ったlbed用のユーザライブラリをlbeDuinoで動かしてみます。
#
# ### テキストLCD(TextLCD)
# mbedのTextLCDをlbedで動かしてみます。
#
# 3.3Vで動作するLCDは、オレンジボードに載せたものだけなので、以下の様にオレンジボードと接続して 動作を確認しました。
#
# | オレンジボード | lbeDuino |
# |---|---|
# | p24(rs) | D0 |
# | p26(e) | D1 |
# | p27(d4) | D2 |
# | p28(d5) | D3 |
# | p29(d6) | D4 |
# | p30(d7) | D5 |
#
# 動作確認をしたときの画像は、以下の通りです。
#
#
# ### TextLCDの動作確認
# TextLCDの場合も、mbedのTextLCDの例題がそのまま使えます。
#
# Arduino風に書いたTextLCD.cppは、以下の通りです。リセットするとHello Worldが上手く表示できないので、 少し調整が必要ですが、なんとか動きそうです。
#
# ```C++
# #include "lbed.h"
# #include "TextLCD.h"
#
# DigitalOut led(D13);
# TextLCD lcd(D0, D1, D2, D3, D4, D5); // rs, e, d4-7
# int count = 0;
#
# void setup() {
# lcd.print("Hello World!");
# }
#
# void loop() {
# lcd.locate(0, 1);
# lcd.print("Count=");
# lcd.print(count++);
# led = !led;
# wait_ms(1000);
# }
# ```
# ### シリアル通信
# パソコンとのシリアル通信(Serial)をArduinoのシリアルモニタを使ってテストしてみます。
#
# シリアルを使う時には、FTDI USBシリアル変換アダプターを接続し、Rx, Txのジャンパーを結線します。
#
#
#
# ### シリアルの動作確認
# シリアルの動作確認にSerial.cppを作成し、予めArduinoのシリアルモニターを起動し、 ボーレイトを9600にセットして下さい。
#
# ```C++
# #include "lbed.h"
#
# DigitalOut myled(D13);
# Serial pc(D0, D1);
#
# void setup() {
# pc.baud(9600);
# pc.println("Hello World!");
# }
#
# void loop() {
# char c = pc.read();
# pc.write(c + 1);
# myled = !myled;
# }
# ```
#
# 最初にHello Worldを出力し、次に入力した文字の次の文字を返します。abcefgと入力するとbcdfghと返してきます。
#
#
#
#
# ### DigitalIn
# LBEDのLPC1114版ではDigitalIn, AnalogInを実装していなかったので、LPC1343版から移植し、動作を確認しました。
#
# DigitalInでは、以下のようにタクトスイッチに10KΩの抵抗でプルアップした回路を組み、スイッチを押したときに LEDを点灯するプログラムを作成して、動作を確認しました。
#
#
#
# ### DigitalInの動作確認
# 以下のプログラムButtonSwtich.cppを作成し、動作を確認しました。
#
# ```C++
# #include "lbed.h"
# // Pin 13 has an LED connected on most lbeDuino boards.
# DigitalOut led(D13);
# // Pin 7 has an tact switch on bread board.
# DigitalIn sw(D7); // #A
#
# // the setup routine runs once when you press reset:
# void setup() {
# }
#
# // the loop routine runs over and over again forever:
# void loop() {
# led = !sw; // #B
# wait_ms(200); // wait for 200 mili seconds.
# }
# ```
# ### AnalogIn
# AnalogInは、可変抵抗(potensiometer)を使って電圧を変えて動作を確認しました。
#
#
#
# ### AnalogInの動作確認
# AnalogInの動作確認には、電圧が参照電圧ARefの0.1倍になったらLEDを消すプログラムPotensioMeter.cpp を作って確認しました。
#
# ```C++
# /*
# PotentioMeter
# Turns on an LED on when potentiometer > 0.33V(0.1).
#
# This example code is in the public domain.
# */
# #include "lbed.h"
#
# // Pin 13 has an LED connected on lbeDuino.
# DigitalOut led(D13);
# // Pin A0 has a analog input.
# AnalogIn sensor(A0); // #A
#
# // the setup routine runs once when you press reset:
# void setup() {
# }
#
# // the loop routine runs over and over again forever:
# void loop() {
# float value = sensor;
# if (value > 0.1) // #B
# led = 1;
# else
# led = 0;
# wait_ms(200); // wait for 200 mili seconds.
# }
# ```
# ### Tone
# Toneは、PWMを使用しているため、LPC1114で使えるピンが限られます。 D3, D6, A0がToneとして使用できます。
#
# 以下の様にタクトスイッチを押すと圧電ブザーがなるようにブレッドボードで回路を組みます。
#
#
#
#
# ### Toneの動作確認
# 以下の様なBuzzer.cppを作成し、タクトスイッチを押すとド、レ、ミとなるように します。*2
#
# ```C++
# /*
# Buzzer
# Sound on an buzzer on when button pressed.
#
# This example code is in the public domain.
# */
# #include "lbed.h"
# #include "Tone.h"
#
# int duration = 500;
#
# // Pin 7 has an tact switch on lbeDuino.
# DigitalIn sw(D7);
# // Pin 2 has a buzzer on lbeDuino.
# Tone buzzer(D3); // #A
#
# // the setup routine runs once when you press reset:
# void setup() {
# }
#
# // the loop routine runs over and over again forever:
# void loop() {
# if (!sw) { // #B
# buzzer.tone(262, duration); // ド, 500 msec
# wait_ms(500);
# buzzer.tone(294, duration); // レ, 500 msec
# wait_ms(500);
# buzzer.tone(330, duration); // ミ, 500 msec
# }
# }
# ```
# ### I2C接続のLCD(AQCM0802)
# 秋月でも販売しているI2C接続のLCD *3 とmbedの AQCM0802のライブラリ をlbedに移植したものを使用しました。
#
# lbedとの接続は、以下の通りです。
#
# | lbeDuino | AQCM0802ボード |
# |---|---|
# | 3.3V | 1番(VCC)、2(nRESET) |
# | GND | 5番 GND |
# | D8(SDA) | 4番(SDA) |
# | D9(SCL) | 3番(SCL) |
#
#
#
# ### I2C接続のLCD(AQCM0802)の動作確認
# 以下のI2cLCD.cppを使ってAQCM0802での動作を確認しました。
#
# ```C++
# #include "lbed.h"
# #include "AQCM0802.h"
#
# // D13番ピンにLEDを接続
# DigitalOut led(D13);
# // D8番ピンSDA, D9番ピンSCL
# AQCM0802 lcd(D8, D9);
# // カウンター
# int counter = 0;
#
# void setup() {
# lcd.setup();
# lcd.print("Hello");
# }
#
# void loop() {
# led = !led;
# lcd.locate(0, 1);
# lcd.print("cnt=");
# lcd.print(counter++);
# wait_ms(1000);
# }
# ```
# ## lbeDuinoのソースの取得
# ここで紹介しましたlbeDuinoのソースは、以下のGitHubから取得できます。
#
# - https://github.com/take-pwave/lbed
#
# lbeDuinoに必要なフォルダーは以下の通りです。
#
# - CMSISv2p00_LPC11xx
# - LBED_lbeDuino
# - LBED_lbeDuino_USERLIB
# - LBED_lbeDuino_MAIN
#
# テストプログラムは、LBED_lbeDuino_MAIN/src に置いて下さい。
#
# サンプルプログラムは、Examplesにあります。
#
# ## lbeDuino2号機
# lbeDuinoは思った以上に使えるので、テクノペンとジャンパー線で2号機を作ってみました。
#
#
#
# 1号機に対して以下の改良をしました。
#
# - シリアルコネクターをL字型に変更
# - LPC-LINKとの接続コネクターを一番端に1つずらした。*4
#
# テクノペンのパターンとジャンパー線は、以下の通りです。
#
#
#
# 今回は勇気を出してジャンパー線も公開します。
#
#
#
#
# ## この後
# lbeDuinoのシールドについては、
#
# - Arduino勉強会/0G-lbeDuinoシールドを作る
#
# lbeDuinoの開発環境構築手順については、
#
# - Arduino勉強会/0I-lbeDuinoの開発環境構築
#
# をご覧下さい。
# In[ ]: