Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: TextLCD mbed MultiSerial Pswitch_Lib
Revision 3:cfd7cd361088, committed 2014-09-08
- Comitter:
- lilac0112_1
- Date:
- Mon Sep 08 02:39:40 2014 +0000
- Parent:
- 2:7820849bf534
- Child:
- 4:39edc16ee5c3
- Commit message:
- ?????
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Pswitch_Lib.lib Mon Sep 08 02:39:40 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/MBE13170/code/Pswitch_Lib/#a0eb75ae437f
--- a/ReadMe.txt Thu Sep 04 22:17:32 2014 +0000
+++ b/ReadMe.txt Mon Sep 08 02:39:40 2014 +0000
@@ -1,45 +1,123 @@
仕様書
-
+●マイコンのピンの使用状況
ピン 接続先 備考
p4 プッシュスイッチ リセットボタン
p5 トグルスイッチ
-p6 YellowLED
+p6 黄色LED
p7 右十字キー 予約
-p8 右十字キー Yellow
+p8 右十字キー 黄
p9 スライドスイッチ>Xbee 送信
p10 スライドスイッチ>Xbee 受信
-p11 右十字キー Red
+p11 右十字キー 赤
p12 右十字キー 予約
p13 スライドスイッチ>Xbee 送信
p14 スライドスイッチ>Xbee 受信
-p15 右十字キー Green
-p16 右十字キー Blue
-p17 右サイドキー 人差し指
-p18 右サイドキー 中指
-p19 左サイドキー 中指
-p20 左サイドキー 人差し指
+p15 右十字キー 緑
+p16 右十字キー 青
+p17 右サイドキー 赤
+p18 右サイドキー 青
+p19 左サイドキー 青
+p20 左サイドキー 赤
p21 LCD d7
p22 LCD d6
p23 LCD d5
p24 LCD d4
p25 LCD e
p26 LCD rs
-p27 左十字キー Blue
-p28 左十字キー Green
-p29 左十字キー Red
-p30 左十字キー Yellow
-LED1 illumination()
-LED2 illumination()
-LED3 illumination()
-LED4 illumination()
+p27 左十字キー 青
+p28 左十字キー 緑
+p29 左十字キー 赤
+p30 左十字キー 黄
+
+●LCDの表示 ”Hello World!”
-LCDの表示 ”Hello World!”
-
-2byte通信
-1byte 十字キー
-2byte サイドキー
-
-9600bps
-キーコード 0xAA
-
+●通信
+モジュール Xbee
+通信速度 9600bps
+データサイズ 2byte
+1byte目 十字キー
+2byte目 サイドキー
+ライブラリ MultiSerial.h
+キーコード 0xAA
+チェックコード 0x??^0x??^...
+※ライブラリでは割り込みを使っています.
+ライブラリ作成者が参考にした割り込みの関数とそれに使ったマクロ定義,変数宣言が以下に記されています.
+ライブラリを使用しない場合は参考にしてください.
+____________________________________________
+#define DATA_NUM 8+2//2byte→KEYCODEとCHECKCODE 8byte→やりとりするデータ
+#define TX_KEYCODE 0xBB//あちらのKEYCODE
+#define RX_KEYCODE 0xAA//こちらのKEYCODE
+#define KEY 0//KEYCODEは配列の最初
+#define CHECK DATA_NUM-1//CHECKCODEは配列の最後
+volatile uint8_t INdata[DATA_NUM]={0}, EXdata[DATA_NUM]={0};
+void TX(void){//送信バッファ空き割り込み用関数
+
+ static uint8_t Tx=DATA_NUM, i;
+ static uint8_t TXdata[DATA_NUM]={TX_KEYCODE};
+ static uint8_t TXcheckcode=0;
+
+ if(Tx >= DATA_NUM){
+
+ TXdata[KEY] = TX_KEYCODE;//Hello.
+
+ TXdata[1] = EXdata[1];
+ TXdata[2] = EXdata[2];
+ TXdata[3] = EXdata[3];
+ TXdata[4] = EXdata[4];
+ TXdata[5] = EXdata[5];
+ TXdata[6] = EXdata[6];
+ TXdata[7] = EXdata[7];
+ TXdata[8] = EXdata[8];
+ //送信するデータ = メインで処理されたデータ
+
+ for(i=KEY+1, TXcheckcode=0; i<CHECK; i++){//CHECKCODEの生成
+ TXcheckcode ^= TXdata[i];
+ }
+
+ TXdata[CHECK] = TXcheckcode;//Good bye.
+ Tx=0;//配列をリセット
+
+ }
+ Xbee.putc(TXdata[Tx]);//データを送信する
+ Tx++;//配列を入れ替える
+
+}
+void RX(void){//受信割り込み用関数
+
+ static uint8_t Rx=0, i;
+ static uint8_t RXdata[DATA_NUM]={RX_KEYCODE};
+ static uint8_t RXcheckcode=0;
+
+ RXdata[Rx] = Xbee.getc();//データを受け取る
+
+ if(RXdata[KEY]==RX_KEYCODE){//KEYCODEが一致したら配列を入れ替える
+ Rx++;
+ }
+
+ if(Rx==CHECK){//CHECKCODEの生成
+ for(i=KEY+1, RXcheckcode=0; i<CHECK; i++){
+ RXcheckcode ^= RXdata[i];
+ }
+ }
+
+ if(Rx >= DATA_NUM){
+ if(RXdata[CHECK]==RXcheckcode){//CHECKCODEが合致したらデータを適用する
+
+ INdata[1] = RXdata[1];
+ INdata[2] = RXdata[2];
+ INdata[3] = RXdata[3];
+ INdata[4] = RXdata[4];
+ INdata[5] = RXdata[5];
+ INdata[6] = RXdata[6];
+ INdata[7] = RXdata[7];
+ INdata[8] = RXdata[8];
+ //メインで処理されるデータ = 受け取ったデータ
+
+ }
+ Rx=0;//配列をリセット
+ }
+
+}
+________________________________________________________
+●ハード
基板データは共有PCのデスクトップに乗せてあります.
\ No newline at end of file
--- a/main.cpp Thu Sep 04 22:17:32 2014 +0000
+++ b/main.cpp Mon Sep 08 02:39:40 2014 +0000
@@ -15,7 +15,6 @@
volatile uint8_t count=0;
void SetUp();
-bool GetBit(uint8_t n, uint8_t bit);
uint8_t LinkBit(bool eight, bool seven, bool six, bool five, bool fore, bool three, bool two, bool one);
void illumination();
@@ -40,10 +39,16 @@
while(1) {
YLED=!Toggle;
+ if(Toggle){
+
+ EXdata[0] = LinkBit(!CrossKey[YELLOW][LEFT], !CrossKey[RED][LEFT], !CrossKey[GREEN][LEFT], !CrossKey[BLUE][LEFT],
+ !CrossKey[YELLOW][RIGHT], !CrossKey[RED][RIGHT], !CrossKey[GREEN][RIGHT], !CrossKey[BLUE][RIGHT]);
+ EXdata[1] = LinkBit(0, 0, 0, 0, !SideKey[INDEX][LEFT], !SideKey[MIDDLE][LEFT], !SideKey[INDEX][RIGHT], !SideKey[MIDDLE][RIGHT]);
+ }else{
+
+ EXdata[0] = EXdata[1] = 0x00;
+ }
- EXdata[0] = LinkBit(!CrossKey[YELLOW][LEFT], !CrossKey[RED][LEFT], !CrossKey[GREEN][LEFT], !CrossKey[BLUE][LEFT],
- !CrossKey[YELLOW][RIGHT], !CrossKey[RED][RIGHT], !CrossKey[GREEN][RIGHT], !CrossKey[BLUE][RIGHT]);
- EXdata[1] = LinkBit(0, 0, 0, 0, !SideKey[INDEX][LEFT], !SideKey[MIDDLE][LEFT], !SideKey[INDEX][RIGHT], !SideKey[MIDDLE][RIGHT]);
}
}
@@ -71,9 +76,6 @@
flick.attach(illumination, INTERVAL);
}
-bool GetBit(uint8_t n, uint8_t bit){//整数nのbitビット目は1か0か.
- return (n>>(bit-1))%2;
-}
uint8_t LinkBit(bool eight, bool seven, bool six, bool five, bool fore, bool three, bool two, bool one){//0と1を集めて整数を作る
return 0x80*eight + 0x40*seven + 0x20*six + 0x10*five + 0x08*fore + 0x04*three + 0x02*two + 0x01*one;
}