1 /* main.cpp for TOPPERS/ATK(OSEK) */
\r
5 #include "Bluetooth.h"
\r
6 #include "BTConnection.h"
\r
8 #include "GyroSensor.h"
\r
9 #include "LightSensor.h"
\r
12 #include "SonarSensor.h"
\r
13 #include "Speaker.h"
\r
14 #include "TouchSensor.h"
\r
16 #include "tsprintf.h"
\r
17 #include "ETLineTracer.h"
\r
18 #include "ETLinePos.h"
\r
19 #include "ETBalanceRunner.h"
\r
20 #include "ETTailControl.h"
\r
21 #include "context.h"
\r
23 using namespace ecrobot;
\r
25 /* sample_c4
\83}
\83N
\83\8d */
\r
26 #define DEVICE_NAME "ET277" /* Bluetooth
\92Ê
\90M
\97p
\83f
\83o
\83C
\83X
\96¼ */ /*
\83`
\81[
\83\80ID
\82É
\95Ï
\8dX
\82µ
\82Ä
\82
\82¾
\82³
\82¢ */
\r
27 #define PASS_KEY "1234" /* Bluetooth
\92Ê
\90M
\97p
\83p
\83X
\83L
\81[ */ /*
\8cÅ
\97L
\82Ì
\83p
\83X
\83L
\81[
\82ð
\90Ý
\92è
\82µ
\82Ä
\82
\82¾
\82³
\82¢ */
\r
28 #define CMD_START '1' /*
\83\8a\83\82\81[
\83g
\83X
\83^
\81[
\83g
\83R
\83}
\83\93\83h */
\r
29 #define CMD_STOP '9' /*
\83\8a\83\82\81[
\83g
\83X
\83g
\83b
\83v
\83R
\83}
\83\93\83h */
\r
35 #include "kernel_id.h"
\r
36 #include "ecrobot_interface.h"
\r
38 DeclareTask(TaskMain);
\r
39 DeclareCounter(SysTimerCnt);//Alarm
\97\98\97p
\8e\9e\95K
\97v
\r
41 // global object instances
\r
47 GyroSensor gyro(PORT_1);
\r
48 SonarSensor sonar(PORT_2);
\r
49 LightSensor light(PORT_3);
\r
50 TouchSensor touch(PORT_4);
\r
51 Motor motorT(PORT_A);
\r
52 Motor motorR(PORT_B);
\r
53 Motor motorL(PORT_C);
\r
55 ETBalanceRunner runner(motorL,motorR,gyro,nxt);
\r
56 ETLinePos linepos(light);
\r
57 ETLineTracer tracer(linepos,runner);
\r
58 ETTailControl tailcontroler(motorT,0);
\r
59 ContextStuff::Context context;
\r
61 /*
\83f
\83o
\83C
\83X
\8fI
\97¹
\97p
\83t
\83b
\83N
\8aÖ
\90\94 */
\r
62 /*
\82±
\82Ì
\8aÖ
\90\94\82ÍSTOP
\82Ü
\82½
\82ÍEXIT
\83{
\83^
\83\93\82ª
\89\9f\82³
\82ê
\82½
\8e\9e\82É
\8eÀ
\8ds
\82³
\82ê
\82Ü
\82·
\81B */
\r
63 void ecrobot_device_terminate()
\r
65 /*
\83Z
\83\93\83T
\81A
\83\82\81[
\83^
\82È
\82Ç
\82Ì
\8ae
\83f
\83o
\83C
\83X
\82Ì
\8fI
\97¹
\8aÖ
\90\94\82ð
\r
66 *
\82±
\82±
\82Å
\8eÀ
\91\95\82·
\82é
\82±
\82Æ
\82ª
\82Å
\82«
\82Ü
\82·
\81B
\r
67 *
\81Ë
\81@
\8cõ
\83Z
\83\93\83T
\90Ô
\90FLED
\82ðOFF
\82É
\82·
\82é
\r
69 //ecrobot_set_light_sensor_inactive(SENSOR_LIGHT);
\r
70 ecrobot_term_bt_connection(); /* Bluetooth
\92Ê
\90M
\82ð
\8fI
\97¹ */ //ex4
\r
74 // nxtOSEK hook to be invoked from an ISR in category 2
\r
75 void user_1ms_isr_type2(void)
\r
77 // //Sleep
\97\98\97p
\8e\9e\95K
\97v
\r
79 // //Alarm
\97\98\97p
\8e\9e\95K
\97v
\r
81 ercd = SignalCounter(SysTimerCnt);
\r
87 /* Bluetooth
\92Ê
\90M
\97p
\83f
\81[
\83^
\8eó
\90M
\83o
\83b
\83t
\83@ */
\r
88 static char rx_buf[BT_MAX_RX_BUF_SIZE];
\r
90 /*****************************************************************************
\r
91 \8aÖ
\90\94\96¼ : Bluetooth_isReceived
\r
92 \88ø
\90\94 :
\8eó
\90M
\91Ò
\82¿
\83R
\83}
\83\93\83h
\r
93 \95Ô
\82è
\92l : 1(
\83X
\83^
\81[
\83g)/0(
\91Ò
\8b@)
\r
94 \8aT
\97v : Bluetooth
\92Ê
\90M
\82É
\82æ
\82é
\83\8a\83\82\81[
\83g
\83X
\83^
\81[
\83g
\81B Tera Term
\82È
\82Ç
\82Ì
\83^
\81[
\83~
\83i
\83\8b\83\
\83t
\83g
\82©
\82ç
\81A
\r
95 ASCII
\83R
\81[
\83h
\82Å1
\82ð
\91\97\90M
\82·
\82é
\82Æ
\81A
\83\8a\83\82\81[
\83g
\83X
\83^
\81[
\83g
\82·
\82é
\81B
\r
96 *****************************************************************************/
\r
97 BOOL Bluetooth_isReceived(char cmd)
\r
100 unsigned int rx_len;
\r
101 unsigned char come = 0;
\r
103 for (i=0; i<BT_MAX_RX_BUF_SIZE; i++)
\r
105 rx_buf[i] = 0; /*
\8eó
\90M
\83o
\83b
\83t
\83@
\82ð
\83N
\83\8a\83A */
\r
108 rx_len = ecrobot_read_bt(rx_buf, 0, BT_MAX_RX_BUF_SIZE);
\r
111 /*
\8eó
\90M
\83f
\81[
\83^
\82 \82è */
\r
112 if (rx_buf[0] == cmd)
\r
114 come = 1; /*
\83R
\83}
\83\93\83h
\8eó
\90M */
\r
116 ecrobot_send_bt(rx_buf, 0, rx_len); /*
\8eó
\90M
\83f
\81[
\83^
\82ð
\83G
\83R
\81[
\83o
\83b
\83N */
\r
122 bool is_touched(TouchSensor& touch,ETTailControl& tailcontroler)
\r
124 tailcontroler.Control();
\r
125 if(touch.isPressed()){
\r
126 systick_wait_ms(30);
\r
127 while(touch.isPressed()){
\r
128 tailcontroler.Control();
\r
130 systick_wait_ms(30);
\r
137 void waitstart(TouchSensor& touch,ETTailControl& tailcontroler,char cmd)
\r
139 /*
\83^
\83b
\83`
\83Z
\83\93\83T
\82ª
\89\9f\82³
\82ê
\82é
\82Ü
\82Å
\81A
\91Ò
\82¿
\91±
\82¯
\82é */
\r
141 if (is_touched(touch,tailcontroler)){
\r
144 if (Bluetooth_isReceived(CMD_START)){
\r
152 //bt.setFriendlyName(DEVICE_NAME);
\r
153 BTConnection btConnection(bt, lcd, nxt);
\r
154 btConnection.connect(PASS_KEY);
\r
156 lcd.putf("s", "Hello World");
\r
158 tailcontroler.Init();
\r
159 tailcontroler.SetAngle(ETTailControl::ANGLE_STAND_UP);
\r
162 // TODO:
\82Æ
\82è
\82 \82¦
\82¸
\82Ì
\83L
\83\83\83\8a\83u
\83\8c\81[
\83V
\83\87\83\93\r
163 static const int sum_num = 256;
\r
164 unsigned long sum = 0;
\r
166 //
\83W
\83\83\83C
\83\8d\r
167 while(!is_touched(touch,tailcontroler)) {}
\r
168 for(int i=0;i<sum_num;i++){
\r
172 unsigned long offset = sum / sum_num;
\r
173 runner.SetGyroOffset(offset);
\r
174 tsprintf(str,"Offset = %d",offset);
\r
178 speaker.playTone(1000,100,50);
\r
181 while(!is_touched(touch,tailcontroler)) {}
\r
183 for(int i=0;i<sum_num;i++){
\r
184 sum += light.getBrightness();
\r
187 unsigned long white = sum / sum_num;
\r
188 linepos.SetWhite(white);
\r
189 tsprintf(str,"White = %d",white);
\r
193 speaker.playTone(1200,100,50);
\r
196 while(!is_touched(touch,tailcontroler)) {}
\r
198 for(int i=0;i<sum_num;i++){
\r
199 sum += light.getBrightness();
\r
202 unsigned long black = sum / sum_num;
\r
203 linepos.SetBlack(black);
\r
204 tsprintf(str,"Black = %d",black);
\r
208 speaker.playTone(1400,100,50);
\r
210 //wait for touch or bluetooth.
\r
211 waitstart(touch,tailcontroler,CMD_START);
\r
213 tailcontroler.SetAngle(ETTailControl::ANGLE_DRIVE);
\r
214 context.SetETLineTracer(&tracer);
\r
220 if(touch.isPressed()){
\r
221 // motorR.setPWM(0);
\r
222 // motorL.setPWM(0);
\r
225 ActivateTask(TaskMain);
\r
229 context.Display(lcd);
\r
230 context.CyclicExcute();
\r
231 tailcontroler.Control();
\r
236 int __cxa_pure_virtual(){
\r
237 //
\8f\83\90\88\89¼
\91z
\8aÖ
\90\94\82ª
\83I
\81[
\83o
\81[
\83\89\83C
\83h
\82µ
\82È
\82¢
\82Å
\8cÄ
\82Ñ
\8fo
\82³
\82ê
\82½
\8e\9e\82Ì
\83G
\83\89\81[
\83n
\83\93\83h
\83\89\82ð
\8bó
\8eÀ
\91\95\r
238 //
\82±
\82ê
\82ð
\93ü
\82ê
\82È
\82¢
\82Æram
\8eg
\97p
\97Ê
\82ª
\82Æ
\82Ä
\82à
\91\9d\82¦
\82é
\81E
\81E
\81E
\r