組み立てたところ。左側はグラフィックディスプレイを接続するところ。上は加速度センサー。スピーカーはペットボトルのキャップにはまるサイズを使ってはめてやるとそれなりにいい音になります。 | |
回路は右の図のようになります。
SMOD0、SMOD1はI2Cを使うのでそれぞれSMOD0=0、SMOD1=1とします。 PMOD0、PMOD1はコマンド入力モードにするのでそれぞれ1とします。この端子は内部でプルアップしてあるので何もしなくても問題ありません。写真では、チェックのためにセーフモードにしています。動作的には同じです。 SCL(28番ピン)----->CPUの19番ピン SDA(27番ピン)----->CPUの18番ピン 4.7kΩのプルアップ抵抗を忘れない AOUT(12番ピン)----4.7kΩ---2SC1815のベース 2SC1815のコレクタ側にスピーカをつなげる |
I2CVoice.cs | |
---|---|
#define GHIE //#define SecretLabs using System; using System.Threading; using Microsoft.SPOT; using Microsoft.SPOT.Hardware; #if GHIE using GHI.OSHW.Hardware; // FEZCerberus使用のため追加、参照設定にも追加 #elif SecretLabs using SecretLabs.NETMF.Hardware; #endif using BoeBotLib; namespace BoeBotLib { class I2Voice { // Set Constants for Address and Clock Frequency const byte LCD_ADDRESS = 0x2E; const int CLOCK_FREQ = 100; const int TIMEOUT = 1000; //Write Buffer byte[] WriteBuffer = new byte[3]; //Init I2C Device Config I2CDevice.Configuration config = new I2CDevice.Configuration(LCD_ADDRESS, CLOCK_FREQ); //Init I2C Device & LCD initialize I2CDevice i2c; public I2Voice() { i2c = new I2CDevice(config); } // 1バイトの転送 public void write(byte data) { i2c.Execute(new I2CDevice.I2CTransaction[1] { I2CDevice.CreateWriteTransaction(new Byte[] {data }) }, TIMEOUT); } void wait_us(int tm) { BoeBotLib.Timer.delay(tm * 10); } void wait_ms(int tm) { BoeBotLib.CPU.delay(tm); } public void write(String str) { foreach (byte ch in str) write(ch); write(0x0d); } public void write(byte[] str, int n) { for (int i = 0; i < n; i++) write(str[i]); } public void write(byte[] str) { i2c.Execute(new I2CDevice.I2CTransaction[1] { I2CDevice.CreateWriteTransaction(str) }, TIMEOUT); } public void Write(String str) { byte[] ch = System.Text.Encoding.UTF8.GetBytes(str); i2c.Execute(new I2CDevice.I2CTransaction[1] { I2CDevice.CreateWriteTransaction(ch) }, TIMEOUT); write(0x0d); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
Mainプログラム | |
---|---|
using System; using System.Threading; // 追加 using Microsoft.SPOT; using Microsoft.SPOT.Hardware; // 追加、参照設定にも追加 using GHI.OSHW.Hardware; // 追加、参照設定にも追加 using GHI.Hardware.FEZCerb; // 追加、参照設定にも追加 using BoeBotLib; using Pin = GHI.Hardware.FEZCerb.Pin; namespace BoeBotLib { public class Program { // OutputPort LED1 = new OutputPort(Pin.PC0, false); DigitalOut LED1 = new DigitalOut(CPU.P22); public static void Main() { Console.setBaud(); new Program().main(); } private void main() { I2Voice voice = new I2Voice(); while (true) { voice.Write("ashi'/ta'/no'/te'/n/kiwa/hare'/de/suga /asa'/tte'/wa/tai'/hu-'/no/rai'shu-/de/su."); CPU.delay(1500); } } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |