/**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { int i; uint8_t data[7]; SENSOR_DATA_TypeDef axis_converted_avg[33]; char lcd_data[20]; /* ADXL345 I2C driver config */ ADXL345Handle.port = I2C1; ADXL345Handle.sclPort = ADXL345_I2C_SCL_PORT; ADXL345Handle.sclPin = ADXL345_I2C_SCL_PIN; ADXL345Handle.sdaPort = ADXL345_I2C_SDA_PORT; ADXL345Handle.sdaPin = ADXL345_I2C_SDA_PIN; ADXL345Handle.portLocation = ADXL345_I2C_PORT_LOC; /* Chip errata */ CHIP_Init(); /* If first word of user data page is non-zero, enable eA Profiler trace */ BSP_TraceProfilerSetup(); /* Enable two leds to show we're alive */ BSP_LedsInit(); BSP_LedSet(0); BSP_LedSet(1); /* Setup SysTick Timer for 1 msec interrupts */ if (SysTick_Config(CMU_ClockFreqGet(cmuClock_CORE) / 1000)) while (1) ; /* Enable LCD without voltage boost */ SegmentLCD_Init(false); /* Initialize I2C drivers */ I2CSPM_Init(&ADXL345Handle); ADXL345_INIT(ADXL345Handle.port); SegmentLCD_Write("ADXL345"); Delay(500); /* Read Device ID */ SegmentLCD_Write("DEV_ID"); Delay(500); ADXL345_Read_Reg(ADXL345Handle.port, DEVICEID_REG_ADDR,data,1); SegmentLCD_LowerHex(data[0]); Delay(500); /* Read FIFO CTL */ SegmentLCD_Write("AXISDATA"); Delay(500); /* Infinite loop with test pattern. */ while(1) { // axis_converted_avg.X = 0; // axis_converted_avg.Y = 0; // axis_converted_avg.Z = 0; ADXL345_Read_Reg(ADXL345Handle.port, 0x30,data,1); if(data[0]&0x02) { ADXL345_READ_FIFO(axis_converted_avg); // sprintf(lcd_data,"X:%d",(int)axis_converted_avg.X/i); // SegmentLCD_Write(lcd_data); // Delay(500); // sprintf(lcd_data,"Y:%d",(int)axis_converted_avg.Y/i); // SegmentLCD_Write(lcd_data); // Delay(500); // sprintf(lcd_data,"Z:%d",(int)axis_converted_avg.Z/i); // SegmentLCD_Write(lcd_data); // Delay(500); for(i=0;i<33;i++) { ADXL345_STEPCOUNT(axis_converted_avg[i]); } } SegmentLCD_LowerNumber(STEP_COUNT); // SegmentLCD_LowerNumber(ADXL345_DATA_CONVERT(axis_data[0])); Delay(500); // SegmentLCD_LowerNumber(ADXL345_DATA_CONVERT(axis_data[1])); // Delay(500); // SegmentLCD_LowerNumber(ADXL345_DATA_CONVERT(axis_data[2])); // Delay(500); // ADXL345_Read_Reg(ADXL345Handle.port, 0x1e,data,1); // SegmentLCD_LowerHex(data[0]); // Delay(500); // ADXL345_Read_Reg(ADXL345Handle.port, 0x1f,data,1); // SegmentLCD_LowerHex(data[0]); // Delay(500); // ADXL345_Read_Reg(ADXL345Handle.port, 0x20,data,1); // SegmentLCD_LowerHex(data[0]); // Delay(500); // SegmentLCD_LowerHex(axis_data[1]<< 8 + axis_data[0]); // Delay(500); // SegmentLCD_LowerHex(axis_data[3]<< 8 + axis_data[2]); // Delay(500); // SegmentLCD_LowerHex(axis_data[5]<< 8 + axis_data[4]); // Delay(1000); } }
/**************************************************************************//** * @brief LCD Test Routine, shows various text and patterns *****************************************************************************/ void Test(void) { int i, numberOfIterations = 0; /* Initialize GPIO */ GPIO_IRQInit(); /* Loop through funny pattern */ while (1) { SegmentLCD_AllOff(); if (emMode == DEMO_MODE_NONE) { for (i = 100; i > 0; i--) { SegmentLCD_Number(i); EM2Sleep(10); } SegmentLCD_NumberOff(); SegmentLCD_Symbol(LCD_SYMBOL_OLIMEX, 1); SegmentLCD_Write(" Gecko "); EM2Sleep(1000); SegmentLCD_AllOn(); EM2Sleep(1000); SegmentLCD_AllOff(); SegmentLCD_Write("OPENOCD"); EM2Sleep(2000); SegmentLCD_Write("GDB"); EM2Sleep(2000); SegmentLCD_Write("DONE"); EM2Sleep(2000); SegmentLCD_Write("XXXXXXX"); EM2Sleep(500); SegmentLCD_Write("-EFM32-"); EM2Sleep(2000); /* Various eye candy */ SegmentLCD_AllOff(); for (i = 0; i < 17; i++) { SegmentLCD_LowerNumber( i); SegmentLCD_Battery(i); SegmentLCD_UnsignedHex(numberOfIterations +i); EM2Sleep(200); } SegmentLCD_Symbol(LCD_SYMBOL_ARR_UP, 1); EM2Sleep(200); SegmentLCD_Symbol(LCD_SYMBOL_ARR_DN, 1); EM2Sleep(200); SegmentLCD_Symbol(LCD_SYMBOL_ARR_L, 1); EM2Sleep(200); SegmentLCD_Symbol(LCD_SYMBOL_ARR_R, 1); EM2Sleep(200); SegmentLCD_Symbol(LCD_SYMBOL_MINUS, 1); SegmentLCD_Symbol(LCD_SYMBOL_PLUS, 1); EM2Sleep(100); SegmentLCD_Symbol(LCD_SYMBOL_u, 1); SegmentLCD_Symbol(LCD_SYMBOL_m, 1); SegmentLCD_Symbol(LCD_SYMBOL_H, 1); SegmentLCD_Symbol(LCD_SYMBOL_F, 1); EM2Sleep(200); SegmentLCD_Symbol(LCD_SYMBOL_2COL, 1); SegmentLCD_Symbol(LCD_SYMBOL_3COL, 1); SegmentLCD_Symbol(LCD_SYMBOL_4COL, 1); SegmentLCD_Symbol(LCD_SYMBOL_5COL, 1); SegmentLCD_Symbol(LCD_SYMBOL_6COL, 1); SegmentLCD_Symbol(LCD_SYMBOL_10COL, 1); SegmentLCD_Symbol(LCD_SYMBOL_1DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_2DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_3DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_4DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_5DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_6DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_8DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_10DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_11DP, 1); EM2Sleep(800); SegmentLCD_AllOff(); /* Energy Modes */ SegmentLCD_Number(0); SegmentLCD_Battery(0); SegmentLCD_Write(" EM0 "); RTCDRV_Delay(2000, false); SegmentLCD_Number(1111); SegmentLCD_Battery(1); SegmentLCD_Write(" EM1 "); EM1Sleep(2000); SegmentLCD_Number(2222); SegmentLCD_Battery(2); SegmentLCD_Write(" EM2 "); EM2Sleep(2000); ScrollText("Energy Mode demo, Press BUT2 for EM3 or BUT1 for EM4 "); EM2Sleep(500); SegmentLCD_Write("PRESS x"); EM2Sleep(2000); } /* Check if somebody has pressed one of the buttons */ if (emMode == DEMO_MODE_EM3) { SegmentLCD_Number(3333); SegmentLCD_Battery(3); SegmentLCD_Arrows(0, 1); //arrow down, go to sleep in EM3 ScrollText("Going down to EM3, press BUT2 to wake up "); SegmentLCD_Write(" EM3 "); RTCDRV_Delay(1000, false); /* Wake up on GPIO interrupt */ EM3Sleep(); SegmentLCD_Battery(0); SegmentLCD_Arrows(0, 0); //arrow down off SegmentLCD_Arrows(2, 1); //arrow up, wakeup from sleep in EM3 SegmentLCD_Write("wakeup"); RTCDRV_Delay(1500, false); SegmentLCD_Arrows(2, 0); //arrow up off SegmentLCD_Battery(0); SegmentLCD_Number(0000); SegmentLCD_Write("--EM0--"); RTCDRV_Delay(500, false); } /* Check if somebody's joystick down */ if (emMode == DEMO_MODE_EM4) { SegmentLCD_Number(4444); SegmentLCD_Battery(4); SegmentLCD_Arrows(0, 1); //arrow down, go to sleep in EM4 ScrollText("Going down to EM4, press reset to restart "); SegmentLCD_Write(" EM4 "); RTCDRV_Delay(1000, false); /* Wake up on reset */ EM4Sleep(); } /* Scrolltext */ ScrollText(stext); numberOfIterations++; } }