etrobocon2018 feat.KatLab  770af34cce41ae9c30c41303275e1add2daae0c3 (with uncommitted changes)
 全て クラス 名前空間 ファイル 関数 変数 列挙型 列挙値 フレンド マクロ定義 ページ
Parking.cpp
[詳解]
1 
7 #include "Parking.h"
8 
9 void Parking::runParpendicular(int16_t target_brightness, LineTracerWalker lineTracer,
10  int16_t black, int16_t white)
11 {
12  BasicWalker basicWalker{ controller };
13 
14  controller.printDisplay(0, "Do ParallelParking...");
15  basicWalker.setPidWithoutTarget(5.0, 0.8, 0.2);
16  basicWalker.goStraightToCheckBlackLine(30, 1000, target_brightness);
17 
18  basicWalker.spin(basicWalker.SPIN_LEFT, 70);
19  // waitThreeTimes();
20  basicWalker.spinToCheckBlackLine(basicWalker.SPIN_RIGHT, 70);
21  basicWalker.reset();
22 
23  // waitThreeTimes();
24 
25  //ライントレース開始
26  int count = 0;
27  while(1) {
28  int16_t now_brightness = controller.getBrightness();
29  lineTracer.speedControl.setPid(5.0, 0.8, 0.2, 20.0);
30  lineTracer.turnControl.setPid(2.2, 0.1, 0.35, target_brightness); // 2.0,0.2,0.4 最高か
31 
32  lineTracer.runLine(walker.get_count_L(), walker.get_count_R(), now_brightness);
33  if(lineTracer.getForward() < 0) {
34  walker.run(0, 0);
35  } else {
36  walker.run(lineTracer.getForward(), lineTracer.getTurn());
37  }
38  if(controller.buttonIsPressedBack()) {
39  walker.run(0, 0);
40  break;
41  }
42 
43  count++;
44 
45  if(count > 450) {
46  break;
47  }
48  controller.tslpTsk(4);
49  } // whileのおわり
50 
51  basicWalker.setPidWithoutTarget(5.0, 0.8, 0.2);
52  basicWalker.reset();
53  basicWalker.goStraight(30, 450);
55 }
56 
57 void Parking::runParallel(int16_t brightness, int16_t black, int16_t white, int16_t gray)
58 {
59  LineTracerWalker lineTracer;
60  BasicWalker basicWalker{ controller };
61  int count = 0;
62  int16_t grayBrightness = (gray + white) / 2;
63  // controller.tslpTsk(500);
64 
65  controller.printDisplay(6, ">>>>> Do ParallelParking... <<<<<");
66  lineTracer.speedControl.setPid(1.5, 0.01, 0.12, 170.0);
67  lineTracer.turnControl.setPid(2.0, 0.1, 0.1, brightness - 20);
68  while(1) {
69  int16_t luminance = controller.getBrightness();
70  lineTracer.runLine(walker.get_count_L(), walker.get_count_R(), luminance);
71 
72  if(lineTracer.getForward() < 0) {
73  walker.run(0, 0);
74  } else {
75  walker.run(lineTracer.getForward(), lineTracer.getTurn());
76  }
77  if(controller.buttonIsPressedBack()) {
78  walker.run(0, 0);
79  break;
80  }
81 
82  if(black + 35 >= luminance) { //ブラックを読み込んだら
83  count = 0;
84  controller.speakerPlayTone(controller.noteFs4, 10);
85  } else if(white + 40 >= luminance && white - 70 <= luminance) { //+30 -70
86  count++;
87  // controller.speakerPlayTone(controller.noteFs6, 100);
88  }
89 
90  if(count > 80) { // 250
91  // waitThreeTimes();
92  basicWalker.reset();
93  basicWalker.setPidWithoutTarget(14.0, 1.0, 0.1);
94  basicWalker.goStraight(60, 200);
95  break;
96  }
97 
98  lineTracer.speedControl.setPid(1.5, 0.01, 0.12, 170.0);
99  // lineTracer.speedControl.setPid(17.0, 1.0, 0.1, 30.0);
100 
101  if(grayBrightness + 1 >= luminance && grayBrightness - 1 <= luminance) {
102  // lineTracer.turnControl.setPid(4.0, 1.0, 0.8, grayBrightness);
103  lineTracer.turnControl.setPid(2.0, 0.1, 0.1, grayBrightness - 25);
104  } else {
105  // lineTracer.turnControl.setPid(4.0, 1.0, 0.8, brightness);
106  lineTracer.turnControl.setPid(2.0, 0.1, 0.1, brightness - 20);
107  }
108  controller.tslpTsk(4);
109  }
110  // sprintf(aa, "%f", controller.ev3_battery_voltage());
111 
112  // controller.printDisplay(5, aa);
113  basicWalker.reset();
114  basicWalker.setPidWithoutTarget(14.0, 1.0, 0.1);
115  basicWalker.spin(basicWalker.SPIN_LEFT, 40);
116  // basicWalker.setPidWithoutTarget(14.0, 1.0, 0.1);
117  basicWalker.goStraight(60, 550);
118  basicWalker.spin(basicWalker.SPIN_LEFT, 90);
119  // basicWalker.goStraight(30, 10);
120  // basicWalker.spin( basicWalker.SPIN_RIGHT, 90 );
121 }
122 
124 {
125  walker.run(0, 0);
126  controller.speakerPlayTone(controller.noteFs4, 100);
127  controller.tslpTsk(1000);
128  controller.speakerPlayTone(controller.noteFs4, 100);
129  controller.tslpTsk(1000);
130  controller.speakerPlayTone(controller.noteFs4, 100);
131  controller.tslpTsk(1000);
132  controller.speakerPlayTone(controller.noteFs4, 800);
133 }
void speakerPlayTone(uint16_t frequency, int32_t duration)
Definition: Controller.cpp:9
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
int16_t getBrightness()
Definition: Controller.cpp:59
void waitThreeTimes()
Definition: Parking.cpp:123
uint16_t noteFs4
Definition: Controller.h:41
void runParallel(int16_t brightness, int16_t black, int16_t white, int16_t gray)
Definition: Parking.cpp:57
縦列駐車クラス
std::int32_t get_count_R()
Definition: Walker.cpp:54
TurnControl turnControl
void runParpendicular(int16_t target_brightness, LineTracerWalker lineTracer, int16_t black, int16_t white)
Definition: Parking.cpp:9
void printDisplay(int8_t row, const char *format,...)
Definition: Controller.cpp:79
SpeedControl speedControl
std::int32_t get_count_L()
Definition: Walker.cpp:49