//--------------------------------------------------------------
// 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);
}
Exemplo n.º 2
0
/*****************************************
 *  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;
		}
	}

}