/************************************************************************** * to be called if memory full (out of buffers) * * It will write the code 253 to the trace. * It will morse code "MEM". * It will then turn on two LEDs (color=purple + led2) and then halt. **************************************************************************/ void bufferOverflow(void) { TRACE(253); beeps("-- . --"); pri_rgb_led_on(true, false, true); set_port(LED1); sleep_mode(); }
int main(void) { int i=5000; uint8_t ultrasoundEnableFlag; uint16_t voltage; /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config_8MHz(); //__HAL_RCC_PWR_CLK_ENABLE(); /* Initialize all configured peripherals */ MX_GPIO_Init(); HAL_GPIO_WritePin( DCDC_EN_GPIO_Port , DCDC_EN_Pin , 0); // HAL_GPIO_WritePin( DCDC_PWR_GPIO_Port , DCDC_PWR_Pin , 0 ); //open drain kimenet,pch fet, MX_ADC_Init(); //MX_I2C1_Init(); //MX_TIM3_Init(); MX_USART1_UART_Init(); GPIO_TIM3_OFF(); //HAL_Delay(100); MX_RTC_Init(); /* Enable Power Clock */ //__HAL_RCC_PWR_CLK_ENABLE(); uartTester(); // GPIO_TIM3_OFF(); //Feszültseg ellenörzése,sippogás----------------------------------------------------- voltage=voltage_read(ADC_CHANNEL_2,2); if(Full<voltage) batteryLevel=3; if(Medium < voltage && voltage<= Full) batteryLevel=2; if(Medium >= voltage) batteryLevel=1; HAL_Delay(1000); beeps(batteryLevel,1); PutString("Software version 2016.07.26.\n"); PutString("batteryLevel: "); PutNumber(batteryLevel); PutString("\n"); while(1){ //Feszültseg ellenörzése, paraméterek beállítása,fesz fvében------------------------ voltage=voltage_read(ADC_CHANNEL_2,2); if(Low > voltage){ if(UltraLow > voltage){ voltage=voltage_read(ADC_CHANNEL_2,2); if(UltraLow > voltage){ HAL_GPIO_WritePin( DCDC_PWR_GPIO_Port , DCDC_PWR_Pin , 1 ); //open drain kimenet,pch fet, HAL_PWR_EnterSTANDBYMode(); } } ultrasoundEnableFlag=0; sleepNum=LowVoltSleep; }else{ ultrasoundEnableFlag=1; sleepNum= linear(sleepNumMax,sleepNumMin, voltageMin,voltageMax,voltage); soundNum= linear(soundNumMin,soundNumMax,voltageMin,voltageMax,voltage); sounDelay=sDelay; } PutString("sleepNum"); PutNumber(sleepNum); PutString("\n"); PutString("soundNum"); PutNumber(soundNum); PutString("\n"); //Ultrahang generálás--------------------------------------------------------------- if(ultrasoundEnableFlag){ PutString("ultrasound(1)\n "); ultrasound(1); } //Sleep----------------------------------------------------------------------------- // HAL_ADC_MspDeInit(&hadc); HAL_Delay(10); PutString("sleep!\n"); HAL_NVIC_SetPriority(RTC_IRQn, 0, 0); HAL_NVIC_EnableIRQ(RTC_IRQn); for(uint8_t e=0 ; e < sleepNum ; e++){ HAL_RTC_GetTime(&hrtc,&sTim,RTC_FORMAT_BIN); HAL_RTC_GetDate(&hrtc, &sDat, RTC_FORMAT_BIN); HAL_RTC_GetTime(&hrtc,&sTim,RTC_FORMAT_BIN); HAL_RTC_GetDate(&hrtc, &sDat, RTC_FORMAT_BIN); PutNumber((uint32_t)sTim.Hours); PutString(":"); PutNumber((uint32_t)sTim.Minutes); PutString(":"); PutNumber((uint32_t)sTim.Seconds); PutString("\n"); if(sTim.Minutes==59){ sAlarm.AlarmTime.Minutes=0; if(sTim.Hours==23){ sAlarm.AlarmTime.Hours=0; }else{ sAlarm.AlarmTime.Hours=sTim.Hours+1; } }else{ sAlarm.AlarmTime.Minutes=sTim.Minutes+1; sAlarm.AlarmTime.Hours=sTim.Hours; } HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, FORMAT_BIN); PutString("alarm: "); PutNumber((uint32_t)sAlarm.AlarmTime.Hours); PutString(":"); PutNumber((uint32_t)sAlarm.AlarmTime.Minutes); PutString(":"); PutNumber((uint32_t)sAlarm.AlarmTime.Seconds); PutString("\n"); SleepMode(); } HAL_NVIC_DisableIRQ(RTC_IRQn); } }
// Parser fuer Komandoeingabe // Syntax: <Befehl><Geraet>:[Subbefehl]<Parameter> // Befehl "!" setzt Parameter // Befehl "?" liest Parameter // Ausgaben des mc werden mit "#" eingeleitet // Gerät "An" ADC An (n=0..7) // Gerät "S" Systemzeit, "Ln" LEDn, "V" Version // !A0:1 --> ADC0 gibt im Sekundenrythmus Werte aus; !A0:0 stopped den ADC0 // !L2:t100 --> LED2 blinkt im 100ms Rhytmus void parser(unsigned char* p_p) { switch(*p_p) { // Parameter setzen mit "!" case '!': switch(*(++p_p)){ case 'A': // ADC Analog Digitalwandler ******************************* ++p_p; if('0'<=*p_p && *p_p<='7'){ // 0 <= n <=7 ADMUX &= 0xF0; // MUX0..3 loeschen ADMUX |= (*p_p - 0x30); // AD-Wandler Nr. n (0..7) wählen ++p_p; // nächste Zeichen (:) ignorieren switch(*(++p_p)){ case '0': status_ADC='0'; // ADC sperren break; case '1': status_ADC='1'; // ADC freigeben break; default: buffer_write_s(put_bp, (unsigned char*)"#!:Error\n> "); beeps(100,2); } buffer_write_s(put_bp, (unsigned char*)"#!:OK\n"); beeps(100,1); } else{ buffer_write_s(put_bp, (unsigned char*)"#!:Error\n> "); beeps(100,2); } break; // ende ADC // LED setzen ********************************************* case 'L': switch(*(++p_p)){ case '2': // LED2 --> ++p_p; // nächste Zeichen (:) ignorieren switch(*(++p_p)){ case '0': PORTD &= ~(1<<PD6); // LED2 aus status_LED2='0'; break; case '1': PORTD |= 1<<PD6; // LED2 an status_LED2='1'; break; case 's': PORTD |= 1<<PD6; // LED2 singleshot status_LED2='s'; delay = ascii_to_int(++p_p); break; case 't': PORTD |= 1<<PD6; // LED2 toggle status_LED2='t'; delay = ascii_to_int(++p_p); break; default: buffer_write_s(put_bp, (unsigned char*)"#?:Error\n> "); beeps(100,2); break; } buffer_write_s(put_bp, (unsigned char*)"#!:OK\n> "); beeps(100,1); } break; // Systemzeit setzen ************************************* case 's': sekunden = ascii_to_int(++p_p); buffer_write_s(put_bp, (unsigned char*)"#!:OK\n> "); beeps(100,1); break; default: buffer_write_s(put_bp, (unsigned char*)"#: Error\n> "); beeps(100,2); } break; // Parameter abfragen case '?': switch(*(++p_p)){ // Systemzeit auslesen *********************************** case 's': buffer_write_s(put_bp, (unsigned char*)"#s: "); unsigned char timestring[11]; buffer_write_s(put_bp, int_to_ascii(sekunden, timestring)); buffer_write_s(put_bp, (unsigned char*)"\n> "); beeps(100,1); break; // Soft- Hardwareversion auslesen case 'v': buffer_write_s(put_bp, (unsigned char*)"#v: "); buffer_write_s(put_bp, version); buffer_write_s(put_bp, (unsigned char*)"\n> "); beeps(100,1); break; // Hilfe ausgeben case 'h': buffer_write_s(put_bp, (unsigned char*)"#h: <command><device><number>:<subcommand>[parameter]\n> "); beeps(100,1); break; default: buffer_write_s(put_bp, (unsigned char*)"#: Error\n> "); beeps(100,2); } break; case '0': buffer_write_s(put_bp, (unsigned char*)"Taste 0 wurde gedrückt - LED2 1000ms\n> "); beep(100); buffer_write_s(put_bp, (unsigned char*)"Ausgabe über Interruptserviceroutine\n> "); break; case '1': buffer_write_s(put_bp, (unsigned char*)"Taste 1 wurde gedrückt - LED2 100ms\n> "); beep(100); delay=100; break; // Hilfe ausgeben (mit ?h zusammenführen) case 'h': case 0: buffer_write_s(put_bp, (unsigned char*)"#h: <command><device><number>:<subcommand>[parameter]\n> "); beeps(100,2); break; default: buffer_write_s(put_bp, (unsigned char*)"#: unbekantes Zeichen: "); buffer_write(put_bp,*p_p); buffer_write_s(put_bp, (unsigned char*)"\n"); beeps(100,2); } }