etrobocon2018 feat.KatLab  770af34cce41ae9c30c41303275e1add2daae0c3 (with uncommitted changes)
 全て クラス 名前空間 ファイル 関数 変数 列挙型 列挙値 フレンド マクロ定義 ページ
公開メンバ関数 | 全メンバ一覧
LeftCourse クラス

#include <LeftCourse.h>

LeftCourse 連携図
Collaboration graph

公開メンバ関数

 LeftCourse ()=default
 
 LeftCourse (Controller &controller_)
 
void setFirstCode (int32_t)
 
void run (int16_t brightness, int16_t black, int16_t white, int16_t gray)
 
void runNormalCourse (int16_t brightness)
 
void runBlockRange ()
 
void runParking (int16_t brightness, int16_t black, int16_t white, int16_t gray)
 
void aiAnswerGo (std::int16_t brightness, std::int16_t black, std::int16_t white, std::int16_t gray)
 
void runGoBlack ()
 
void runGoStraight ()
 

詳解

Lコースを走らせるときに呼び出されるクラス

LeftCourse.h22 行目に定義があります。

構築子と解体子

LeftCourse::LeftCourse ( )
default

コンストラクタ。センサ類の初期化を行う

LeftCourse::LeftCourse ( Controller controller_)
inlineexplicit

LeftCourse.h26 行目に定義があります。

26 : walker(controller_), controller(controller_) {}

関数詳解

void LeftCourse::aiAnswerGo ( std::int16_t  brightness,
std::int16_t  black,
std::int16_t  white,
std::int16_t  gray 
)

LeftCourse.cpp32 行目に定義があります。

33 {
34  AIAnswer ai_answer{ controller, walker, white, black, gray, brightness };
35  ai_answer.run();
36 }
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30

呼び出し関係図:

被呼び出し関係図:

void LeftCourse::run ( int16_t  brightness,
int16_t  black,
int16_t  white,
int16_t  gray 
)

各エリアの処理を呼び出す

Lコースの走行範囲の切り替えを行う

LeftCourse.cpp16 行目に定義があります。

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 }
void runParking(int16_t brightness, int16_t black, int16_t white, int16_t gray)
Definition: LeftCourse.cpp:97
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

呼び出し関係図:

void LeftCourse::runBlockRange ( )

ブロック並べを行う。 PuzzleFieldクラスに依存する。

LeftCourse.cpp131 行目に定義があります。

131 {}
void LeftCourse::runGoBlack ( )

LeftCourse.cpp39 行目に定義があります。

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 }
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
bool buttonIsPressedBack()
Definition: Controller.cpp:24
void angleChange(int angle, int rotation)
Definition: Walker.cpp:101
void runGoStraight()
Definition: LeftCourse.cpp:65
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
int16_t getBrightness()
Definition: Controller.cpp:59
void reset()
Definition: Walker.cpp:15

呼び出し関係図:

void LeftCourse::runGoStraight ( )

LeftCourse.cpp65 行目に定義があります。

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 }
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
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)
bool buttonIsPressedBack()
Definition: Controller.cpp:24
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
std::int32_t get_count_R()
Definition: Walker.cpp:54
TurnControl turnControl
void printDisplay(int8_t row, const char *format,...)
Definition: Controller.cpp:79
SpeedControl speedControl
std::int32_t get_count_L()
Definition: Walker.cpp:49

呼び出し関係図:

被呼び出し関係図:

void LeftCourse::runNormalCourse ( int16_t  brightness)

NormalCourseエリアの処理

LeftCourse.cpp103 行目に定義があります。

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 }
void speakerPlayTone(uint16_t frequency, int32_t duration)
Definition: Controller.cpp:9
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
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
bool buttonIsPressedBack()
Definition: Controller.cpp:24
void runOrStop(Walker &walker)
Definition: NormalCourse.cpp:8
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
int16_t getBrightness()
Definition: Controller.cpp:59
std::int32_t get_count_R()
Definition: Walker.cpp:54
void printDisplay(int8_t row, const char *format,...)
Definition: Controller.cpp:79
std::int32_t get_count_L()
Definition: Walker.cpp:49

呼び出し関係図:

void LeftCourse::runParking ( int16_t  brightness,
int16_t  black,
int16_t  white,
int16_t  gray 
)

縦列駐車を行う。 Parkingクラスに依存する。

LeftCourse.cpp97 行目に定義があります。

98 {
99  Parking parking{ controller };
100  parking.runParallel(brightness, black, white, gray);
101 }
駐車クラス
Definition: Parking.h:18

被呼び出し関係図:

void LeftCourse::setFirstCode ( int32_t  code)

このクラスのインスタンスを保持しているインスタンスまたはメンバ関数が、 UserInterfaceクラスのgetFirstCodeメンバ関数から 取得した初期位置コードを入力する。

引数
初期位置コード0から99999まで

LeftCourse.cpp8 行目に定義があります。

9 {
10  firstCode = code;
11 }

このクラス詳解は次のファイルから抽出されました: