Junichi Katsu
/
ChuckChoroQ
ヌンチャクでコントロールするチョロQ機能に限定した物です。
Fork of StarBoardOrangeExample3 by
main.cpp@2:1d9c1cd90695, 2012-08-18 (annotated)
- Committer:
- jksoft
- Date:
- Sat Aug 18 13:21:50 2012 +0000
- Revision:
- 2:1d9c1cd90695
- Parent:
- 1:03c8bc666945
Rev1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shintamainjp | 0:127b9ca59547 | 1 | /** |
shintamainjp | 0:127b9ca59547 | 2 | * StarBoard Orange - Example application No.3 (Version 0.0.1) |
shintamainjp | 0:127b9ca59547 | 3 | * Drive a CHORO Q HYBRID with wii nunchuk |
shintamainjp | 0:127b9ca59547 | 4 | * |
shintamainjp | 0:127b9ca59547 | 5 | * See also ... http://mbed.org/users/shintamainjp/notebook/starboard_example3_ja/ |
shintamainjp | 0:127b9ca59547 | 6 | * See also ... http://mbed.org/users/shintamainjp/notebook/starboard_example3_en/ |
shintamainjp | 0:127b9ca59547 | 7 | * |
shintamainjp | 0:127b9ca59547 | 8 | * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems) |
shintamainjp | 0:127b9ca59547 | 9 | * http://shinta.main.jp/ |
shintamainjp | 0:127b9ca59547 | 10 | */ |
shintamainjp | 1:03c8bc666945 | 11 | |
shintamainjp | 1:03c8bc666945 | 12 | /* |
shintamainjp | 1:03c8bc666945 | 13 | * Connection map. |
shintamainjp | 1:03c8bc666945 | 14 | * |
shintamainjp | 1:03c8bc666945 | 15 | * +---+----------------+---------+ |
shintamainjp | 1:03c8bc666945 | 16 | * |Pin|Target |Direction| |
shintamainjp | 1:03c8bc666945 | 17 | * +---+----------------+---------+ |
shintamainjp | 1:03c8bc666945 | 18 | * |p21|IR transmitter |OUT | |
shintamainjp | 1:03c8bc666945 | 19 | * +---+----------------+---------+ |
shintamainjp | 1:03c8bc666945 | 20 | */ |
shintamainjp | 1:03c8bc666945 | 21 | |
shintamainjp | 1:03c8bc666945 | 22 | /* |
shintamainjp | 1:03c8bc666945 | 23 | * Include files. |
shintamainjp | 1:03c8bc666945 | 24 | */ |
shintamainjp | 1:03c8bc666945 | 25 | |
shintamainjp | 0:127b9ca59547 | 26 | #include <mbed.h> |
shintamainjp | 0:127b9ca59547 | 27 | #include <algorithm> |
shintamainjp | 1:03c8bc666945 | 28 | #include <ChoroQ.h> |
shintamainjp | 0:127b9ca59547 | 29 | #include <I2CConfig.h> |
shintamainjp | 0:127b9ca59547 | 30 | #include <WiiNunchuckReader.h> |
shintamainjp | 1:03c8bc666945 | 31 | #include "appconf.h" |
shintamainjp | 1:03c8bc666945 | 32 | |
shintamainjp | 1:03c8bc666945 | 33 | /* |
shintamainjp | 1:03c8bc666945 | 34 | * Objects. |
shintamainjp | 1:03c8bc666945 | 35 | */ |
shintamainjp | 0:127b9ca59547 | 36 | |
shintamainjp | 0:127b9ca59547 | 37 | WiiNunchuckReader wn(I2CPort_A::SDA, I2CPort_A::SCL); |
shintamainjp | 1:03c8bc666945 | 38 | ChoroQ cq(p21); |
shintamainjp | 1:03c8bc666945 | 39 | |
shintamainjp | 1:03c8bc666945 | 40 | /** |
shintamainjp | 1:03c8bc666945 | 41 | * Get an action from a coordinate. |
shintamainjp | 1:03c8bc666945 | 42 | * |
shintamainjp | 1:03c8bc666945 | 43 | * @param x X axis. |
shintamainjp | 1:03c8bc666945 | 44 | * @param y Y axis. |
shintamainjp | 1:03c8bc666945 | 45 | * @param dash State of dash. |
shintamainjp | 1:03c8bc666945 | 46 | * |
shintamainjp | 1:03c8bc666945 | 47 | * @return An action. |
shintamainjp | 1:03c8bc666945 | 48 | */ |
shintamainjp | 0:127b9ca59547 | 49 | ChoroQ::Action getAction(const int x, const int y, bool dash) { |
shintamainjp | 0:127b9ca59547 | 50 | static const int MAX_X = 200; |
shintamainjp | 0:127b9ca59547 | 51 | static const int MIN_X = 20; |
shintamainjp | 0:127b9ca59547 | 52 | static const int MAX_Y = 200; |
shintamainjp | 0:127b9ca59547 | 53 | static const int MIN_Y = 20; |
shintamainjp | 0:127b9ca59547 | 54 | int px = ((x - MIN_X) * 100) / (MAX_X - MIN_X); |
shintamainjp | 0:127b9ca59547 | 55 | int py = ((y - MIN_Y) * 100) / (MAX_Y - MIN_Y); |
shintamainjp | 0:127b9ca59547 | 56 | px = std::max(0, std::min(100, px)) - 50; // Range of a value is -50 to +50 |
shintamainjp | 0:127b9ca59547 | 57 | py = std::max(0, std::min(100, py)) - 50; // Range of a value is -50 to +50 |
shintamainjp | 0:127b9ca59547 | 58 | |
shintamainjp | 0:127b9ca59547 | 59 | if ((std::abs(px) <= 10) && (std::abs(py) <= 10)) { |
shintamainjp | 0:127b9ca59547 | 60 | return ChoroQ::Stop; |
shintamainjp | 0:127b9ca59547 | 61 | } |
shintamainjp | 0:127b9ca59547 | 62 | |
shintamainjp | 1:03c8bc666945 | 63 | if ((x == 0) && (y == 0)) { |
shintamainjp | 1:03c8bc666945 | 64 | return ChoroQ::Stop; |
shintamainjp | 1:03c8bc666945 | 65 | } |
shintamainjp | 1:03c8bc666945 | 66 | |
shintamainjp | 0:127b9ca59547 | 67 | if (std::abs(px) < 10) { |
shintamainjp | 0:127b9ca59547 | 68 | if (py < 0) { |
shintamainjp | 0:127b9ca59547 | 69 | if (dash) { |
shintamainjp | 0:127b9ca59547 | 70 | return ChoroQ::DownDash; |
shintamainjp | 0:127b9ca59547 | 71 | } else { |
shintamainjp | 0:127b9ca59547 | 72 | return ChoroQ::Down; |
shintamainjp | 0:127b9ca59547 | 73 | } |
shintamainjp | 0:127b9ca59547 | 74 | } else { |
shintamainjp | 0:127b9ca59547 | 75 | if (dash) { |
shintamainjp | 0:127b9ca59547 | 76 | return ChoroQ::UpDash; |
shintamainjp | 0:127b9ca59547 | 77 | } else { |
shintamainjp | 0:127b9ca59547 | 78 | return ChoroQ::Up; |
shintamainjp | 0:127b9ca59547 | 79 | } |
shintamainjp | 0:127b9ca59547 | 80 | } |
shintamainjp | 0:127b9ca59547 | 81 | } |
shintamainjp | 0:127b9ca59547 | 82 | if (std::abs(py) < 10) { |
shintamainjp | 0:127b9ca59547 | 83 | if (px < -20) { |
shintamainjp | 0:127b9ca59547 | 84 | return ChoroQ::Left; |
shintamainjp | 0:127b9ca59547 | 85 | } |
shintamainjp | 0:127b9ca59547 | 86 | if (20 < px) { |
shintamainjp | 0:127b9ca59547 | 87 | return ChoroQ::Right; |
shintamainjp | 0:127b9ca59547 | 88 | } |
shintamainjp | 0:127b9ca59547 | 89 | } |
shintamainjp | 0:127b9ca59547 | 90 | if ((10 < px) && (10 < py)) { |
shintamainjp | 0:127b9ca59547 | 91 | if (dash) { |
shintamainjp | 0:127b9ca59547 | 92 | return ChoroQ::UpRightDash; |
shintamainjp | 0:127b9ca59547 | 93 | } else { |
shintamainjp | 0:127b9ca59547 | 94 | return ChoroQ::UpRight; |
shintamainjp | 0:127b9ca59547 | 95 | } |
shintamainjp | 0:127b9ca59547 | 96 | } |
shintamainjp | 0:127b9ca59547 | 97 | if ((px < -10) && (10 < py)) { |
shintamainjp | 0:127b9ca59547 | 98 | if (dash) { |
shintamainjp | 0:127b9ca59547 | 99 | return ChoroQ::UpLeftDash; |
shintamainjp | 0:127b9ca59547 | 100 | } else { |
shintamainjp | 0:127b9ca59547 | 101 | return ChoroQ::UpLeft; |
shintamainjp | 0:127b9ca59547 | 102 | } |
shintamainjp | 0:127b9ca59547 | 103 | } |
shintamainjp | 0:127b9ca59547 | 104 | if ((px < -10) && (py < -10)) { |
shintamainjp | 0:127b9ca59547 | 105 | if (dash) { |
shintamainjp | 0:127b9ca59547 | 106 | return ChoroQ::DownLeftDash; |
shintamainjp | 0:127b9ca59547 | 107 | } else { |
shintamainjp | 0:127b9ca59547 | 108 | return ChoroQ::DownLeft; |
shintamainjp | 0:127b9ca59547 | 109 | } |
shintamainjp | 0:127b9ca59547 | 110 | } |
shintamainjp | 0:127b9ca59547 | 111 | if ((10 < px) && (py < -10)) { |
shintamainjp | 0:127b9ca59547 | 112 | if (dash) { |
shintamainjp | 0:127b9ca59547 | 113 | return ChoroQ::DownRightDash; |
shintamainjp | 0:127b9ca59547 | 114 | } else { |
shintamainjp | 0:127b9ca59547 | 115 | return ChoroQ::DownRight; |
shintamainjp | 0:127b9ca59547 | 116 | } |
shintamainjp | 0:127b9ca59547 | 117 | } |
shintamainjp | 0:127b9ca59547 | 118 | return ChoroQ::Stop; |
shintamainjp | 0:127b9ca59547 | 119 | } |
shintamainjp | 0:127b9ca59547 | 120 | |
shintamainjp | 1:03c8bc666945 | 121 | /** |
shintamainjp | 1:03c8bc666945 | 122 | * Entry point. |
shintamainjp | 1:03c8bc666945 | 123 | */ |
shintamainjp | 0:127b9ca59547 | 124 | int main() { |
shintamainjp | 1:03c8bc666945 | 125 | |
shintamainjp | 1:03c8bc666945 | 126 | /* |
shintamainjp | 1:03c8bc666945 | 127 | * Setup a configuration. |
shintamainjp | 1:03c8bc666945 | 128 | */ |
shintamainjp | 1:03c8bc666945 | 129 | appconf_t conf; |
shintamainjp | 1:03c8bc666945 | 130 | appconf_init(&conf); |
shintamainjp | 1:03c8bc666945 | 131 | appconf_read(&conf); |
shintamainjp | 1:03c8bc666945 | 132 | |
shintamainjp | 1:03c8bc666945 | 133 | /* |
shintamainjp | 1:03c8bc666945 | 134 | * Application loop. |
shintamainjp | 1:03c8bc666945 | 135 | */ |
shintamainjp | 0:127b9ca59547 | 136 | while (true) { |
shintamainjp | 0:127b9ca59547 | 137 | wn.RequestRead(); |
shintamainjp | 0:127b9ca59547 | 138 | |
shintamainjp | 0:127b9ca59547 | 139 | ChoroQ::Action ac = getAction(wn.getJoyX(), wn.getJoyY(), (wn.getButtonZ() == 1) ? true : false); |
shintamainjp | 1:03c8bc666945 | 140 | cq.execute(conf.channel, ac); |
jksoft | 2:1d9c1cd90695 | 141 | |
shintamainjp | 0:127b9ca59547 | 142 | wait_ms(50); |
shintamainjp | 0:127b9ca59547 | 143 | } |
shintamainjp | 0:127b9ca59547 | 144 | } |