Simple WebSocket server to control a tank.

Dependencies:   SNICInterface_mod WebSocketServer mbed-rtos mbed PowerControl C12832

au Firefox OS WoTハッカソン on ホワイトデーで使用した、タンクを動かすプログラムです。 ゲームパッドでタンクを操縦します。

ゲームパッドは PC に接続し、ブラウザ上の Web アプリから Gamepad API で入力を取得します。 取得した入力データは WebSocket で mbed 上の WebSocket サーバに送信します。

WebSocket サーバのコードはライブラリ化したので、他のプログラムでもインポートして使えます。

使用した機材

  • LPC1768
  • Murata TypeYD
  • LPC1768 用アプリケーションボード
  • TAMIYA トラック&ホイールセット
  • TAMIYA ダブルキヤボックス(左右独立4速タイプ)
  • TAMIYA ユニバーサルプレート
  • TOSHIBA TA7291P x 2
  • その他、モバイルバッテリー、電池ボックス等

左右のモータードライバにそれぞれ LPC1768 の p12, p13 と p14, p15 のピンを割り当てていますが、必要に応じてコードを変更してください。

コントローラー側(Webアプリ)

https://github.com/chikoski/wotxwot-control

Firefox ブラウザで動作確認しています(他のブラウザでは動かないかも)。 ゲームパッドの左右のスティックの前後の操作が左右それぞれのモータの前転・後転に対応しています。

動いているところの動画

https://www.facebook.com/video.php?v=456620974491805

ハッカソンでは ARM 賞をいただきました!

(参考) au Firefox OS WoTハッカソン on ホワイトデー

http://au-fx.kddi.com/event/20150314/wot_hackathon0314.html

Revision:
10:578778037efb
Parent:
9:774f408b9740
Child:
11:a66b3b2aeb6c
--- a/main.cpp	Sat Mar 14 11:06:11 2015 +0000
+++ b/main.cpp	Mon Mar 16 18:48:50 2015 +0900
@@ -9,9 +9,9 @@
 #endif
 #include "C12832.h"
 
-#define SSID        "KDDI_hackathon05"
+#define SSID        "your_wifi_ssid"
 #define SEC_TYPE    e_SEC_WPA2_AES
-#define SEC_KEY     "123456789"
+#define SEC_KEY     "your_wifi_password"
 
 #if defined(TARGET_LPC1768)
 C12832 lcd(p5, p7, p6, p8, p11);
@@ -39,7 +39,8 @@
 C_SNIC_WifiInterface wifi(p9, p10, NC, NC, p30);
 
 
-int main() {
+int main()
+{
 #if defined(TARGET_LPC1768)
     PHY_PowerDown();
 #endif
@@ -57,12 +58,13 @@
             continue;
         }
     
-        server.setHandler("/ws", &handler);
+        server.setHandler("/ws/", &handler);
         server.run();
     }
 }
 
-bool connectWiFi() {
+bool connectWiFi()
+{
     printf("connecting wifi\r\n");
     lcd_printf("connecting wifi\r\n");
 
@@ -108,24 +110,27 @@
     lcd.cls();
     lcd.locate( 0, 3 );
     lcd.printf( buffer );
-    //wait( 1.0 );
 }
 
-void WSHandler::onMessage(char* text) {
+void WSHandler::onMessage(char* text)
+{
     printf("TEXT: [%s]\r\n", text);
 }
 
-void WSHandler::onOpen() {
+void WSHandler::onOpen()
+{
     lcd_printf("websocket opened\r\n");
 }
 
-void WSHandler::onClose() {
+void WSHandler::onClose()
+{
     lcd_printf("websocket closed\r\n");
 }
-    
-#define THRESHOLD 30
+
+#define THRESHOLD 20
 
-void WSHandler::onMessage(char* data, size_t size) {
+void WSHandler::onMessage(char* data, size_t size)
+{
     int8_t lv = data[0];
     int8_t rv = data[1];
 
@@ -157,4 +162,3 @@
         r2 = 0;
     }
 }
-