OSDN Git Service

状態遷移クラスを導入
[tondenhei/et2013.git] / main.cpp
1 /* main.cpp for TOPPERS/ATK(OSEK) */ \r
2 \r
3 // ECRobot++ API\r
4 #include "Lcd.h"\r
5 #include "Bluetooth.h"\r
6 #include "Clock.h"\r
7 #include "GyroSensor.h"\r
8 #include "LightSensor.h"\r
9 #include "Motor.h"\r
10 #include "Nxt.h"\r
11 #include "SonarSensor.h"\r
12 #include "Speaker.h"\r
13 #include "TouchSensor.h"\r
14 \r
15 #include "tsprintf.h"\r
16 #include "ETLineTracer.h"\r
17 #include "ETLinePos.h"\r
18 #include "ETBalanceRunner.h"\r
19 #include "context.h"\r
20 \r
21 using namespace ecrobot;\r
22 \r
23 extern "C"\r
24 {\r
25 #include "kernel.h"\r
26 #include "kernel_id.h"\r
27 #include "ecrobot_interface.h"\r
28 \r
29 DeclareCounter(SysTimerCnt);//Alarm\97\98\97p\8e\9e\95K\97v\r
30 \r
31 // global object instances\r
32 Nxt nxt;\r
33 Lcd lcd;\r
34 Speaker speaker;\r
35 Bluetooth bt;\r
36 Clock clock;\r
37 GyroSensor gyro(PORT_1);\r
38 SonarSensor sonar(PORT_2);\r
39 LightSensor light(PORT_3);\r
40 TouchSensor touch(PORT_4);\r
41 Motor motorT(PORT_A);\r
42 Motor motorR(PORT_B);\r
43 Motor motorL(PORT_C);\r
44 \r
45 ETBalanceRunner runner(motorL,motorR,gyro,nxt);\r
46 ETLinePos linepos(light);\r
47 ETLineTracer tracer(linepos,runner);\r
48 ContextStuff::Context context;\r
49  \r
50 // nxtOSEK hook to be invoked from an ISR in category 2\r
51 void user_1ms_isr_type2(void)\r
52 {\r
53     //  //Sleep\97\98\97p\8e\9e\95K\97v\r
54     SleeperMonitor();\r
55     //  //Alarm\97\98\97p\8e\9e\95K\97v\r
56     StatusType ercd;\r
57     ercd = SignalCounter(SysTimerCnt);\r
58     if (ercd != E_OK) {\r
59         ShutdownOS(ercd);\r
60     }\r
61 }\r
62 \r
63 TASK(TaskMain)\r
64 {\r
65         lcd.clear();\r
66         lcd.putf("s", "Hello World");\r
67         lcd.disp();\r
68 \r
69         // TODO:\82Æ\82è\82 \82¦\82¸\82Ì\83L\83\83\83\8a\83u\83\8c\81[\83V\83\87\83\93\r
70         static const int sum_num = 256;\r
71         unsigned long sum = 0;\r
72         char str[16+1];\r
73         // \83W\83\83\83C\83\8d\r
74         while(!touch.isPressed()){\r
75         }\r
76         while(touch.isPressed()){\r
77         }\r
78         for(int i=0;i<sum_num;i++){\r
79                 sum += gyro.get();\r
80                 clock.wait(10);\r
81         }\r
82         unsigned long offset = sum / sum_num;\r
83         runner.SetGyroOffset(offset);\r
84         tsprintf(str,"Offset = %d",offset);\r
85         lcd.cursor(0,1);\r
86         lcd.putf("s",str);\r
87         lcd.disp();\r
88         speaker.playTone(1000,100,50);\r
89 \r
90         // \94\92\r
91         while(!touch.isPressed()){\r
92         }\r
93         while(touch.isPressed()){\r
94         }\r
95         sum = 0;\r
96         for(int i=0;i<sum_num;i++){\r
97                 sum += light.getBrightness();\r
98                 clock.wait(10);\r
99         }\r
100         unsigned long white = sum / sum_num;\r
101         linepos.SetWhite(white);\r
102         tsprintf(str,"White = %d",white);\r
103         lcd.cursor(0,2);\r
104         lcd.putf("s",str);\r
105         lcd.disp();\r
106         speaker.playTone(1200,100,50);\r
107 \r
108         // \8d\95\r
109         while(!touch.isPressed()){\r
110         }\r
111         while(touch.isPressed()){\r
112         }\r
113         sum = 0;\r
114         for(int i=0;i<sum_num;i++){\r
115                 sum += light.getBrightness();\r
116                 clock.wait(10);\r
117         }\r
118         unsigned long black = sum / sum_num;\r
119         linepos.SetBlack(black);\r
120         tsprintf(str,"Black = %d",black);\r
121         lcd.cursor(0,3);\r
122         lcd.putf("s",str);\r
123         lcd.disp();\r
124         speaker.playTone(1400,100,50);\r
125 \r
126         while(!touch.isPressed()){\r
127         }\r
128         while(touch.isPressed()){\r
129         }\r
130     \r
131     context.SetETLineTracer(&tracer);\r
132         TerminateTask();\r
133 }\r
134 \r
135 TASK(Task4ms)\r
136 {\r
137     context.Display(lcd);\r
138     context.CyclicExcute();\r
139 \r
140         TerminateTask();\r
141 }\r
142 \r
143 int __cxa_pure_virtual(){\r
144         // \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
145         // \82±\82ê\82ð\93ü\82ê\82È\82¢\82Æram\8eg\97p\97Ê\82ª\82Æ\82Ä\82à\91\9d\82¦\82é\81E\81E\81E\r
146         return 0;\r
147 }\r
148 \r
149 }       // extern "C"\r