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: mbed TextLCD MultiSerial Pswitch
Revision 1:006debaed874, committed 2014-07-14
- Comitter:
- lilac0112_1
- Date:
- Mon Jul 14 09:18:29 2014 +0000
- Parent:
- 0:4baeb4381394
- Child:
- 2:eb1c123c9140
- Commit message:
- ???????????????
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Sat Jul 12 03:43:45 2014 +0000
+++ b/main.cpp Mon Jul 14 09:18:29 2014 +0000
@@ -1,21 +1,71 @@
#include "mbed.h"
-//NC = 調整中なので無機能にしておく
+
+#define DATA_NUM 10 //DATA_NUM[byte]通信
+#define MY_KEYCODE 0xAA//keycode
+#define EN_KEYCODE 0xAA//keycode
+#define KEY 0//number of first data
+#define CHECK DATA_NUM-1//number of last data
+#define TIME_LIMIT 1.0//腕が閉まっても動けるのはTIME_LIMIT[s]まで
+#define ARM_REV .25
+
+volatile uint8_t INdata[DATA_NUM]={0}, EXdata[DATA_NUM]={0};
+volatile uint8_t count=0;
+
+enum Logic{OFF=0, ON};//殆どはモーターのON,OFFに使う
+enum Arm{R=0, L, C};//右腕と左腕
+enum Clip{Open=0, Close};//開ける動作と閉める動作
+
bool GetBit(uint8_t n, uint8_t bit){//n=8[bit]data, bit = 1-8(8bitのデータから指定bitの数値を読み取る)
return (n>>(bit-1))%2;
}
+
BusOut LED(LED1, LED2, LED3, LED4);//確認用
-Ticker flick;
-enum Logic{OFF=0, ON};//殆どはモーターのON,OFFに使う
-//パワーウィンドウ(腕)関連
-#define TimeLimit 1.0//腕が閉まっても動けるのはTimeLimit[s]まで
-#define ArmRev .25
-enum Arm{R=0, L, C};//右腕と左腕
-enum Clip{Open=0, Close};//開ける動作と閉める動作3
+BusIn mt(p5, p6, p7, p8, p9, p10);//Switch
InterruptIn HandSW[3]={p15, p16, p17};//p14, p15, p16//R, L, C
PwmOut HandSpeed[2]={p25, p26};
DigitalOut Hand[2][2]={{p30, p29}, {p28, p27}};//{p17, p18}, {p19, p20}
//ex)Hand[R][Close]=ON;
+Serial pc(USBTX, USBRX);
+Ticker flick;
Timeout Touch;//腕で掴むときの安全対策
+
+void StopCatching(void);//literally
+void StopLeaving(void);//literally
+void StartCatching(void);//literally
+void StartLeaving(void);//literally
+void RightCatch(void);//右腕のリミットスイッチ
+void LeftCatch(void);//左腕のリミットスイッチ
+void CenterCatch(void);//中央のリミットスイッチ
+void illumination(void);//literally
+void SetUp(void);//literally
+
+int main(void) {
+
+ SetUp();
+
+ while(1) {
+
+ INdata[1]= ~mt;
+
+ if(GetBit(INdata[1], 2)==OFF) StopLeaving();//停止
+
+ if((GetBit(INdata[1], 1)+GetBit(INdata[1], 2))==1){//同時押し防止
+ if(GetBit(INdata[1], 1)==true) CenterCatch();//中央のリミットスイッチがうまく動作しなかった場合の保険
+ if(GetBit(INdata[1], 2)==true){//腕を広げる動作はマニュアル操作
+ StopCatching();//停止
+ Touch.detach();//ワンショットタイマー停止
+ Hand[R][Open] = Hand[L][Open] = GetBit(INdata[1], 2);
+ }
+ }
+
+ if(((!HandSW[R])&&(!HandSW[L]))&&((Hand[R][Close]&&Hand[L][Close])==ON)){//どちらも押されたら停止
+ StopCatching();//停止
+ Touch.detach();//ワンショットタイマー停止
+ }
+
+ }
+}
+
void StopCatching(void){//停止
Hand[R][Close]=Hand[L][Close]=OFF;
}
@@ -41,52 +91,25 @@
}
}
void CenterCatch(void){//中央のリミットスイッチ
- Touch.attach(StopCatching, TimeLimit);//TimeLimit[s]で停止
+ Touch.attach(StopCatching, TIME_LIMIT);//TIME_LIMIT[s]で停止
StartCatching();
}
-//通信関連
-#define DATA_NUM 10 //DATA_NUM[byte]通信
-#define MY_KEYCODE 0xAA//keycode
-#define EN_KEYCODE 0xAA//keycode
-#define KEY 0//number of first data
-#define CHECK DATA_NUM-1//number of last data
-
-Serial pc(USBTX, USBRX);
-volatile uint8_t INdata[DATA_NUM]={0}, EXdata[DATA_NUM]={0};
-volatile uint8_t count=0;
-void illumination(){
+void illumination(void){//literally
count++;
LED = count;
}
-
-int main(void) {
- //簡単そうなコードの説明は省く
- BusIn mt(p5, p6, p7, p8, p9, p10);//調整用スイッチ
+void SetUp(void){//literally
+
mt.mode(PullUp);
- HandSpeed[R] = HandSpeed[L] = ArmRev;
+
+ HandSpeed[R] = HandSpeed[L] = ARM_REV;
+
flick.attach(illumination, .5);
- //パワーウィンドウ(腕)関連
+
HandSW[R].mode(PullUp);
HandSW[L].mode(PullUp);
HandSW[C].mode(PullUp);
- HandSW[R].fall(RightCatch);//立ち上がり
- HandSW[L].fall(LeftCatch);//立ち上がり
- HandSW[C].fall(CenterCatch);//立ち上がり
- while(1) {
- //腕のプログラム
- INdata[1]= ~mt;//調整用スイッチ
- if(GetBit(INdata[1], 2)==OFF) StopLeaving();//停止
- if((GetBit(INdata[1], 1)+GetBit(INdata[1], 2))==1){//同時押し防止
- if(GetBit(INdata[1], 1)==true) CenterCatch();//中央のリミットスイッチがうまく動作しなかった場合の保険
- if(GetBit(INdata[1], 2)==true){//腕を広げる動作はマニュアル操作
- StopCatching();//停止
- Touch.detach();//ワンショットタイマー停止
- Hand[R][Open] = Hand[L][Open] = GetBit(INdata[1], 2);
- }
- }
- if(((!HandSW[R])&&(!HandSW[L]))&&((Hand[R][Close]&&Hand[L][Close])==ON)){//どちらも押されたら停止
- StopCatching();//停止
- Touch.detach();//ワンショットタイマー停止
- }
- }
+ HandSW[R].fall(RightCatch);
+ HandSW[L].fall(LeftCatch);
+ HandSW[C].fall(CenterCatch);
}
\ No newline at end of file