etrobocon2018 feat.KatLab  770af34cce41ae9c30c41303275e1add2daae0c3 (with uncommitted changes)
 全て クラス 名前空間 ファイル 関数 変数 列挙型 列挙値 フレンド マクロ定義 ページ
LeftCourse.cpp
[詳解]
1 
6 #include "LeftCourse.h"
7 
8 void LeftCourse::setFirstCode(int32_t code)
9 {
10  firstCode = code;
11 }
12 
16 void LeftCourse::run(int16_t brightness, int16_t black, int16_t white, int16_t gray)
17 {
18  // runNormalCourse(brightness);
19 
20  controller.printDisplay(3, "Finished NormalArea");
21 
22  aiAnswerGo(brightness, black, white, gray);
23  // Puzzle
24  // runBlockRange();
25  // controller.printDisplay(3, "Finished Puzzle");
26  target_brightness = brightness;
27  // Park
28  // solveAiAnser();
29  runParking(brightness, black, white, gray);
30 }
31 
32 void LeftCourse::aiAnswerGo(int16_t brightness, int16_t black, int16_t white, int16_t gray)
33 {
34  AIAnswer ai_answer{ controller, walker, white, black, gray, brightness };
35  ai_answer.run();
36 }
37 
38 // 黒線上を走る
40 {
41  walker.reset();
42  // 時計回りに45°回転
43  walker.angleChange(45, -1);
44  walker.run(10, 0);
45  controller.tslpTsk(1000);
46  while(1) {
47  // 現在の色取得
48  int16_t luminance = controller.getBrightness();
49  if(luminance <= 51) {
50  // 左に30度回転
51  controller.tslpTsk(100);
52  walker.angleChange(30, 1);
53  // basic.spin(basic.SPIN_LEFT, 30);
54  runGoStraight();
55  break;
56  }
57  if(controller.buttonIsPressedBack()) {
58  walker.reset();
59  break;
60  }
61  controller.tslpTsk(4);
62  }
63 }
64 
66 {
67  walker.reset();
68  int16_t luminance = 0;
69  int32_t aiDistance = 0;
70  lineTracer.speedControl.setPid(2.0, 0.8, 0.1, 20.0);
71  lineTracer.turnControl.setPid(1.1, 0.1, 0.2, target_brightness); // 2.0,0.2,0.4 最高か
72  while(1) {
73  luminance = controller.getBrightness();
74  aiDistance = motor_angle.absoluteAngleMean(walker.get_count_L(), walker.get_count_R());
75  // 走る
76  lineTracer.runLine(walker.get_count_L(), walker.get_count_R(), luminance);
77  controller.printDisplay(4, "%d", aiDistance);
78  if(lineTracer.getForward() < 0) {
79  walker.run(0, 0);
80  } else {
81  walker.run(lineTracer.getForward(), lineTracer.getTurn());
82  }
83  if(controller.buttonIsPressedBack()) {
84  walker.reset();
85  break;
86  }
87  if(aiDistance >= 1200) {
88  walker.reset();
89 
90  break;
91  }
92  controller.tslpTsk(4);
93  }
94 }
95 
96 // void LeftCourse::runParking(int16_t brightness, int16_t gray)
97 void LeftCourse::runParking(int16_t brightness, int16_t black, int16_t white, int16_t gray)
98 {
99  Parking parking{ controller };
100  parking.runParallel(brightness, black, white, gray);
101 }
102 
103 void LeftCourse::runNormalCourse(int16_t brightness)
104 {
105  LeftNormalCourse normalCourse;
106  bool isNormalCourse;
107  // NormalCourseを抜けるまでループする
108  while(1) {
109  auto luminance = controller.getBrightness();
110  controller.printDisplay(4, "Brightness: %d, Target: %d", luminance, brightness);
111  if(normalCourse.statusCheck(walker.get_count_L(), walker.get_count_R()))
112  controller.speakerPlayTone(controller.noteFs6, 100);
113  isNormalCourse = normalCourse.runNormalCourse(walker.get_count_L(), walker.get_count_R(),
114  luminance, brightness);
115 
116  normalCourse.runOrStop(walker);
117 
118  if(!isNormalCourse) {
119  walker.run(0, 0);
120  break;
121  }
122  if(controller.buttonIsPressedBack()) {
123  walker.run(0, 0);
124  break;
125  }
126 
127  controller.tslpTsk(4); // 4msec周期起動
128  }
129 }
130 
駐車クラス
Definition: Parking.h:18
void setFirstCode(int32_t)
Definition: LeftCourse.cpp:8
void speakerPlayTone(uint16_t frequency, int32_t duration)
Definition: Controller.cpp:9
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
void runParking(int16_t brightness, int16_t black, int16_t white, int16_t gray)
Definition: LeftCourse.cpp:97
bool runNormalCourse(int32_t countL, int32_t countR, int16_t light_value, int16_t target_brightness)
bool statusCheck(int32_t countL, int32_t countR)
uint16_t noteFs6
Definition: Controller.h:40
void setPid(double p_gain_, double i_gain_, double d_gain_, double target_)
Definition: Pid.cpp:40
void runLine(int32_t countL, int32_t countR, int16_t light_value)
void runBlockRange()
Definition: LeftCourse.cpp:131
bool buttonIsPressedBack()
Definition: Controller.cpp:24
void runNormalCourse(int16_t brightness)
Definition: LeftCourse.cpp:103
void angleChange(int angle, int rotation)
Definition: Walker.cpp:101
void runOrStop(Walker &walker)
Definition: NormalCourse.cpp:8
void runGoStraight()
Definition: LeftCourse.cpp:65
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
float absoluteAngleMean(std::int32_t left_motor, std::int32_t right_motor)
左右モータの絶対角度の平均値を計算する
Definition: MotorAngle.cpp:39
int16_t getBrightness()
Definition: Controller.cpp:59
void reset()
Definition: Walker.cpp:15
Lコースを走らせるときに呼び出されるクラス
std::int32_t get_count_R()
Definition: Walker.cpp:54
void runGoBlack()
Definition: LeftCourse.cpp:39
TurnControl turnControl
void printDisplay(int8_t row, const char *format,...)
Definition: Controller.cpp:79
void aiAnswerGo(std::int16_t brightness, std::int16_t black, std::int16_t white, std::int16_t gray)
Definition: LeftCourse.cpp:32
SpeedControl speedControl
void run(int16_t brightness, int16_t black, int16_t white, int16_t gray)
Definition: LeftCourse.cpp:16
std::int32_t get_count_L()
Definition: Walker.cpp:49