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
Diff: main.cpp
- 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; } } -