NanoService device game controller for NSPong.

Dependencies:   Beep C12832_lcd EthernetInterface MMA7660 mbed-rtos mbed nsdl_lib

NS_Game_Controller

NS_Game_Controller is a game controller software for NSPong.

NSPong is a HTML5 demo game developed on top of ARM Sensinode’s NanoService Platform. The game uses for example RealTimeMultiplayerNodeJS, Box2D and CAAT libraries, which are specifically built for HTML5 multiplayer games with the client/server model.

NSPong is available at https://github.com/NSPong/NSPong.

Demo video is available at https://vimeo.com/95207889.

Committer:
Shage
Date:
Tue May 13 17:17:38 2014 +0000
Revision:
0:e8d7be634e3c
Initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Shage 0:e8d7be634e3c 1 // Led resource implementation
Shage 0:e8d7be634e3c 2
Shage 0:e8d7be634e3c 3 #include "mbed.h"
Shage 0:e8d7be634e3c 4 #include "nsdl_support.h"
Shage 0:e8d7be634e3c 5 #include "led.h"
Shage 0:e8d7be634e3c 6
Shage 0:e8d7be634e3c 7 #define LED_RES_ID "led"
Shage 0:e8d7be634e3c 8
Shage 0:e8d7be634e3c 9 extern Serial pc;
Shage 0:e8d7be634e3c 10 DigitalOut led1(LED1);
Shage 0:e8d7be634e3c 11 DigitalOut led2(LED2);
Shage 0:e8d7be634e3c 12 DigitalOut led3(LED3);
Shage 0:e8d7be634e3c 13 DigitalOut led4(LED4);
Shage 0:e8d7be634e3c 14
Shage 0:e8d7be634e3c 15 PwmOut rled(p23);
Shage 0:e8d7be634e3c 16 PwmOut gled(p24);
Shage 0:e8d7be634e3c 17 PwmOut bled(p25);
Shage 0:e8d7be634e3c 18
Shage 0:e8d7be634e3c 19 // Data from PUT request
Shage 0:e8d7be634e3c 20 static char received_cmd[20];
Shage 0:e8d7be634e3c 21 static char cmd[10];
Shage 0:e8d7be634e3c 22
Shage 0:e8d7be634e3c 23 /* Only PUT method allowed */
Shage 0:e8d7be634e3c 24 static uint8_t led_resource_cb(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto)
Shage 0:e8d7be634e3c 25 {
Shage 0:e8d7be634e3c 26 sn_coap_hdr_s *coap_res_ptr = 0;
Shage 0:e8d7be634e3c 27
Shage 0:e8d7be634e3c 28 memcpy(received_cmd, (char *)received_coap_ptr->payload_ptr, received_coap_ptr->payload_len);
Shage 0:e8d7be634e3c 29 received_cmd[received_coap_ptr->payload_len] = '\0';
Shage 0:e8d7be634e3c 30 sprintf(cmd, "%s", received_cmd);
Shage 0:e8d7be634e3c 31
Shage 0:e8d7be634e3c 32 if (!strcmp(cmd, "reset")) {
Shage 0:e8d7be634e3c 33 led1 = 0;
Shage 0:e8d7be634e3c 34 led2 = 0;
Shage 0:e8d7be634e3c 35 led3 = 0;
Shage 0:e8d7be634e3c 36 led4 = 0;
Shage 0:e8d7be634e3c 37 }
Shage 0:e8d7be634e3c 38
Shage 0:e8d7be634e3c 39 else if (!strcmp(cmd, "score")) {
Shage 0:e8d7be634e3c 40
Shage 0:e8d7be634e3c 41 if(led4){
Shage 0:e8d7be634e3c 42 led1 = 0;
Shage 0:e8d7be634e3c 43 led2 = 0;
Shage 0:e8d7be634e3c 44 led3 = 0;
Shage 0:e8d7be634e3c 45 led4 = 0;
Shage 0:e8d7be634e3c 46 }
Shage 0:e8d7be634e3c 47 else if(led3){
Shage 0:e8d7be634e3c 48 led4 = 1;
Shage 0:e8d7be634e3c 49 }
Shage 0:e8d7be634e3c 50 else if(led2){
Shage 0:e8d7be634e3c 51 led3 = 1;
Shage 0:e8d7be634e3c 52 }
Shage 0:e8d7be634e3c 53 else if(led1){
Shage 0:e8d7be634e3c 54 led2 = 1;
Shage 0:e8d7be634e3c 55 }
Shage 0:e8d7be634e3c 56 else{
Shage 0:e8d7be634e3c 57 led1 = 1;
Shage 0:e8d7be634e3c 58 }
Shage 0:e8d7be634e3c 59
Shage 0:e8d7be634e3c 60 rled.period(0.001);
Shage 0:e8d7be634e3c 61 for(float i = 0.0; i < 1.0 ; i += 0.01) {
Shage 0:e8d7be634e3c 62 float p = 3 * i;
Shage 0:e8d7be634e3c 63 rled = 1.0 - ((p < 1.0) ? 1.0 - p : (p > 2.0) ? p - 2.0 : 0.0);
Shage 0:e8d7be634e3c 64 gled = 1.0 - ((p < 1.0) ? p : (p > 2.0) ? 0.0 : 2.0 - p);
Shage 0:e8d7be634e3c 65 bled = 1.0 - ((p < 1.0) ? 0.0 : (p > 2.0) ? 3.0 - p : p - 1.0); ;
Shage 0:e8d7be634e3c 66 wait(0.005);
Shage 0:e8d7be634e3c 67 }
Shage 0:e8d7be634e3c 68 }
Shage 0:e8d7be634e3c 69
Shage 0:e8d7be634e3c 70 else if (!strcmp(cmd, "paddle")) {
Shage 0:e8d7be634e3c 71 rled = 0;
Shage 0:e8d7be634e3c 72 gled = 0;
Shage 0:e8d7be634e3c 73 bled = 0;
Shage 0:e8d7be634e3c 74 wait(0.1);
Shage 0:e8d7be634e3c 75 }
Shage 0:e8d7be634e3c 76
Shage 0:e8d7be634e3c 77 else if (!strcmp(cmd, "win")) {
Shage 0:e8d7be634e3c 78 led1 = 0;
Shage 0:e8d7be634e3c 79 led2 = 0;
Shage 0:e8d7be634e3c 80 led3 = 0;
Shage 0:e8d7be634e3c 81 led4 = 0;
Shage 0:e8d7be634e3c 82 wait(0.25);
Shage 0:e8d7be634e3c 83 led1 = 1;
Shage 0:e8d7be634e3c 84 led2 = 1;
Shage 0:e8d7be634e3c 85 led3 = 1;
Shage 0:e8d7be634e3c 86 led4 = 1;
Shage 0:e8d7be634e3c 87 wait(0.25);
Shage 0:e8d7be634e3c 88 led1 = 0;
Shage 0:e8d7be634e3c 89 led2 = 0;
Shage 0:e8d7be634e3c 90 led3 = 0;
Shage 0:e8d7be634e3c 91 led4 = 0;
Shage 0:e8d7be634e3c 92 wait(0.25);
Shage 0:e8d7be634e3c 93 led1 = 1;
Shage 0:e8d7be634e3c 94 led2 = 1;
Shage 0:e8d7be634e3c 95 led3 = 1;
Shage 0:e8d7be634e3c 96 led4 = 1;
Shage 0:e8d7be634e3c 97 wait(0.25);
Shage 0:e8d7be634e3c 98 led1 = 0;
Shage 0:e8d7be634e3c 99 led2 = 0;
Shage 0:e8d7be634e3c 100 led3 = 0;
Shage 0:e8d7be634e3c 101 led4 = 0;
Shage 0:e8d7be634e3c 102 }
Shage 0:e8d7be634e3c 103
Shage 0:e8d7be634e3c 104 rled = 1;
Shage 0:e8d7be634e3c 105 gled = 1;
Shage 0:e8d7be634e3c 106 bled = 1;
Shage 0:e8d7be634e3c 107
Shage 0:e8d7be634e3c 108 coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED);
Shage 0:e8d7be634e3c 109 sn_nsdl_send_coap_message(address, coap_res_ptr);
Shage 0:e8d7be634e3c 110 sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr);
Shage 0:e8d7be634e3c 111 memset(cmd, 0, 10);
Shage 0:e8d7be634e3c 112 return 0;
Shage 0:e8d7be634e3c 113 }
Shage 0:e8d7be634e3c 114
Shage 0:e8d7be634e3c 115 int create_led_resource(sn_nsdl_resource_info_s *resource_ptr)
Shage 0:e8d7be634e3c 116 {
Shage 0:e8d7be634e3c 117 rled = 1;
Shage 0:e8d7be634e3c 118 gled = 1;
Shage 0:e8d7be634e3c 119 bled = 1;
Shage 0:e8d7be634e3c 120 nsdl_create_dynamic_resource(resource_ptr, sizeof(LED_RES_ID)-1, (uint8_t*)LED_RES_ID, 0, 0, 0, &led_resource_cb, SN_GRS_PUT_ALLOWED);
Shage 0:e8d7be634e3c 121 return 0;
Shage 0:e8d7be634e3c 122 }