Last versionnnn

Dependencies:   BLE_API HCSR04 X_NUCLEO_IDB0XA1 mbed

Fork of contest_IOT3 by Contest IOT GSE5

Revision:
6:55319ed07a08
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jeu.h	Wed Nov 04 15:02:59 2015 +0000
@@ -0,0 +1,134 @@
+#ifndef JEU_H
+#define JEU_H
+
+#include "mbed.h"
+#include "ble/BLE.h"
+#include "ble/services/HeartRateService.h"
+#include "ble/services/BatteryService.h"
+#include "ble/services/DeviceInformationService.h"
+
+DigitalOut led1(LED1);
+
+/******************************
+ |      CONFIGURATION BLE     |
+ ******************************/
+
+uint16_t customServiceUUID  = 0xA000;
+uint16_t readP1UUID         = 0xA001;
+uint16_t readP2UUID         = 0xA002;
+uint16_t chronoUUID         = 0xA003;
+
+const static char     DEVICE_NAME[]        = "Pong!";
+static const uint16_t uuid16_list[]        = {0xFFFF}; //Custom UUID, FFFF is reserved for development
+
+
+// Set Up custom Characteristics
+static uint8_t readP1[10] = {0};
+ReadOnlyArrayGattCharacteristic<uint8_t, sizeof(readP1)> player1(readP1UUID, readP1);
+static uint8_t readP2[10] = {0};
+ReadOnlyArrayGattCharacteristic<uint8_t, sizeof(readP2)> player2(readP2UUID, readP2);
+static uint8_t readChrono[10] = {0};
+ReadOnlyArrayGattCharacteristic<uint8_t, sizeof(readChrono)> chronoJeu(chronoUUID, readChrono);
+
+// Set up custom service
+GattCharacteristic *characteristics[] = {&player1, &player2, &chronoJeu};
+GattService        customService(customServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
+
+static volatile bool  triggerSensorPolling = false;
+
+void periodicCallback(void){
+    led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
+    /* Note that the periodicCallback() executes in interrupt context, so it is safer to do
+     * heavy-weight sensor polling from the main thread. */
+    triggerSensorPolling = true;
+}
+
+void initJeuBLE(BLE &ble){
+    ble.init();
+
+    /* Setup advertising. */
+    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
+    ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
+    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
+    ble.gap().setAdvertisingInterval(1000); /* 1000ms */
+    ble.addService(customService);
+    ble.gap().startAdvertising();
+}
+void miseAJourBLE(BLE &ble,uint8_t &p1_score,uint8_t &p2_score,uint8_t &chrono){
+    const uint8_t scoreP1const = p1_score;
+    const uint8_t scoreP2const = p2_score;
+    const uint8_t chronoconst = chrono;
+    
+    ble.gattServer().write(player1.getValueHandle(), &scoreP1const, sizeof(scoreP1const));
+    ble.gattServer().write(player2.getValueHandle(), &scoreP2const, sizeof(scoreP2const));
+    ble.gattServer().write(chronoJeu.getValueHandle(), &chronoconst, sizeof(chronoconst));
+}
+
+
+/******************************
+ |      CONFIGURATION JEU     |
+ ******************************/
+
+class InfosJeu {
+  public:
+    InfosJeu(){
+        chrono=0;
+        p1_score=0;
+        p2_score=0;
+        chronoActive=0;
+        
+        posBallX = 5.0;
+        posBallY = 19.0;
+        angBall = 25.0;
+        state = 0;
+        p1_score = 0;
+        p2_score = 0;
+        wait(1);
+        //led=1;
+        distance1=0;
+        distance2=0;
+        for(int i=0;i<30;i++){
+            pos1prec[i]=0;
+            pos2prec[i]=0;
+            pos1[i]=0;
+            pos2[i]=0;
+        }
+    }
+    uint8_t chrono;
+    bool chronoActive;
+    uint8_t p1_score;
+    uint8_t p2_score;
+    
+    int pos1prec[30];
+    int pos2prec[30];
+    int pos1[30];
+    int pos2[30];
+    double posBallX;
+    double posBallY;
+    double angBall;
+    int distance1;
+    int distance2;
+    
+    int state;
+    
+    void addPointP1(){p1_score++;}
+    void addPointP2(){p2_score++;}
+    void setChronoActive(){chronoActive=true;}
+    void incrementeChrono(){if(chronoActive){chrono++;}}
+    void stopChrono(){chronoActive=false;}
+    void resetAndStart(){chrono=0; p1_score=0; p2_score=0; setChronoActive();}
+    
+    void reinitPosition(int p1_sc, int p2_sc, int posX, int posY, int angle){
+        p1_score = p1_sc;
+        p2_score = p2_sc;
+        posBallX = posX;
+        posBallY = posY;
+        angBall = angle;
+    }
+};
+
+
+
+
+#endif
\ No newline at end of file