etrobocon2019 feat.KatLab  ece30a9a007fff7d3ad48592c0d09a74643377bb
公開メンバ関数 | 静的公開メンバ関数 | 公開変数類 | 静的公開変数類 | 全メンバ一覧
Controller クラス

#include <Controller.h>

Controller 連携図
Collaboration graph

公開メンバ関数

 Controller ()
 
void speakerSetVolume (int volume)
 
void ledSetColorOrange ()
 
void ledSetColorGreen ()
 
int getBrightness ()
 
bool buttonIsPressedBack ()
 
bool buttonIsPressedUp ()
 
bool buttonIsPressedDown ()
 
bool buttonIsPressedRight ()
 
bool buttonIsPressedLeft ()
 
bool buttonIsPressedEnter ()
 
void getRawColor (int &r, int &g, int &b)
 
void convertHsv (int &r, int &g, int &b)
 
HsvStatus getHsv () const
 
Color hsvToColor (const HsvStatus &status)
 
int getLeftMotorCount ()
 
int getRightMotorCount ()
 
void setLeftMotorPwm (const int pwm)
 
void setRightMotorPwm (const int pwm)
 
void resetMotorCount ()
 
void stopMotor ()
 
int getAngleOfRotation ()
 
int limitAngle (int angle)
 

静的公開メンバ関数

static void speakerPlayToneFS6 (int duration)
 
static float getBatteryVoltage ()
 
static void tslpTsk (int time)
 
static void lcdFillRect (int x, int y, int h)
 
static void lcdDrawString (const char *str, int x, int y)
 
static void lcdSetFont ()
 

公開変数類

TouchSensor touchSensor
 
ColorSensor colorSensor
 
Clock clock
 
GyroSensor gyroSensor
 

静的公開変数類

static constexpr int MOTOR_PWM_MAX = 100
 
static constexpr int MOTOR_PWM_MIN = -100
 

詳解

Controller.h36 行目に定義があります。

構築子と解体子

◆ Controller()

Controller::Controller ( )

Controller.cpp4 行目に定義があります。

5  : touchSensor(PORT_1),
6  colorSensor(PORT_3),
7  gyroSensor(PORT_4),
8  liftMotor(PORT_A),
9  rightWheel(PORT_B),
10  leftWheel(PORT_C),
11  tailMotor(PORT_D)
12 {
13  colorSensor.getRawColor(rgb);
14 }
TouchSensor touchSensor
Definition: Controller.h:39
GyroSensor gyroSensor
Definition: Controller.h:42
ColorSensor colorSensor
Definition: Controller.h:40

関数詳解

◆ buttonIsPressedBack()

bool Controller::buttonIsPressedBack ( )

Controller.cpp36 行目に定義があります。

37 {
38  return ev3_button_is_pressed(BACK_BUTTON);
39 }

◆ buttonIsPressedDown()

bool Controller::buttonIsPressedDown ( )

Controller.cpp51 行目に定義があります。

52 {
53  return ev3_button_is_pressed(DOWN_BUTTON);
54 }

◆ buttonIsPressedEnter()

bool Controller::buttonIsPressedEnter ( )

Controller.cpp41 行目に定義があります。

42 {
43  return ev3_button_is_pressed(ENTER_BUTTON);
44 }
被呼び出し関係図:

◆ buttonIsPressedLeft()

bool Controller::buttonIsPressedLeft ( )

Controller.cpp61 行目に定義があります。

62 {
63  return ev3_button_is_pressed(LEFT_BUTTON);
64 }
被呼び出し関係図:

◆ buttonIsPressedRight()

bool Controller::buttonIsPressedRight ( )

Controller.cpp56 行目に定義があります。

57 {
58  return ev3_button_is_pressed(RIGHT_BUTTON);
59 }
被呼び出し関係図:

◆ buttonIsPressedUp()

bool Controller::buttonIsPressedUp ( )

Controller.cpp46 行目に定義があります。

47 {
48  return ev3_button_is_pressed(UP_BUTTON);
49 }

◆ convertHsv()

void Controller::convertHsv ( int &  r,
int &  g,
int &  b 
)

Controller.cpp213 行目に定義があります。

214 {
215  // r,g,bの最大値を求める
216  double max = r;
217  if(max < g) max = g;
218  if(max < b) max = b;
219 
220  // r,g,bの最小値を求める
221  double min = r;
222  if(min > g) min = g;
223  if(min > b) min = b;
224 
225  // 色相(hue)を求める
226 
227  // 3つが同値の時は色相(hue)は0
228  if(r == g && r == b) hsv.hue = 0;
229 
230  // rが最大値の場合
231  else if(max == r) {
232  // 0除算を防ぐ処理
233  if(max - min != 0) max += 1;
234  hsv.hue = 60 * ((g - b) / (max - min));
235  }
236  // gが最大値の場合
237  else if(max == g) {
238  // 0除算を防ぐ処理
239  if(max - min != 0) max += 1;
240  hsv.hue = 60 * ((b - r) / (max - min)) + 120;
241  }
242  // bが最大値の場合
243  else if(max == b) {
244  // 0除算を防ぐ処理
245  if(max - min != 0) max += 1;
246  hsv.hue = 60 * ((r - g) / (max - min)) + 240;
247  }
248  //求められた色彩(hue)がマイナス値だった場合は360を加算して0~360の範囲に収める
249  if(hsv.hue < 0) hsv.hue += 360;
250 
251  // 0除算を防ぐ処理
252  if(max - min != 0) max += 1;
253 
254  // 彩度(saturation)を求める
255  hsv.saturation = (max - min) / max * 100;
256 
257  // 明度(value)を求める
258  hsv.value = max / 255 * 100;
259 }
double hue
Definition: Controller.h:25
double saturation
Definition: Controller.h:27
double value
Definition: Controller.h:29
被呼び出し関係図:

◆ getAngleOfRotation()

int Controller::getAngleOfRotation ( )

Controller.cpp278 行目に定義があります。

279 {
280  int angle = gyroSensor.getAngle();
281  //角度を[0-360]の範囲で表す,
282  //右手系(反時計回り)が正である
283  return Controller::limitAngle(angle);
284 }
GyroSensor gyroSensor
Definition: Controller.h:42
int limitAngle(int angle)
Definition: Controller.cpp:286
呼び出し関係図:

◆ getBatteryVoltage()

float Controller::getBatteryVoltage ( )
static

Controller.cpp66 行目に定義があります。

67 {
68  return ev3_battery_voltage_mV();
69 }

◆ getBrightness()

int Controller::getBrightness ( )

Controller.cpp71 行目に定義があります。

72 {
73  colorSensor.getRawColor(rgb);
74  int luminance = 0.298912 * rgb.r + 0.586611 * rgb.g + 0.114478 * rgb.b;
75  return luminance;
76 }
ColorSensor colorSensor
Definition: Controller.h:40
被呼び出し関係図:

◆ getHsv()

HsvStatus Controller::getHsv ( ) const

Controller.cpp261 行目に定義があります。

262 {
263  return hsv;
264 } // hsv値を返す
被呼び出し関係図:

◆ getLeftMotorCount()

int Controller::getLeftMotorCount ( )

Controller.cpp183 行目に定義があります。

184 {
185  return leftWheel.getCount();
186 }
被呼び出し関係図:

◆ getRawColor()

void Controller::getRawColor ( int &  r,
int &  g,
int &  b 
)

Controller.cpp78 行目に定義があります。

79 {
80  colorSensor.getRawColor(rgb);
81  r = rgb.r;
82  g = rgb.g;
83  b = rgb.b;
84 }
ColorSensor colorSensor
Definition: Controller.h:40
被呼び出し関係図:

◆ getRightMotorCount()

int Controller::getRightMotorCount ( )

Controller.cpp188 行目に定義があります。

189 {
190  return rightWheel.getCount();
191 }
被呼び出し関係図:

◆ hsvToColor()

Color Controller::hsvToColor ( const HsvStatus status)

Controller.cpp86 行目に定義があります。

87 {
88  if(status.value <= 33.5294){
89  if(status.value <= 18.4314){
90  return Color::black;
91  }else {
92  if(status.hue <= 159.5357){
93  if(status.hue <= 83.739){
94  if(status.hue <= 40.8904){
95  return Color::black;
96  }else {
97  return Color::yellow;
98  }
99  }else {
100  return Color::green;
101  }
102  }else {
103  if(status.value <= 32.9412){
104  return Color::blue;
105  }else {
106  if(status.hue <= 299.6104){
107  return Color::black;
108  }else {
109  return Color::red;
110  }
111  }
112  }
113  }
114  }else {
115  if(status.value <= 45.2941){
116  if(status.hue <= 263.0811){
117  if(status.hue <= 32.8235){
118  return Color::red;
119  }else {
120  if(status.hue <= 76.7547){
121  if(status.hue <= 44.8367){
122  if(status.hue <= 40.5263){
123  return Color::yellow;
124  }else {
125  return Color::red;
126  }
127  }else {
128  return Color::yellow;
129  }
130  }else {
131  if(status.value <= 40.1961){
132  if(status.value <= 35.4902){
133  return Color::green;
134  }else {
135  return Color::blue;
136  }
137  }else {
138  return Color::white;
139  }
140  }
141  }
142  }else {
143  return Color::red;
144  }
145  }else {
146  if(status.hue <= 283.6016){
147  if(status.hue <= 99.2199){
148  if(status.value <= 51.1765){
149  return Color::yellow;
150  }else {
151  return Color::red;
152  }
153  }else {
154  return Color::white;
155  }
156  }else {
157  return Color::red;
158  }
159  }
160  }
161 }
double hue
Definition: Controller.h:25
double value
Definition: Controller.h:29
被呼び出し関係図:

◆ lcdDrawString()

void Controller::lcdDrawString ( const char *  str,
int  x,
int  y 
)
static

Controller.cpp173 行目に定義があります。

174 {
175  ev3_lcd_draw_string(str, x, y);
176 }
被呼び出し関係図:

◆ lcdFillRect()

void Controller::lcdFillRect ( int  x,
int  y,
int  h 
)
static

Controller.cpp168 行目に定義があります。

169 {
170  ev3_lcd_fill_rect(x, y, EV3_LCD_WIDTH, h, EV3_LCD_WHITE);
171 }
被呼び出し関係図:

◆ lcdSetFont()

void Controller::lcdSetFont ( )
static

Controller.cpp178 行目に定義があります。

179 {
180  ev3_lcd_set_font(EV3_FONT_SMALL);
181 }
被呼び出し関係図:

◆ ledSetColorGreen()

void Controller::ledSetColorGreen ( )

Controller.cpp31 行目に定義があります。

32 {
33  ev3_led_set_color(LED_GREEN);
34 }

◆ ledSetColorOrange()

void Controller::ledSetColorOrange ( )

Controller.cpp26 行目に定義があります。

27 {
28  ev3_led_set_color(LED_ORANGE);
29 }

◆ limitAngle()

int Controller::limitAngle ( int  angle)

Controller.cpp286 行目に定義があります。

287 {
288  angle = angle % 360;
289  if(angle < 0) {
290  angle = 360 + angle;
291  angle = limitAngle(angle);
292  }
293  return angle;
294 }
int limitAngle(int angle)
Definition: Controller.cpp:286
被呼び出し関係図:

◆ resetMotorCount()

void Controller::resetMotorCount ( )

Controller.cpp266 行目に定義があります。

267 {
268  leftWheel.reset();
269  rightWheel.reset();
270 }
被呼び出し関係図:

◆ setLeftMotorPwm()

void Controller::setLeftMotorPwm ( const int  pwm)

Controller.cpp203 行目に定義があります。

204 {
205  leftWheel.setPWM(suppressPwmValue(pwm));
206 }
被呼び出し関係図:

◆ setRightMotorPwm()

void Controller::setRightMotorPwm ( const int  pwm)

Controller.cpp208 行目に定義があります。

209 {
210  rightWheel.setPWM(suppressPwmValue(pwm));
211 }
被呼び出し関係図:

◆ speakerPlayToneFS6()

void Controller::speakerPlayToneFS6 ( int  duration)
static

Controller.cpp21 行目に定義があります。

22 {
23  ev3_speaker_play_tone(NOTE_FS6, duration);
24 }
被呼び出し関係図:

◆ speakerSetVolume()

void Controller::speakerSetVolume ( int  volume)

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

17 {
18  ev3_speaker_set_volume(volume);
19 }

◆ stopMotor()

void Controller::stopMotor ( )

Controller.cpp272 行目に定義があります。

273 {
274  leftWheel.stop();
275  rightWheel.stop();
276 }
被呼び出し関係図:

◆ tslpTsk()

void Controller::tslpTsk ( int  time)
static

Controller.cpp163 行目に定義があります。

164 {
165  tslp_tsk(time);
166 }
被呼び出し関係図:

メンバ詳解

◆ clock

Clock Controller::clock

Controller.h41 行目に定義があります。

◆ colorSensor

ColorSensor Controller::colorSensor

Controller.h40 行目に定義があります。

◆ gyroSensor

GyroSensor Controller::gyroSensor

Controller.h42 行目に定義があります。

◆ MOTOR_PWM_MAX

constexpr int Controller::MOTOR_PWM_MAX = 100
static

Controller.h44 行目に定義があります。

◆ MOTOR_PWM_MIN

constexpr int Controller::MOTOR_PWM_MIN = -100
static

Controller.h46 行目に定義があります。

◆ touchSensor

TouchSensor Controller::touchSensor

Controller.h39 行目に定義があります。


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