Lizzy project

Dependencies:   aconno_I2C Lis2dh12 adc52832_common aconno_SEGGER_RTT

source/main.cpp

Committer:
dbartolovic
Date:
2018-03-13
Revision:
6:55607d577a42
Parent:
5:9903738f2587
Child:
7:ac8277568115

File content as of revision 6:55607d577a42:

/* 
 * aconno.de
 * Made by Jurica Resetar
 * All right reserved 
 *
 */

#include "main.h"

static advertising_packet advertisementPacket;
static GapAdvertisingData adv_data = GapAdvertisingData();

void disableI2C(){
    NRF_TWI0->ENABLE = 0;
    NRF_TWI0->PSELSCL = 0xFFFFFFFF;
    NRF_TWI1->ENABLE = 0;
    NRF_TWI1->PSELSCL = 0xFFFFFFFF;
    NRF_TWIM0->ENABLE = 0;
    NRF_TWIM0->PSEL.SCL = 0x80000000;
    NRF_TWIM0->PSEL.SDA = 0x80000000;
    NRF_TWIM1->ENABLE = 0;
    NRF_TWIM0->PSEL.SCL = 0x80000000;
    NRF_TWIM0->PSEL.SDA = 0x80000000;
    DigitalOut foo(I2C_DATA);
    DigitalOut bar(I2C_CLK);
    foo = 1;
    bar = 1;
}

void bleF(BLE *ble)
{
    while(true)
    {

        advertisementPacket.header = APPLICATION_ID;
        advertisementPacket.type = 0x00;
        advertisementPacket.gyroscope[0] = (int16_t)0;
        advertisementPacket.gyroscope[1] = (int16_t)0;
        advertisementPacket.gyroscope[2] = (int16_t)0;
        advertisementPacket.magnetometer[0] = (int16_t)0;
        advertisementPacket.magnetometer[1] = (int16_t)0;
        advertisementPacket.magnetometer[2] = (int16_t)0;
        
        
        advertisementPacket.accelerometer[0] = (int16_t)mems.readXAxis();
        advertisementPacket.accelerometer[1] = (int16_t)mems.readYAxis();
        advertisementPacket.accelerometer[2] = (int16_t)mems.readZAxis();
        
        //advertisementPacket.acc_lsb_value = 0xC000;
        advertisementPacket.acc_lsb_value = 0x0100;
        
        
        printf("%6d\t", advertisementPacket.accelerometer[0]);
        printf("%6d\t", advertisementPacket.accelerometer[1]);
        printf("%6d\r\n", advertisementPacket.accelerometer[2]);

        //updatePayload(ble, &advertisementPacket);
        
        /* setup advertising */
        
        
        /*
        GapAdvertisingData advetisementData = GapAdvertisingData();
        advetisementData = ble->getAdvertisingData();
        advetisementData.updateData(advetisementData.MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&advertisementPacket, sizeof(advertising_packet));
        ble->setAdvertisingData(advetisementData);
        */
        adv_data = ble->getAdvertisingData();
        adv_data.updateData(adv_data.MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&advertisementPacket, sizeof(advertisementPacket));
        ble->setAdvertisingData(adv_data);
        
        
        //printf("Ble advertisement is ON.\r\n");
        
        #if DEBUG_LED
            redLed = 0;
        #endif
        ble->gap().startAdvertising();
        //wait_ms(1000);
        
        wait_ms(MEASURE_INTERVAL_MS);
        //wait_ms(1000);
        
        //printf("Ble advertisement is OFF.\r\n\r\n");
        #if DEBUG_LED
            redLed = 1;
        #endif
        //ble->gap().stopAdvertising();
        /*
        GapAdvertisingData advetisementData = GapAdvertisingData();
        advetisementData = ble->getAdvertisingData();
        advetisementData.updateData(advetisementData.MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&advertisementPacket, sizeof(advertising_packet));
        ble->setAdvertisingData(advetisementData);
        */
        //wait_ms(100);
    }
}

void led_tick();

void buzz_tick()
{
    static int start = 1;
    
    if (start)
    {
        buzzer.enable(BUZZER_FREQUENCY_HZ);
        buzzer.enableChannel(0, BUZZER_PIN);
        buzzer.setDuty(0,0.5f);
        start = 0;
    }
    else
    {
        buzzer.enable(0);
        buzzer.setDuty(0, 0);
        buzzer.disable();
        start = 1;
        led_tick();
        test_ticker.detach();
        test_ticker.attach(led_tick, 0.5);
    }
}


void led_tick()
{
    static int count = 0;
    
    switch(count)
    {
        case 0:
            redLed = 0;
            break;
            
        case 1:
            redLed = 1;
            blueLed = 0;
            break;
            
        case 2:
            blueLed = 1;
            greenLed = 0;
            break;
        
        default:
            greenLed = 1;
            count = -1;
            buzz_tick();
            test_ticker.detach();
            test_ticker.attach(buzz_tick, BUZZ_TIME_S);
    }
    
    count++;
}

int main(){
    
    test_ticker.attach(led_tick, 0.5);
    
    printf("Main program started.\r\n");
    
    NRF_NVMC->CONFIG = 0x00000002;      // Erase enable UICR
    NRF_NVMC->ERASEUICR = 0x00000001;   // Erase all
    NRF_NVMC->CONFIG = 0x00000001;      // Write enable UICR
    NRF_UICR->NFCPINS = 0xFFFFFFFE;     // Change NFC to GPIO function
    
    redLed = 0;
    AccVcc = 1;
    
    blueLed = 1;
    greenLed = 1;
    wait_ms(POWER_UP_DELAY_MS);

    /*
    INT1.rise(int1Handler);
    NRF_GPIO->PIN_CNF[INT_PIN1] &= 0xFFFFFFF3;  // NO PullUps
    */
    
    BLE &ble = BLE::Instance();
    ble.init(bleInitComplete);
    
    //mems.setMode(LOW_POWER);
    mems.setMode(HIGH_RES);
    mems.enableAxes(X_axis);
    mems.enableAxes(Y_axis);
    mems.enableAxes(Z_axis);    
    mems.setODR(ODR_50Hz);
    //mems.setScale(_16g);
    mems.setScale(_2g);
    mems.int1Setup(0x40);       // IntActivity 1 driven to INT1 pad
    mems.int1Latch(0x01);       // Enable int1 latch
    mems.int1Threshold(INT1_THRESHOLD); 
    mems.int1Duration(INT1_DUR);            
    mems.int1Config(0x2A);      // Enable XHigh, YHigh and ZHigh
    
    bleT.start(callback(bleF, &ble));   // Start bleT
    
    
    while(1){
        //disableI2C();
        Thread::wait(0xFFFFFFFF);
    }
}