test

Dependencies:   mbed MMA8451Q

Revision:
0:e541909ea6b0
Child:
1:a7bdc6b05f96
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FreeFall.cpp	Thu Jan 24 06:35:38 2019 +0000
@@ -0,0 +1,70 @@
+#include "FreeFall.h"
+#include "Communication.h"
+
+DigitalOut freeFall_LED(LED_RED); 
+InterruptIn acc(PTA15);             //Nastavenie prerušenia od akcelerometra
+I2C i2c(SDA, SCL);
+
+bool freeFall_check; //Premenná s informáciou,ći nastal voľný pád
+
+void ledBlick()
+{
+    freeFall_LED = 0;
+    wait(100);
+    freeFall_LED = 1;
+}
+
+//Funkcia vyvolaná pri vyvolaní prerušenia
+void freeFall()
+{
+    uint8_t IntSourceSystem = 0;  
+    char t[1] = {0x0C};
+    i2c.write(MMA8451_I2C_ADDRESS , t, 1, true);
+    i2c.read(MMA8451_I2C_ADDRESS , (char *)&IntSourceSystem, 1); //vyčítanie hodnoty z registra akcelerometra
+
+    if ((IntSourceSystem&0x04)==0x04) {  //zisťovanie či nastal voľný pád
+         char command [] = {0x01};
+         paket emergencyBreak = {.adresa = 0x0f,.dlzkaDat = 0x01, .data = command};
+         paket freeFall_console= {.adresa = 0xD0,.dlzkaDat = 0x1e,.data = "\n\r FreeFALL ! volajte udrzbu !"};
+         sendData(emergencyBreak);      // Aktivácia núdzovej brzdy vo výťahu
+         sendData(freeFall_console);    // Otovrenie kabíny výťahu  
+         freeFall_LED = 0;              // Rozsvietenie LED na doske
+         freeFall_check = true;            
+    }
+}
+
+//Inicializácia akcelerometra na detekciu voľného pádu
+void init_freeFall()
+{
+    //https://www.nxp.com/docs/en/application-note/AN4070.pdf?&fasp=1&WT_TYPE=Applicatio
+    uint8_t data1[2] = {0x2A, 0x20}; // Deaktivacia senzora
+    i2c.write(MMA8451_I2C_ADDRESS , (char *)data1, 2);
+    uint8_t data2[2] = {0x15, 0xB8};
+    i2c.write(MMA8451_I2C_ADDRESS , (char *)data2, 2);
+    uint8_t data3[2] = {0x17, 0x03};
+    i2c.write(MMA8451_I2C_ADDRESS , (char *)data3, 2);
+    uint8_t data4[2] = {0x18, 0x06};
+    i2c.write(MMA8451_I2C_ADDRESS , (char *)data4, 2);
+    uint8_t data5[2] = {0x2D, 0x04};
+    i2c.write(MMA8451_I2C_ADDRESS , (char *)data5, 2);
+    uint8_t data6[2] = {0x2E, 0x00};
+    i2c.write(MMA8451_I2C_ADDRESS , (char *)data6, 2);
+    uint8_t data7[2]= {0x2A, 0x09 }; //Frekvencia je nastavena na 400 Hz, aktivacia senzora
+    i2c.write(MMA8451_I2C_ADDRESS , (char *)data7, 2);
+    
+    char command [] = {0x00};
+    paket emergencyBreak = {.adresa = 0x0f,.dlzkaDat = 0x01, .data = command};
+    sendData(emergencyBreak);      // Deaktivácia núdzovej brzdy vo výťahu
+    
+    freeFall_check = false;
+    freeFall_LED = 1;    // Inikačná dióda na doske je vypnutá
+    
+    acc.fall(&freeFall); // nastavenie prerušenia z akcelerometra
+}
+
+
+// Funkcia vracia informáciu či nastal voľný pád
+bool freeFall_status()
+{
+    return freeFall_check;
+}
\ No newline at end of file