예제 #1
0
__inline__ static T_SYS_EVENT get_serial_command(VOID)
{
	INT c;
	T_SERIAL_CMD* pt_cmd_tbl;
	T_SYS_EVENT t_sys_event = E_EVENT_IDLE;

	c = Usart_Read();   /* 1文字受信 */
	if( c == -1 ) {
		return t_sys_event;
	}

	Usart_Write( c );   /* ホストへエコーバック */
	Usart_PgmPuts( PSTR("\r\n") );

	for( pt_cmd_tbl = gt_serial_event_tbl; pt_cmd_tbl->c != '\0'; pt_cmd_tbl++ ) {
		if( pt_cmd_tbl->c == c ) {
			t_sys_event = pt_cmd_tbl->t_sys_event;
			return t_sys_event;
		}
	}

	if( (fn_serial_cmd_hdl == NULL)
	 || (fn_serial_cmd_hdl( c ) != 0)
	 ) {
		Usart_PgmPuts( PSTR("command not found\n") );
	}

	return t_sys_event;
}
예제 #2
0
void interrupt(){

	if(Usart_data_ready()){
		car_letto=Usart_Read();

		if(car_letto!=0x0D && car_letto!=0x0A && cursore_buffer<DIM_MASSIMA_BUFFER){
			Usart_Write(car_letto);
			buffer[cursore_buffer]=car_letto;
			cursore_buffer++;
		}
		else if(strlen(buffer)>0){
			buffer[cursore_buffer]='\0';
			
			cursore_buffer=0;

			if(buffer[0]=='M' && strlen(buffer)==5){
				char s_posizione[4];
				char s_numero_servo[2];
				int posizione;
				int numero_servo;

				s_numero_servo[0]=buffer[1];
				s_numero_servo[1]='\0';

				s_posizione[0]=buffer[2];
				s_posizione[1]=buffer[3];
				s_posizione[2]=buffer[4];
				s_posizione[3]='\0';

				if(isInteger(s_numero_servo) && isInteger(s_posizione)){
					posizione=atoi(s_posizione);
					numero_servo=atoi(s_numero_servo);

					if(posizione<MIN_POS) posizione=MIN_POS;
					if(posizione>MAX_POS) posizione=MAX_POS;
					if(numero_servo<0) numero_servo=0;
					if(numero_servo>3) numero_servo=3;

					posizioni_servo[numero_servo]=posizione;
				}
				else{
					Usart_Write_String(stringa_Nuova_Linea);
					Usart_Write_String(stringa_Sintassi_Errata);
				}
				Usart_Write_String(stringa_Nuova_Linea);
				Usart_Write_String(stringa_Posizione_Cambiata);
				printPrompt();
			}
			else if((buffer[0]=='O' || buffer[0]=='o') && strlen(buffer)==2){
				char s_numero_servo[2];
				int numero_servo;

				s_numero_servo[0]=buffer[1];
				s_numero_servo[1]='\0';

				if(isInteger(s_numero_servo)){
					numero_servo=atoi(s_numero_servo);

					if(buffer[0]=='O'){ //accensione servo
						switch(numero_servo){
							case 0: ACCENSIONE_SERVO0=SI;
								break;
							case 1: ACCENSIONE_SERVO1=SI;
								break;
							case 2: ACCENSIONE_SERVO2=SI;
								break;
							case 3: ACCENSIONE_SERVO3=SI;
								break;
							default: Usart_Write_String(stringa_Sintassi_Errata);
								break;
						}
					}
					else if(buffer[0]=='o'){ //spegnimento il servo
						switch(numero_servo){
							case 0: ACCENSIONE_SERVO0=NO;
								break;
							case 1: ACCENSIONE_SERVO1=NO;
								break;
							case 2: ACCENSIONE_SERVO2=NO;
								break;
							case 3: ACCENSIONE_SERVO3=NO;
								break;
							default: Usart_Write_String(stringa_Sintassi_Errata);
								break;
						}
					}
				Usart_Write_String(stringa_Nuova_Linea);
				Usart_Write_String(stringa_Stato_Cambiato);
				printPrompt();
				}
			}
			else{ //comando sconosciuto
				Usart_Write_String(stringa_Nuova_Linea);
				Usart_Write_String(stringa_Comando_Sconosciuto);
				printPrompt();
			}

		}
		else { //stringa vuota annulla
		cursore_buffer=0;
		}
	} //fine data_ready
}//fine funzione
예제 #3
0
void main(){
CMCON=0x07;                  // compartor off all digital
TRISA=0x00;
PORTA=0x00;
TRISB=0b01110000;                 //
PORTB=0x06;

ir_rx_indicator=1;
delay_ms(500);
ir_rx_indicator=0;
delay_ms(500);
ir_rx_indicator=1;
delay_ms(500);
ir_rx_indicator=0;

OPTION_REG=0b00001000;       //RBPU' INTEDG T0CS T0SE PSA PS2 PS1 PS0
T1CON=0b00000100;            //— — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC' TMR1CS TMR1ON
                             //1:8 prescale ,no t1 osc. , no sync, inernal OSC/4 T1 off
PIE1 =0b00000011;            //EEIE CMIE RCIE TXIE — CCP1IE TMR2IE TMR1IE
INTCON=0b11001000;           //GGIE PEIE T0IE INTE RBIE T0IF INTF RBIF
PR2=199;
T2CON=0b01001101;            //- TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

while(1){                    //loop FOR ever

if(code[1]){
adress=code[0];
 if(adress==r_address)
   nec=code[1];
  code[1]=0;
}else if(Usart_Data_Ready()){
 nec=Usart_Read();

}
 if(nec){                    //nec =code[1] the data from IR
         if(swap==1)
            room=0x10;
         if(swap==2)
            room=0x20;
         switch (nec){
         case p1s: period=period1;room=0x00;break;
         case p2s: period=period2;room=0x00;break;
         case p3s: period=period3;room=0x00;break;
         case acl: period=0x00   ;room=0x00;break;
         }

         if(room==0x10 ){    //master room
         switch (nec){
         case o_1: DEV1=1;on_off.f0=1;break;
         case o_2: DEV2=1;on_off.f1=1;break;
         case o_3: DEV3=1;on_off.f2=1;break;
         case o_4: DEV4=1;on_off.f3=1;break;
         case f_1: DEV1=0;on_off.f0=0;break;
         case f_2: DEV2=0;on_off.f1=0;break;
         case f_3: DEV3=0;on_off.f2=0;break;
         case f_4: DEV4=0;on_off.f3=0;break;
         case f_a: DEV1=0;DEV2=0;DEV3=0;DEV4=0;
                   on_off=on_off&0XF0;break;
         case swp: if(swap)swap=0x00;else swap=0x02;break;

         case a1s: alarm0[0]=period;break;
         case a2s: alarm0[1]=period;break;
         case a3s: alarm0[2]=period;break;
         }
       }else if(room==0x20){
         switch (nec){
         case o_1: DEV5=1;on_off.f4=1;break;
         case o_2: DEV6=1;on_off.f5=1;break;
         case o_3: DEV7=1;on_off.f6=1;break;
         case o_4: DEV8=1;on_off.f7=1;break;
         case f_1: DEV5=0;on_off.f4=0;break;
         case f_2: DEV6=0;on_off.f5=0;break;
         case f_3: DEV7=0;on_off.f6=0;break;
         case f_4: DEV8=0;on_off.f7=0;break;
         case f_a: DEV5=0;DEV6=0;DEV7=0;DEV8=0;
                   on_off=on_off&0x0F;break;
         case swp: if(swap)swap=0x00;else swap=0x01;break;

         case a1s: alarm1[0]=period;break;
         case a2s: alarm1[1]=period;break;
         case a3s: alarm1[2]=period;break;
         }
       }

    }//if
     nec=0x00;

    if(sec>=60){
       sec-=60;

          for(ai=0;ai<alarms;ai++){
             if(alarm0[ai]==0x01){
                 switch (ai){
                  case 0: DEV2=0;on_off.f1=0;break;
                  case 1: DEV3=0;on_off.f2=0;break;
                  case 2: DEV4=0;on_off.f3=0;break;
                 }
               alarm0[ai]=0x00;
               }
             else if(alarm0[ai] >0x01)
              -- alarm0[ai];
            }

            for(ai=0;ai<alarms;ai++){
             if(alarm1[ai]==0x01){
                 switch (ai){
                  case 0: DEV6=0;on_off.f5=0;break;
                  case 1: DEV7=0;on_off.f6=0;break;
                  case 2: DEV8=0;on_off.f7=0;break;
                 }
               alarm1[ai]=0x00;
               }
            else if(alarm1[ai] >0x01)
              -- alarm1[ai];
            }
    }


 }//while
}//main