test

Dependencies:   mbed MMA8451Q

Committer:
hodgins
Date:
Thu Jan 24 06:52:36 2019 +0000
Revision:
1:a7bdc6b05f96
Parent:
0:e541909ea6b0
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hodgins 0:e541909ea6b0 1 #include "FreeFall.h"
hodgins 0:e541909ea6b0 2 #include "Communication.h"
hodgins 0:e541909ea6b0 3
hodgins 1:a7bdc6b05f96 4 DigitalOut freeFall_LED(LED_RED); //nastavenie led na cervenu
hodgins 0:e541909ea6b0 5 InterruptIn acc(PTA15); //Nastavenie prerušenia od akcelerometra
hodgins 0:e541909ea6b0 6 I2C i2c(SDA, SCL);
hodgins 0:e541909ea6b0 7
hodgins 0:e541909ea6b0 8 bool freeFall_check; //Premenná s informáciou,ći nastal voľný pád
hodgins 0:e541909ea6b0 9
hodgins 0:e541909ea6b0 10 void ledBlick()
hodgins 0:e541909ea6b0 11 {
hodgins 0:e541909ea6b0 12 freeFall_LED = 0;
hodgins 0:e541909ea6b0 13 wait(100);
hodgins 0:e541909ea6b0 14 freeFall_LED = 1;
hodgins 0:e541909ea6b0 15 }
hodgins 0:e541909ea6b0 16
hodgins 0:e541909ea6b0 17 //Funkcia vyvolaná pri vyvolaní prerušenia
hodgins 0:e541909ea6b0 18 void freeFall()
hodgins 0:e541909ea6b0 19 {
hodgins 0:e541909ea6b0 20 uint8_t IntSourceSystem = 0;
hodgins 0:e541909ea6b0 21 char t[1] = {0x0C};
hodgins 0:e541909ea6b0 22 i2c.write(MMA8451_I2C_ADDRESS , t, 1, true);
hodgins 0:e541909ea6b0 23 i2c.read(MMA8451_I2C_ADDRESS , (char *)&IntSourceSystem, 1); //vyčítanie hodnoty z registra akcelerometra
hodgins 0:e541909ea6b0 24
hodgins 0:e541909ea6b0 25 if ((IntSourceSystem&0x04)==0x04) { //zisťovanie či nastal voľný pád
hodgins 0:e541909ea6b0 26 char command [] = {0x01};
hodgins 0:e541909ea6b0 27 paket emergencyBreak = {.adresa = 0x0f,.dlzkaDat = 0x01, .data = command};
hodgins 0:e541909ea6b0 28 paket freeFall_console= {.adresa = 0xD0,.dlzkaDat = 0x1e,.data = "\n\r FreeFALL ! volajte udrzbu !"};
hodgins 0:e541909ea6b0 29 sendData(emergencyBreak); // Aktivácia núdzovej brzdy vo výťahu
hodgins 0:e541909ea6b0 30 sendData(freeFall_console); // Otovrenie kabíny výťahu
hodgins 0:e541909ea6b0 31 freeFall_LED = 0; // Rozsvietenie LED na doske
hodgins 0:e541909ea6b0 32 freeFall_check = true;
hodgins 0:e541909ea6b0 33 }
hodgins 0:e541909ea6b0 34 }
hodgins 0:e541909ea6b0 35
hodgins 0:e541909ea6b0 36 //Inicializácia akcelerometra na detekciu voľného pádu
hodgins 0:e541909ea6b0 37 void init_freeFall()
hodgins 0:e541909ea6b0 38 {
hodgins 0:e541909ea6b0 39 //https://www.nxp.com/docs/en/application-note/AN4070.pdf?&fasp=1&WT_TYPE=Applicatio
hodgins 0:e541909ea6b0 40 uint8_t data1[2] = {0x2A, 0x20}; // Deaktivacia senzora
hodgins 0:e541909ea6b0 41 i2c.write(MMA8451_I2C_ADDRESS , (char *)data1, 2);
hodgins 0:e541909ea6b0 42 uint8_t data2[2] = {0x15, 0xB8};
hodgins 0:e541909ea6b0 43 i2c.write(MMA8451_I2C_ADDRESS , (char *)data2, 2);
hodgins 0:e541909ea6b0 44 uint8_t data3[2] = {0x17, 0x03};
hodgins 0:e541909ea6b0 45 i2c.write(MMA8451_I2C_ADDRESS , (char *)data3, 2);
hodgins 0:e541909ea6b0 46 uint8_t data4[2] = {0x18, 0x06};
hodgins 0:e541909ea6b0 47 i2c.write(MMA8451_I2C_ADDRESS , (char *)data4, 2);
hodgins 0:e541909ea6b0 48 uint8_t data5[2] = {0x2D, 0x04};
hodgins 0:e541909ea6b0 49 i2c.write(MMA8451_I2C_ADDRESS , (char *)data5, 2);
hodgins 0:e541909ea6b0 50 uint8_t data6[2] = {0x2E, 0x00};
hodgins 0:e541909ea6b0 51 i2c.write(MMA8451_I2C_ADDRESS , (char *)data6, 2);
hodgins 0:e541909ea6b0 52 uint8_t data7[2]= {0x2A, 0x09 }; //Frekvencia je nastavena na 400 Hz, aktivacia senzora
hodgins 0:e541909ea6b0 53 i2c.write(MMA8451_I2C_ADDRESS , (char *)data7, 2);
hodgins 0:e541909ea6b0 54
hodgins 0:e541909ea6b0 55 char command [] = {0x00};
hodgins 0:e541909ea6b0 56 paket emergencyBreak = {.adresa = 0x0f,.dlzkaDat = 0x01, .data = command};
hodgins 0:e541909ea6b0 57 sendData(emergencyBreak); // Deaktivácia núdzovej brzdy vo výťahu
hodgins 0:e541909ea6b0 58
hodgins 0:e541909ea6b0 59 freeFall_check = false;
hodgins 0:e541909ea6b0 60 freeFall_LED = 1; // Inikačná dióda na doske je vypnutá
hodgins 0:e541909ea6b0 61
hodgins 0:e541909ea6b0 62 acc.fall(&freeFall); // nastavenie prerušenia z akcelerometra
hodgins 0:e541909ea6b0 63 }
hodgins 0:e541909ea6b0 64
hodgins 0:e541909ea6b0 65
hodgins 0:e541909ea6b0 66 // Funkcia vracia informáciu či nastal voľný pád
hodgins 0:e541909ea6b0 67 bool freeFall_status()
hodgins 0:e541909ea6b0 68 {
hodgins 0:e541909ea6b0 69 return freeFall_check;
hodgins 0:e541909ea6b0 70 }