OSDN Git Service

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