#ifndef ET_UTILITYSTUFF_H\r
#define ET_UTILITYSTUFF\r
\r
+#include "GyroSensor.h"\r
+#include "LightSensor.h"\r
+#include "Clock.h"\r
+\r
namespace ecrobot{\r
class TouchSensor;\r
class ETTailControl;\r
-\r
+ class Lcd;\r
+ class Speaker;\r
struct ETBluetoothString{\r
static const char* PASS_KEY;\r
static const char CMD_START;\r
bool IsBluetoothReceived(char cmd);\r
bool Istouched(ecrobot::TouchSensor& touch,ecrobot::ETTailControl& tailcontroler);\r
void Waitstart(ecrobot::TouchSensor& touch,ecrobot::ETTailControl& tailcontroler,char cmd);\r
+ void DisplayCalibResult(Lcd& lcd,\r
+ Speaker& speaker,\r
+ char* disp,\r
+ const unsigned long offset,\r
+ const int tone,\r
+ const unsigned long y);\r
+\r
+ template<class T>\r
+ struct traits{\r
+ unsigned long foo(T& x){\r
+ return 0;\r
+ }\r
+ };\r
+\r
+ //traitsクラス(デフォルトはアルゴリズムA)\r
+ template<>\r
+ struct traits<GyroSensor>{\r
+ static unsigned long foo(GyroSensor& x){\r
+ return x.get();\r
+ }\r
+ };\r
+ //traitsクラス(Hoge型はアルゴリズムB)\r
+ template<>\r
+ struct traits<LightSensor>{\r
+ static unsigned long foo(LightSensor& x){\r
+ return x.getBrightness();\r
+ }\r
+ };\r
+\r
+ //タグごとに処理を切り替えて実行\r
+ template<class T>\r
+ unsigned long GetOffset(T & x,Clock& clock){\r
+ const int sum_num = 256;\r
+ unsigned long sum = 0;\r
+ for(int i=0;i<sum_num;i++){\r
+ sum += traits<T>::foo(x);\r
+ clock.wait(10);\r
+ }\r
+ return sum / sum_num;\r
+ }\r
}\r
}\r
#endif /* ET_UTILITYSTUFF */\r
ecrobot_term_bt_connection(); /* Bluetooth\92Ê\90M\82ð\8fI\97¹ */ //ex4\r
}\r
\r
- \r
// nxtOSEK hook to be invoked from an ISR in category 2\r
void user_1ms_isr_type2(void)\r
{\r
tailcontroler.Init();\r
tailcontroler.SetAngle(ETTailControl::ANGLE_STAND_UP);\r
\r
- // TODO:\82Æ\82è\82 \82¦\82¸\82Ì\83L\83\83\83\8a\83u\83\8c\81[\83V\83\87\83\93\r
- static const int sum_num = 256;\r
- unsigned long sum = 0;\r
- char str[16+1];\r
+ // \83L\83\83\83\8a\83u\83\8c\81[\83V\83\87\83\93\r
// \83W\83\83\83C\83\8d\r
while(!ETUtilityStuff::Istouched(touch,tailcontroler)) {}\r
- for(int i=0;i<sum_num;i++){\r
- sum += gyro.get();\r
- clock.wait(10);\r
- }\r
- unsigned long offset = sum / sum_num;\r
+ unsigned long offset = ETUtilityStuff::GetOffset(gyro,clock);\r
runner.SetGyroOffset(offset);\r
- tsprintf(str,"Offset = %d",offset);\r
- lcd.cursor(0,1);\r
- lcd.putf("s",str);\r
- lcd.disp();\r
- speaker.playTone(1000,100,50);\r
+ //display to LCD\r
+ ETUtilityStuff::DisplayCalibResult(lcd,speaker,"Offset = %d",offset,1000,1);\r
\r
// \94\92\r
while(!ETUtilityStuff::Istouched(touch,tailcontroler)) {}\r
- sum = 0;\r
- for(int i=0;i<sum_num;i++){\r
- sum += light.getBrightness();\r
- clock.wait(10);\r
- }\r
- unsigned long white = sum / sum_num;\r
+ unsigned long white = ETUtilityStuff::GetOffset(light,clock);\r
linepos.SetWhite(white);\r
- tsprintf(str,"White = %d",white);\r
- lcd.cursor(0,2);\r
- lcd.putf("s",str);\r
- lcd.disp();\r
- speaker.playTone(1200,100,50);\r
+ //display to LCD\r
+ ETUtilityStuff::DisplayCalibResult(lcd,speaker,"White = %d",white,1200,2);\r
\r
// \8d\95\r
while(!ETUtilityStuff::Istouched(touch,tailcontroler)) {}\r
- sum = 0;\r
- for(int i=0;i<sum_num;i++){\r
- sum += light.getBrightness();\r
- clock.wait(10);\r
- }\r
- unsigned long black = sum / sum_num;\r
+ unsigned long black = ETUtilityStuff::GetOffset(light,clock);\r
linepos.SetBlack(black);\r
- tsprintf(str,"Black = %d",black);\r
- lcd.cursor(0,3);\r
- lcd.putf("s",str);\r
- lcd.disp();\r
- speaker.playTone(1400,100,50);\r
+ //display to LCD\r
+ ETUtilityStuff::DisplayCalibResult(lcd,speaker,"Black = %d",black,1400,3);\r
\r
//wait for touch or bluetooth.\r
ETUtilityStuff::Waitstart(touch,tailcontroler,ETBluetoothString::CMD_START);\r