Robert Sochuliak
/
Vytah
test
FreeFall.cpp@1:a7bdc6b05f96, 2019-01-24 (annotated)
- Committer:
- hodgins
- Date:
- Thu Jan 24 06:52:36 2019 +0000
- Revision:
- 1:a7bdc6b05f96
- Parent:
- 0:e541909ea6b0
test
Who changed what in which revision?
User | Revision | Line number | New 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 | } |