void setup(){ setupBLE(); setupSensor(); startingAltitude = ps.pressureToAltitudeMeters(ps.readPressureMillibars()); //consider calibrating sensor //successful start up LED sequence gled = 1; bled = 0; wait(0.4); gled = 0; bled = 1; wait(0.4); gled = 1; bled = 0; wait(0.4); gled = 1; bled = 1; }
// +++++++++++++++++++++++++ main loop +++++++++++++++++++++++++++++++++++++++++++ void setup() { // init nh.initNode(); // setup setupMotor(); setupSensor(); setupServo(); // advertise nh.advertise(pub_sensor_tracks); nh.advertise(pub_range); // subscribe nh.subscribe(subscriberServo); nh.subscribe(motor_sub); }
/**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { SYSTEM_ChipRevision_TypeDef revision; char string[8]; int i; uint32_t temp; /* Chip revision alignment and errata fixes */ CHIP_Init(); /* Initialize DVK board register access */ BSP_Init(BSP_INIT_DEFAULT); /* If first word of user data page is non-zero, enable eA Profiler trace */ BSP_TraceProfilerSetup(); CMU_ClockEnable(cmuClock_HFPER, true); CMU_ClockEnable(cmuClock_ADC0, true); CMU_ClockEnable(cmuClock_GPIO, true); /* Initialize LCD controller without boost */ SegmentLCD_Init(false); SegmentLCD_AllOff(); /* Check for revision after revision B. Chips with revision earlier than */ /* Revision C has known problems with the internal temperature sensor. */ /* Display a warning in this case */ SYSTEM_ChipRevisionGet(&revision); if (revision.minor < 2) { SegmentLCD_Write("WARNING"); RTCDRV_Trigger(2000, NULL); EMU_EnterEM2(true); SegmentLCD_Write("REV C+"); RTCDRV_Trigger(2000, NULL); EMU_EnterEM2(true); SegmentLCD_Write("REQUIRD"); RTCDRV_Trigger(2000, NULL); EMU_EnterEM2(true); } /* Enable board control interrupts */ BSP_InterruptDisable(0xffff); BSP_InterruptFlagsClear(0xffff); BSP_InterruptEnable(BC_INTEN_JOYSTICK); temperatureIRQInit(); /* Setup ADC for sampling internal temperature sensor. */ setupSensor(); /* Main loop - just read temperature and update LCD */ while (1) { /* Start one ADC sample */ ADC_Start(ADC0, adcStartSingle); /* Wait in EM1 for ADC to complete */ EMU_EnterEM1(); /* Read sensor value */ temp = ADC_DataSingleGet(ADC0); /* Convert ADC sample to Fahrenheit / Celsius and print string to display */ if (showFahrenheit) { /* Show Fahrenheit on alphanumeric part of display */ i = (int)(convertToFahrenheit(temp) * 10); snprintf(string, 8, "%2d,%1d%%F", (i/10), i%10); /* Show Celsius on numeric part of display */ i = (int)(convertToCelsius(temp) * 10); SegmentLCD_Number(i*10); SegmentLCD_Symbol(LCD_SYMBOL_DP10, 1); } else { /* Show Celsius on alphanumeric part of display */ i = (int)(convertToCelsius(temp) * 10); snprintf(string, 8, "%2d,%1d%%C", (i/10), i%10); /* Show Fahrenheit on numeric part of display */ i = (int)(convertToFahrenheit(temp) * 10); SegmentLCD_Number(i*10); SegmentLCD_Symbol(LCD_SYMBOL_DP10, 1); } SegmentLCD_Write(string); /* Sleep for 2 seconds in EM 2 */ RTCDRV_Trigger(2000, NULL); EMU_EnterEM2(true); } }
/**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { uint8_t prod_rev; uint32_t temp; uint32_t temp_offset; float temperature; /* Initialize DK board register access */ BSP_Init(BSP_INIT_DEFAULT); /* If first word of user data page is non-zero, enable eA Profiler trace */ BSP_TraceProfilerSetup(); /* Initialize the TFT stdio retarget module. */ RETARGET_TftInit(); printf("\nEFM32 onchip temperature sensor example\n\n"); CMU_ClockEnable(cmuClock_HFPER, true); CMU_ClockEnable(cmuClock_ADC0, true); CMU_ClockEnable(cmuClock_GPIO, true); /* Enable board control interrupts */ BSP_InterruptDisable(0xffff); BSP_InterruptFlagsClear(0xffff); BSP_InterruptEnable(BC_INTEN_JOYSTICK); temperatureIRQInit(); /* This is a work around for Chip Rev.D Errata, Revision 0.6. */ /* Check for product revision 16 and 17 and set the offset */ /* for ADC0_TEMP_0_READ_1V25. */ prod_rev = (DEVINFO->PART & _DEVINFO_PART_PROD_REV_MASK) >> _DEVINFO_PART_PROD_REV_SHIFT; if( (prod_rev == 16) || (prod_rev == 17) ) { temp_offset = 112; } else { temp_offset = 0; } /* Setup ADC for sampling internal temperature sensor. */ setupSensor(); /* Main loop - just read temperature and update LCD */ while (1) { /* Start one ADC sample */ ADC_Start(ADC0, adcStartSingle); /* Wait in EM1 for ADC to complete */ EMU_EnterEM1(); /* Read sensor value */ /* According to rev. D errata ADC0_TEMP_0_READ_1V25 should be decreased */ /* by the offset but it is the same if ADC reading is increased - */ /* reference manual 28.3.4.2. */ temp = ADC_DataSingleGet(ADC0) + temp_offset; /* Convert ADC sample to Fahrenheit / Celsius and print string to display */ if (showFahrenheit) { temperature = convertToFahrenheit(temp); } else { temperature = convertToCelsius(temp); } printf("%d.%d %c\n", (int) temperature, (int)(10*(temperature-(int)temperature)), showFahrenheit? 'F' : 'C'); /* Sleep for 2 seconds in EM 2 */ RTCDRV_Trigger(2000, NULL); EMU_EnterEM2(true); } }
/**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { uint8_t prod_rev; char string[8]; int i; uint32_t temp; uint32_t temp_offset; /* Chip errata */ CHIP_Init(); /* If first word of user data page is non-zero, enable eA Profiler trace */ BSP_TraceProfilerSetup(); /* Enable peripheral clocks */ CMU_ClockEnable(cmuClock_HFPER, true); CMU_ClockEnable(cmuClock_ADC0, true); /* Initialize RTC timer. */ RTCDRV_Init(); RTCDRV_AllocateTimer( &xTimerForWakeUp); /* Initialize LCD controller without boost */ SegmentLCD_Init(false); SegmentLCD_AllOff(); /* This is a work around for Chip Rev.D Errata, Revision 0.6. */ /* Check for product revision 16 and 17 and set the offset */ /* for ADC0_TEMP_0_READ_1V25. */ prod_rev = (DEVINFO->PART & _DEVINFO_PART_PROD_REV_MASK) >> _DEVINFO_PART_PROD_REV_SHIFT; if( (prod_rev == 16) || (prod_rev == 17) ) { temp_offset = 112; } else { temp_offset = 0; } /* Enable board control interrupts */ gpioSetup(); /* Setup ADC for sampling internal temperature sensor. */ setupSensor(); /* Main loop - just read temperature and update LCD */ while (1) { /* Start one ADC sample */ ADC_Start(ADC0, adcStartSingle); /* Wait in EM1 for ADC to complete */ EMU_EnterEM1(); /* Read sensor value */ /* According to rev. D errata ADC0_TEMP_0_READ_1V25 should be decreased */ /* by the offset but it is the same if ADC reading is increased - */ /* reference manual 28.3.4.2. */ temp = ADC_DataSingleGet(ADC0) + temp_offset; /* Convert ADC sample to Fahrenheit / Celsius and print string to display */ if (showFahrenheit) { /* Show Fahrenheit on alphanumeric part of display */ i = (int)(convertToFahrenheit(temp) * 10); snprintf(string, 8, "%2d,%1d%%F", (i/10), abs(i%10)); /* Show Celsius on numeric part of display */ i = (int)(convertToCelsius(temp) * 10); SegmentLCD_Number(i*10); SegmentLCD_Symbol(LCD_SYMBOL_DP10, 1); SegmentLCD_Symbol(LCD_SYMBOL_DEGC, 1); SegmentLCD_Symbol(LCD_SYMBOL_DEGF, 0); } else { /* Show Celsius on alphanumeric part of display */ i = (int)(convertToCelsius(temp) * 10); snprintf(string, 8, "%2d,%1d%%C", (i/10), abs(i%10)); /* Show Fahrenheit on numeric part of display */ i = (int)(convertToFahrenheit(temp) * 10); SegmentLCD_Number(i*10); SegmentLCD_Symbol(LCD_SYMBOL_DP10, 1); SegmentLCD_Symbol(LCD_SYMBOL_DEGC, 0); SegmentLCD_Symbol(LCD_SYMBOL_DEGF, 1); } SegmentLCD_Write(string); /* Sleep for 2 seconds in EM 2 */ RTCDRV_StartTimer( xTimerForWakeUp, rtcdrvTimerTypeOneshot, 2000, NULL, NULL); EMU_EnterEM2(true); } }
/**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { unsigned char pucMACArray[8]; uint32_t temp; /* Chip revision alignment and errata fixes */ CHIP_Init(); /* Ensure core frequency has been updated */ SystemCoreClockUpdate(); CMU_ClockEnable(cmuClock_ADC0, true); /* Setup SysTick Timer for 1 msec interrupts */ if (SysTick_Config(SystemCoreClock / 1000)) while (1) ; /* Setup ADC for sampling internal temperature sensor. */ setupSensor(); /* Spi init*/ spiInit(); #if LWIP_DHCP /* Initialze the lwIP library, using DHCP.*/ lwIPInit(pucMACArray, 0, 0, 0, IPADDR_USE_DHCP); #else /* Initialze the lwIP library, using Static IP.*/ lwIPInit(pucMACArray, IPADDR(192, 168, 79, 160), IPADDR(255, 255, 255, 0), \ IPADDR(192, 168, 79, 1), IPADDR_USE_STATIC); #endif /* Initialize a sample httpd server.*/ httpd_init(); /* Start one ADC sample */ ADC_Start(ADC0, adcStartSingle); /* Enable board control interrupts */ gpioSetup(); axspi_write_reg(~IMR_RXPKT, P0_IMR); /* Start LCD without boost */ SegmentLCD_Init(false); CMU_ClockEnable(cmuClock_RTC, true); /* RTC configuration structure */ RTC_Init_TypeDef rtcInit = { .enable = false, .debugRun = false, .comp0Top = true }; /* Initialize RTC */ RTC_Init(&rtcInit); /* Set COMP0 value which will be the top value as well */ RTC_CompareSet(RTC_COMP, RTC_COMP_VALUE); /* Clear all pending interrupts */ RTC_IntClear(0x7); /* Enable COMP0 interrupts */ RTC_IntEnable(0x2); /* Enable interrupts */ NVIC_ClearPendingIRQ(RTC_IRQn); NVIC_EnableIRQ(RTC_IRQn); RTC_Enable(true); while (1) { /* check temperature flag*/ if (read_temperature) { temp = ADC_DataSingleGet(ADC0); /* Show Celsius on numeric part of display */ temperature = (int)(convertToCelsius(temp)); /* Start a new conversion */ ADC_Start(ADC0, adcStartSingle); /* Reset temperature flag */ read_temperature = 0; } if (updateIpFlag) { switch (ip_field) { case 1: { SegmentLCD_Write(IP_ADDR_FIRST_TEXT); SegmentLCD_Number(IP_ADDR_FIRST_NUM(lwip_netif.ip_addr.addr)); ip_field++; } break; case 2: { SegmentLCD_Write(IP_ADDR_SECOND_TEXT); SegmentLCD_Number(IP_ADDR_SECOND_NUM(lwip_netif.ip_addr.addr)); ip_field++; } break; case 3: { SegmentLCD_Write(IP_ADDR_THIRD_TEXT); SegmentLCD_Number(IP_ADDR_THIRD_NUM(lwip_netif.ip_addr.addr)); ip_field++; } break; case 4: { SegmentLCD_Write(IP_ADDR_FOURTH_TEXT); SegmentLCD_Number(IP_ADDR_FOURTH_NUM(lwip_netif.ip_addr.addr)); ip_field = 1; } break; default: break; } updateIpFlag = false; } } }