str/apps/include/PuzzleLineTracer.h (110 lines of code) (raw):

#ifndef __PUZZLELINETRACER__ #define __PUZZLELINETRACER__ #include "ev3api.h" #include "Walker.h" #include "ColorSensor.h" #include "Distance.h" #include "LineTracerWalker.h" #define X 0x00 #define PUZZLE_POSITION_CURRENT 16 #define PUZZLE_POSITION_NEXT 16 #define PUZZLE_POSITION_DESTINATE 5 #define PUZZLE_POLAR_COODINATE 2 #define DEGREE 0 #define DISTANCE 1 #define PUZZLE_LINE_LONG 1130 #define PUZZLE_LINE_NORMAL 770 #define PUZZLE_LINE_SHORT 500 using namespace ev3api; class PuzzleLineTracer { public: PuzzleLineTracer () ; void preparatePuzzle ( void ) ; void puzzleLineTrace ( int8_t, int8_t, int8_t ) ; private: Walker walker ; ColorSensor colorSensor; LineTracerWalker lineTracer; Distance distance; int8_t color ; int8_t forward; int32_t traceDistance ; int8_t currentDegree ; int8_t leftMotorDeg ; int8_t rightMotorDeg ; int8_t connectPosition ; int8_t beforeConnectPosition ; int8_t beforeDegree ; int8_t nextDegree ; int32_t nextDistance ; int8_t moveDegree ; int8_t connectNumberManager[PUZZLE_POSITION_CURRENT][PUZZLE_POSITION_NEXT] = { /* 接続ノード番号付与テーブル ( 'X'は非接続を示す ) */ /* N E X T */ /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, */ /* 0 */{ X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X }, /* 1 */{ X, X, 0, X, X, 1, X, X, X, X, 2, X, X, X, X, X }, /* 2 */{ X, 0, X, 1, X, 2, 3, X, X, X, X, X, X, X, X, X }, /* 3 */{ X, X, 0, X, 1, X, 2, 3, X, X, X, X, X, X, X, X }, /* C 4 */{ X, X, X, 0, X, X, X, 1, X, X, X, 2, X, X, X, X }, /* U 5 */{ X, 0, 1, X, X, X, X, X, 2, X, 3, X, X, X, X, X }, /* R 6 */{ 0, X, 1, 2, X, X, X, X, 3, 4, X, X, X, X, X, X }, /* R 7 */{ X, X, X, 0, 1, X, X, X, X, 2, X, 3, X, X, X, X }, /* E 8 */{ 0, X, X, X, X, 1, 2, X, X, X, X, X, 3, 4, X, X }, /* N 9 */{ 0, X, X, X, X, X, 1, 2, X, X, X, X, X, X, 3, 4 }, /* T 10 */{ X, 0, X, X, X, 1, X, X, X, X, X, X, 2, X, X, X }, /* 11 */{ X, X, X, X, 0, X, X, 1, X, X, X, X, X, X, X, 2 }, /* 12 */{ X, X, X, X, X, X, X, X, 0, X, 1, X, X, 2, X, X }, /* 13 */{ 0, X, X, X, X, X, X, X, 1, X, X, X, 2, X, 3, X }, /* 14 */{ 0, X, X, X, X, X, X, X, X, 1, X, X, X, 2, X, 3 }, /* 15 */{ X, X, X, X, X, X, X, X, X, 0, X, 1, X, X, 2, X } } ; int32_t allConnectPosition[PUZZLE_POSITION_CURRENT][PUZZLE_POSITION_DESTINATE][PUZZLE_POLAR_COODINATE] = { { /* 0 */{ X, X }, { X, X }, { X, X }, { X, X }, { X, X } }, { /* 1 */{ 0, PUZZLE_LINE_LONG }, { -30, PUZZLE_LINE_SHORT }, { -75, PUZZLE_LINE_NORMAL }, { 0, 0 }, { 0, 0 } }, { /* 2 */{ 180, PUZZLE_LINE_LONG }, { 0, PUZZLE_LINE_LONG }, { -150, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { X, X } }, { /* 3 */{ 180, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_LONG }, { -150, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { X, X } }, { /* 4 */{ 180, PUZZLE_LINE_LONG }, { -150, PUZZLE_LINE_SHORT }, { -105, PUZZLE_LINE_NORMAL }, { 0, 0 }, { X, X } }, { /* 5 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -120, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { X, X } }, { /* 6 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -150, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { X, X } }, { /* 7 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -150, PUZZLE_LINE_SHORT }, { -60, PUZZLE_LINE_SHORT }, { X, X } }, { /* 8 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -120, PUZZLE_LINE_SHORT }, { -60, PUZZLE_LINE_SHORT }, { X, X } }, { /* 9 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -120, PUZZLE_LINE_SHORT }, { -60, PUZZLE_LINE_SHORT }, { X, X } }, { /* 10 */{ 105, PUZZLE_LINE_NORMAL }, { 60, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { 0, 0 }, { X, X } }, { /* 11 */{ 75, PUZZLE_LINE_NORMAL }, { 120, PUZZLE_LINE_SHORT }, { -150, PUZZLE_LINE_SHORT }, { 0, 0 }, { X, X } }, { /* 12 */{ 60, PUZZLE_LINE_SHORT }, { 150, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_SHORT }, { 0, 0 }, { X, X } }, { /* 13 */{ 0, 0 }, { 120, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_SHORT }, { X, X } }, { /* 14 */{ 60, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_SHORT }, { 0, 0 }, { X, X } }, { /* 15 */{ 120, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_SHORT }, { 0, 0 }, { X, X } }, } ; } ; #endif