マイクロサーボ SG90関係のプログラムコード
(1)宣言
#define _XTAL_FREQ 48000000 //__delay_msマイコンの動作周波数を設定します。48MHz
void RUN1(void);//SW1で動作
void RUN2(void);//SW2で動作
void RUN3(void);//SW3で動作
void RUN4(void);//SW4で動作
(2)void main (void)での呼び出し
以下のコードで原点復帰をさせます。
for ( i = 0; i < 10; i++ )
{
PORTDbits.RD0=1;
PORTDbits.RD1=1;
PORTDbits.RD2=1;
PORTDbits.RD3=1;
PORTDbits.RD4=1;
PORTDbits.RD5=1;
PORTDbits.RD6=1;
PORTDbits.RD7=1;
__delay_ms( 1 );
__delay_us( 500 );
PORTDbits.RD0=0;
PORTDbits.RD1=0;
PORTDbits.RD2=0;
PORTDbits.RD3=0;
PORTDbits.RD4=0;
PORTDbits.RD5=0;
PORTDbits.RD6=0;
PORTDbits.RD7=0;
for ( j = 0; j < 2; j++ )__delay_ms( 10 );
}
以下のコードで動作を決定します。
while(1)
{
//RUN1();
if(gT > 0X0020 && gT < 0x0028)
{
RUN1();
gT=0;
}
if(gT > 0X0010 && gT < 0X0015)
{
RUN2();
gT=0;
}
if(gT > 0X0009 && gT < 0X000D)
{
RUN3();
gT=0;
}
if(gT > 0X0001 && gT < 0X0006)
{
RUN4();
gT=0;
}
}
(1)SW1時の動作
void RUN1(void)
{
int i;
for ( i = 0; i < 20; i++ )
{
PORTDbits.RD3=1;
PORTDbits.RD4=1;
PORTDbits.RD5=1;
__delay_ms( 1 );
PORTDbits.RD3=0;
__delay_ms( 1 );
PORTDbits.RD4=0;
PORTDbits.RD5=0;
__delay_ms( 10 );
}
for ( i = 0; i < 30; i++ ){__delay_ms( 10 );}
for ( i = 0; i < 20; i++ )
{
PORTDbits.RD0=1;
PORTDbits.RD1=1;
PORTDbits.RD2=1;
__delay_ms( 1 );
PORTDbits.RD0=0;
PORTDbits.RD2=0;
__delay_ms( 1 );
PORTDbits.RD1=0;
__delay_ms( 10 );
}
for ( i = 0; i < 20; i++ )
{
PORTDbits.RD3=1;
PORTDbits.RD4=1;
PORTDbits.RD5=1;
__delay_ms( 1 );
PORTDbits.RD4=0;
PORTDbits.RD5=0;
__delay_ms( 1 );
PORTDbits.RD3=0;
__delay_ms( 10 );
}
for ( i = 0; i < 30; i++ ){__delay_ms( 10 );}
for ( i = 0; i < 20; i++ )
{
PORTDbits.RD0=1;
PORTDbits.RD1=1;
PORTDbits.RD2=1;
__delay_ms( 1 );
PORTDbits.RD1=0;
__delay_ms( 1 );
PORTDbits.RD0=0;
PORTDbits.RD2=0;
__delay_ms( 10 );
}
}