示例#1
0
/**************************************************************************
 * 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();
}
示例#2
0
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);

	
	}			

}
示例#3
0
// 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);
    }
}