Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 1:03c8bc666945, committed 2010-09-20
- Comitter:
- shintamainjp
- Date:
- Mon Sep 20 02:09:54 2010 +0000
- Parent:
- 0:127b9ca59547
- Commit message:
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/appconf.cpp Mon Sep 20 02:09:54 2010 +0000
@@ -0,0 +1,59 @@
+#include "appconf.h"
+#include <ConfigFile.h>
+
+LocalFileSystem fs_local("local");
+
+#define CONFIG_FILENAME "/local/SETUP.CFG"
+
+#define KEY_CHANNEL "Channel"
+#define VALUE_CHANNEL_A "A"
+#define VALUE_CHANNEL_B "B"
+#define VALUE_CHANNEL_C "C"
+#define VALUE_CHANNEL_D "D"
+
+/**
+ * Initialize a configuration.
+ *
+ * @param p A pointer to a configuration structure.
+ */
+void appconf_init(appconf_t *p) {
+ /*
+ * Channel default value is a channel C.
+ */
+ p->channel = ChoroQ::ChC;
+}
+
+/**
+ * Read a configuration.
+ *
+ * @param p A pointer to a configuration structure.
+ *
+ * @return Return 0 if read succeed.
+ */
+int appconf_read(appconf_t *p) {
+ ConfigFile cfg;
+
+ if (!cfg.read(CONFIG_FILENAME)) {
+ return -1;
+ }
+
+ char *key = KEY_CHANNEL;
+ char value[64];
+ if (!cfg.getValue(key, value, sizeof(value))) {
+ return -2;
+ }
+
+ if (strcmp(value, VALUE_CHANNEL_A) == 0) {
+ p->channel = ChoroQ::ChA;
+ } else if (strcmp(value, VALUE_CHANNEL_B) == 0) {
+ p->channel = ChoroQ::ChB;
+ } else if (strcmp(value, VALUE_CHANNEL_C) == 0) {
+ p->channel = ChoroQ::ChC;
+ } else if (strcmp(value, VALUE_CHANNEL_D) == 0) {
+ p->channel = ChoroQ::ChD;
+ } else {
+ return -3;
+ }
+
+ return 0;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/appconf.h Mon Sep 20 02:09:54 2010 +0000
@@ -0,0 +1,26 @@
+#ifndef _APPCONF_H_
+#define _APPCONF_H_
+
+#include "ChoroQ.h"
+
+typedef struct {
+ ChoroQ::Channel channel;
+} appconf_t;
+
+/**
+ * Initialize a configuration.
+ *
+ * @param p A pointer to a configuration structure.
+ */
+void appconf_init(appconf_t *p);
+
+/**
+ * Read a configuration.
+ *
+ * @param p A pointer to a configuration structure.
+ *
+ * @return Return 0 if read succeed.
+ */
+int appconf_read(appconf_t *p);
+
+#endif
--- a/main.cpp Tue Aug 24 11:58:09 2010 +0000
+++ b/main.cpp Mon Sep 20 02:09:54 2010 +0000
@@ -8,21 +8,66 @@
* Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
* http://shinta.main.jp/
*/
-
+
+/*
+ * Connection map.
+ *
+ * +---+----------------+---------+
+ * |Pin|Target |Direction|
+ * +---+----------------+---------+
+ * |p21|IR transmitter |OUT |
+ * +---+----------------+---------+
+ */
+
+/*
+ * Include files.
+ */
+
#include <mbed.h>
#include <algorithm>
-#include <RemoteIR.h>
-#include <TransmitterIR.h>
+#include <ChoroQ.h>
#include <I2CConfig.h>
#include <WiiNunchuckReader.h>
#include <TextLCD.h>
-#include "ChoroQ.h"
+#include "appconf.h"
+
+/*
+ * Objects.
+ */
WiiNunchuckReader wn(I2CPort_A::SDA, I2CPort_A::SCL);
-ChoroQ cq(p21, ChoroQ::ChC);
+ChoroQ cq(p21);
TextLCD lcd(p24, p26, p27, p28, p29, p30);
BusOut led(LED4, LED3, LED2, LED1);
+/**
+ * Display a splash screen.
+ */
+void splash(void) {
+ lcd.cls();
+ lcd.locate(0, 0);
+ lcd.printf("StarBoard Orange");
+ lcd.locate(0, 1);
+ lcd.printf("mbed NXP LPC1768");
+ wait(3);
+
+ lcd.cls();
+ lcd.locate(0, 0);
+ lcd.printf("Example app No.3");
+ lcd.locate(0, 1);
+ lcd.printf(" CHORO Q HYBRID ");
+ wait(3);
+}
+
+/**
+ * Get an action from a coordinate.
+ *
+ * @param x X axis.
+ * @param y Y axis.
+ * @param dash State of dash.
+ *
+ * @return An action.
+ */
ChoroQ::Action getAction(const int x, const int y, bool dash) {
static const int MAX_X = 200;
static const int MIN_X = 20;
@@ -37,6 +82,10 @@
return ChoroQ::Stop;
}
+ if ((x == 0) && (y == 0)) {
+ return ChoroQ::Stop;
+ }
+
if (std::abs(px) < 10) {
if (py < 0) {
if (dash) {
@@ -54,26 +103,10 @@
}
if (std::abs(py) < 10) {
if (px < -20) {
-#if 0
return ChoroQ::Left;
-#else
- if (dash) {
- return ChoroQ::UpLeftDash;
- } else {
- return ChoroQ::UpLeft;
- }
-#endif
}
if (20 < px) {
-#if 0
return ChoroQ::Right;
-#else
- if (dash) {
- return ChoroQ::UpRightDash;
- } else {
- return ChoroQ::UpRight;
- }
-#endif
}
}
if ((10 < px) && (10 < py)) {
@@ -107,72 +140,90 @@
return ChoroQ::Stop;
}
+/**
+ * Entry point.
+ */
int main() {
+ /*
+ * Splash.
+ */
+ splash();
lcd.cls();
+
+ /*
+ * Setup a configuration.
+ */
+ appconf_t conf;
+ appconf_init(&conf);
+ appconf_read(&conf);
+
+ /*
+ * Application loop.
+ */
while (true) {
wn.RequestRead();
ChoroQ::Action ac = getAction(wn.getJoyX(), wn.getJoyY(), (wn.getButtonZ() == 1) ? true : false);
- cq.execute(ac);
+ cq.execute(conf.channel, ac);
lcd.locate(0, 0);
- lcd.printf("(%3d,%3d) %-6.6s", wn.getJoyX(), wn.getJoyY(), ((wn.getButtonZ() == 1) ? "-Dash-" : " "));
+ lcd.printf("JS :(%3d,%3d) %s", wn.getJoyX(), wn.getJoyY(), ((wn.getButtonZ() == 1) ? "D" : " "));
- lcd.locate(0, 1);
+ char *stattext = "";
switch (ac) {
case ChoroQ::Undef:
- lcd.printf("%-16.16s", "Undef");
+ stattext = "Undef";
break;
case ChoroQ::Up:
- lcd.printf("%-16.16s", "Up");
+ stattext = "Up";
break;
case ChoroQ::Down:
- lcd.printf("%-16.16s", "Down");
+ stattext = "Down";
break;
case ChoroQ::Left:
- lcd.printf("%-16.16s", "Left");
+ stattext = "Left";
break;
case ChoroQ::Right:
- lcd.printf("%-16.16s", "Right");
+ stattext = "Right";
break;
case ChoroQ::UpDash:
- lcd.printf("%-16.16s", "UpDash");
+ stattext = "Up +D";
break;
case ChoroQ::UpLeft:
- lcd.printf("%-16.16s", "UpLeft");
+ stattext = "UpLeft";
break;
case ChoroQ::UpRight:
- lcd.printf("%-16.16s", "UpRight");
+ stattext = "UpRight";
break;
case ChoroQ::UpRightDash:
- lcd.printf("%-16.16s", "UpRightDash");
+ stattext = "UpRight +D";
break;
case ChoroQ::UpLeftDash:
- lcd.printf("%-16.16s", "UpLeftDash");
+ stattext = "UpLeft +D";
break;
case ChoroQ::DownLeft:
- lcd.printf("%-16.16s", "DownLeft");
+ stattext = "DownLeft";
break;
case ChoroQ::DownRight:
- lcd.printf("%-16.16s", "DownRight");
+ stattext = "DownRight";
break;
case ChoroQ::DownDash:
- lcd.printf("%-16.16s", "DownDash");
+ stattext = "Down +D";
break;
case ChoroQ::DownLeftDash:
- lcd.printf("%-16.16s", "DownLeftDash");
+ stattext = "DownLeft +D";
break;
case ChoroQ::DownRightDash:
- lcd.printf("%-16.16s", "DownRightDash");
+ stattext = "DownRight+D";
break;
case ChoroQ::Stop:
- lcd.printf("%-16.16s", "Stop");
+ stattext = "Stop";
break;
}
+ lcd.locate(0, 1);
+ lcd.printf("Ch.%c:%-11.11s", 'A' + (int)conf.channel, stattext);
wait_ms(50);
led = led + 1;
}
-
- return EXIT_SUCCESS;
}
--- a/mbed.bld Tue Aug 24 11:58:09 2010 +0000 +++ b/mbed.bld Mon Sep 20 02:09:54 2010 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/9114680c05da +http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e
--- a/mylib/ChoroQ.cpp Tue Aug 24 11:58:09 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-#include "ChoroQ.h"
-
-const ChoroQ::action_t ChoroQ::list[] = {
- {Undef, "\x00"},
- {Up, "\x20"},
- {Down, "\x10"},
- {Left, "\x30"},
- {Right, "\x08"},
- {UpDash, "\x28"},
- {UpLeft, "\x18"},
- {UpRight, "\x38"},
- {UpLeftDash, "\x04"},
- {UpRightDash, "\x24"},
- {DownLeft, "\x14"},
- {DownRight, "\x34"},
- {DownDash, "\x0C"},
- {DownLeftDash, "\x2C"},
- {DownRightDash, "\x1C"},
- {Stop, "\x3C"}
-};
-
-ChoroQ::ChoroQ(PinName pin, Channel ch) : irtx(pin) {
- switch (ch) {
- case ChA:
- channel = CH_A;
- break;
- case ChB:
- channel = CH_B;
- break;
- case ChC:
- channel = CH_C;
- break;
- case ChD:
- channel = CH_D;
- break;
- }
-}
-
-ChoroQ::~ChoroQ() {
-}
-
-void ChoroQ::execute(Action action) {
- uint8_t *command = getCommand(action);
- if (command != NULL) {
- uint8_t buf[1];
- buf[0] = command[0] | channel;
- irtx.setData(RemoteIR::SONY, buf, 6);
- }
-}
-
-uint8_t *ChoroQ::getCommand(Action action) {
- const int n = sizeof(list) / sizeof(list[0]);
- for (int i = 0; i < n; i++) {
- const action_t *p = &list[i];
- if (p->action == action) {
- return (uint8_t *)p->command;
- }
- }
- return NULL;
-}
--- a/mylib/ChoroQ.h Tue Aug 24 11:58:09 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-#ifndef _CHORO_Q_H_
-#define _CHORO_Q_H_
-
-#include <mbed.h>
-#include <inttypes.h>
-#include <TransmitterIR.h>
-
-class ChoroQ {
-public:
-
- typedef enum {
- ChA,
- ChB,
- ChC,
- ChD
- } Channel;
-
- ChoroQ(PinName pin, Channel ch);
- ~ChoroQ();
-
- typedef enum {
- Undef,
- Up,
- Down,
- Left,
- Right,
- UpDash,
- UpLeft,
- UpRight,
- UpRightDash,
- UpLeftDash,
- DownLeft,
- DownRight,
- DownDash,
- DownLeftDash,
- DownRightDash,
- Stop
- } Action;
-
- void execute(Action action);
-
-private:
- typedef struct {
- Action action;
- char *command;
- } action_t;
-
- static const int CH_A = 0x00;
- static const int CH_B = 0x02;
- static const int CH_C = 0x01;
- static const int CH_D = 0x03;
- static const action_t list[];
-
- TransmitterIR irtx;
- int channel;
-
- uint8_t *getCommand(Action action);
-};
-
-#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylib/ChoroQ.lib Mon Sep 20 02:09:54 2010 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/shintamainjp/code/ChoroQ/#97921a2adf78
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylib/ConfigFile.lib Mon Sep 20 02:09:54 2010 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/shintamainjp/code/ConfigFile/#f6ceafabe9f8
--- a/mylib/RemoteIR.lib Tue Aug 24 11:58:09 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/shintamainjp/code/RemoteIR/#268cc2ab63bd