//-------------------------------------------------------------- // starten von n-Messungen // und auslesen vom Mittelwert //-------------------------------------------------------------- uint16_t UB_ADC1_SINGLE_Read_MW(ADC1s_NAME_t adc_name) { uint32_t mittelwert=0; uint16_t messwert,n; uint16_t anz_mw=1,anz_bit=0; if(ADC1s[adc_name].ADC_MW==MW_NONE) { anz_mw=1;anz_bit=0; } else if(ADC1s[adc_name].ADC_MW==MW_2) { anz_mw=2;anz_bit=1; } else if(ADC1s[adc_name].ADC_MW==MW_4) { anz_mw=4;anz_bit=2; } else if(ADC1s[adc_name].ADC_MW==MW_8) { anz_mw=8;anz_bit=3; } else if(ADC1s[adc_name].ADC_MW==MW_16) { anz_mw=16;anz_bit=4; } else if(ADC1s[adc_name].ADC_MW==MW_32) { anz_mw=32;anz_bit=5; } else if(ADC1s[adc_name].ADC_MW==MW_64) { anz_mw=64;anz_bit=6; } else if(ADC1s[adc_name].ADC_MW==MW_128) { anz_mw=128;anz_bit=7; } for(n=0;n<anz_mw;n++) { messwert=UB_ADC1_SINGLE_Read(adc_name); mittelwert+=messwert; } messwert=(mittelwert >> anz_bit); return(messwert); }
/***************************************** * MAIN *****************************************/ int main(void) { SystemInit(); UB_Systick_Init(); // Init of UB libs UB_TIMER2_Init_FRQ( 100 ); UB_TIMER5_Init_FRQ( 10000 ); UB_Led_Init(); UB_DigIn_Init(); UB_DigOut_Init(); UB_ADC1_SINGLE_Init(); UB_RTC_Init(); UB_RTC_SetWakeUpInterrupt(RTC_WAKEUP_5s); // Note: code needs to be reconfigured for Nucleo Board (Frequency of 96 MHz should also be checked) UB_WS2812_Init(); WC_DisableAllElements(); WC_SetColor( WS2812_HSV_COL_WHITE ); WC_SetBrightness( 10 ); WC_SetElement(WC_ELEMENT_ES, 1); WC_Refresh(); UB_Uart_Init(); esp8266_init(); UB_Systick_Pause_ms(1000); // Indicate successful booting UB_Led_On( LED_GREEN ); UB_Systick_Pause_s(1); UB_Led_Off( LED_GREEN ); // Start timers and therefore cyclic actions in the call backs below UB_TIMER2_Start(); UB_TIMER5_Start(); UB_DigOut_Lo(DOUT_PB7); // Set ground for LDR UB_DigOut_Lo(DOUT_PB9); // Set PC9 low to start DCF module while(1) { // Handle word matrix refreshes if ( gWcIsToBeRefreshed == Bit_SET ){ WC_Refresh(); gWcIsToBeRefreshed = Bit_RESET; } // Check if update of time is necessary #ifndef DISABLE_DCF if ( DcfTimeWasSetRecently() == Bit_RESET ) gDcfRxInProgress = Bit_SET; #endif // Handle IR remote if ( irmp_get_data( &irData ) ) ProcessIrDataPacket( irData ); // Read Ambient brightness and set LED brightness if ( gDcfRxInProgress == Bit_RESET ){ ambientBrightnessCurrent = SlidingAverageOnLastValues( UB_ADC1_SINGLE_Read( ADC_PA1 ) ); int brightnessToSet = 100.0 * GetBrightnessFactor( ambientBrightnessPoints, ambientBrightnessLedDimmingFactors, ambientBrightnessCurrent ); if ( brightnessToSet < LED_BRIGHTNESS_OFF_THRESHOLD ) WC_SetColor( WS2812_HSV_COL_OFF ); else WC_SetBrightness( brightnessToSet ); gWcIsToBeRefreshed = Bit_SET; } // Handle ESP8266 receive esp8266_handle_receive(); if( esp8266_request_time_from_google() == 1 ) { UB_RTC = Esp8266_curTime; UB_RTC_SetClock( RTC_DEC ); SetWordMatrix( UB_RTC_GetClock(RTC_DEC) ); gWcIsToBeRefreshed = Bit_SET; } } }