/*********************************************************************
開発プロジェクト : 車の制御システム
処理概要 : 実際の車のスピード制御
バージョン : 070816
担当者 : 組み込みチーム 邵青
変更履歴 : 2007.08.16 新規作成
***********************************************************************/
#pragma ioreg
/***********************************************************************
Include files
***********************************************************************/
#include "macrodriver.h"
#include "ad.h"
#include "init.h"
#include "AP_Speed_control.h"
/**********************************************************************
モジュール名 : AP_Speed_controlモジュール
関数名 : AP_Speed_control()
引数 : なし
戻り値 : なし
処理概要 : speedコントロールメイン処理
作成者 : 組込みチーム 邵青
作成日 : 2007.08.16
変更履歴 : 2007.08.16 新規作成
*************************************************************************/
void AP_Speed_control( void )
{
/*車移動の方向の改変の判断*/
if ( Direction_change == 0 )
{
Speed_convert(); /* スピード変換 */
}
else
{
Speed_change_down(); /* 方向変換後のスピードダウン */
}
return;
}
/**********************************************************************
モジュール名 : AP_Speed_controlモジュール
関数名 : Speed_convert()
引数 : なし
戻り値 : なし
処理概要 : スピード変換
作成者 : 組込みチーム 邵青
作成日 : 2007.08.16
変更履歴 : 2007.08.16 新規作成
*************************************************************************/
void Speed_convert( void )
{
if ( Enginflag != 0 )
{
if ( Brakeflag == 0 )
{
Speed_up_down(); /* スピードアクセルの選び */
}
else
{
if ( Speed > 0 )
{
Brake(); /* brake処理 */
}
else
{
led_speed(); /* スピード表示のledの変換 */
return;
}
}
if ( (-1 < Speed) && (Speed < (Gear1_MaxSpeed+1)) )
{
wait(1); /* 遅延時間の選び */
}
else if( (Gear1_MaxSpeed < Speed) && (Speed < (Gear2_MaxSpeed+1)) )
{
wait(2); /* 遅延時間の選び */
}
else
{
wait(3); /* 遅延時間の選び */
}
if (Speed != 0)
{
wheel_led_change(); /* 車輪表示のledの変換 */
}
led_speed(); /* スピード表示のledの変換 */
}
return;
}
/**********************************************************************
モジュール名 : AP_Speed_controlモジュール
関数名 : Speed_change_down()
引数 : なし
戻り値 : なし
処理概要 : 方向変換後のスピードダウン
作成者 : 組込みチーム 邵青
作成日 : 2007.08.16
変更履歴 : 2007.08.16 新規作成
*************************************************************************/
void Speed_change_down( void )
{
if ( Speed > (Speed_Step1-1) )
{
Speed -= Speed_Step1;
wheel_led_change(); /* 車輪表示のledの変換 */
}
else
{
Speed = 0;
}
led_speed(); /* スピード表示のledの変換 */
return;
}
/**********************************************************************
モジュール名 : AP_Speed_controlモジュール
関数名 : Speed_up_down()
引数 : なし
戻り値 : なし
処理概要 : スピードアクセルの選び
作成者 : 組込みチーム 邵青
作成日 : 2007.08.16
変更履歴 : 2007.08.16 新規作成
*************************************************************************/
void Speed_up_down( void )
{
int ad;
__DI();
ad = ADA0CR0; /*AD端子から、アクセルの値を取得*/
/*端子番号はP70/ANI0*/
if ( ADA0CR0 == 0x0000 )
{
if ( Speed > Speed_Step1 )
{
Speed -= Speed_Step1;
}
else
{
Speed = 0;
}
}
else if ( (0x0150 < ADA0CR0) && (ADA0CR0 < 0x0420) )
{
if ( Speed < (Gear1_MaxSpeed-Speed_Step1+1) )
{
Speed += Speed_Step1;
}
else if ( (Gear1_MaxSpeed < Speed) && (Speed < (Gear1_MaxSpeed+ Speed_Step2)) )
{
Speed = Gear1_MaxSpeed;
}
else if ( ((Gear1_MaxSpeed+Speed_Step2-1) < Speed) && (Speed < Gear2_MaxSpeed+1) )
{
Speed -= Speed_Step2;
}
else if ( (Gear2_MaxSpeed < Speed) && (Speed < (Gear3_MaxSpeed+1)) )
{
Speed -= Speed_Step3;
}
}
else if ( (0x419 < ADA0CR0) && (ADA0CR0 < 0x600) )
{
if ( Speed < (Gear2_MaxSpeed - Speed_Step2+1) )
{
Speed += Speed_Step2;
}
else if ( ((Gear2_MaxSpeed-Speed_Step2) < Speed) &&(Speed < (Gear2_MaxSpeed+Speed_Step3)) )
{
Speed = Gear2_MaxSpeed;
}
else if ( ((Gear2_MaxSpeed+1) < Speed) && (Speed < (Gear3_MaxSpeed+1)) )
{
Speed -= Speed_Step3;
}
}
else if ( (0x0599 < ADA0CR0) && (ADA0CR0 < 0x06c1) )
{
if ( ((Gear3_MaxSpeed-Speed_Step3) < Speed) && (Speed < Gear3_MaxSpeed) )
{
Speed = 90;
}
else if ( Speed < (Gear3_MaxSpeed-Speed_Step3+1) )
{
Speed += Speed_Step3;
}
}
__EI();
return;
}
/**********************************************************************
モジュール名 : AP_Speed_controlモジュール
関数名 : Brake()
引数 : なし
戻り値 : なし
処理概要 : brake処理
作成者 : 組込みチーム 邵青
作成日 : 2007.08.16
変更履歴 : 2007.08.16 新規作成
*************************************************************************/
void Brake( void )
{
if ( Speed < Speed_Brake_Step )
{
Speed = 0;
}
else
{
Speed -= Speed_Brake_Step;
}
return;
}
/**********************************************************************
モジュール名 : AP_Speed_controlモジュール
関数名 : wait()
引数 : module
戻り値 : なし
処理概要 : 遅延時間の選び
作成者 : 組込みチーム 邵青
作成日 : 2007.08.16
変更履歴 : 2007.08.16 新規作成
*************************************************************************/
void wait( const int module )
{
int i;
switch( module )
{
case 1:
{
for( i = 0; i < Looptime3; i++ )
{;}
break;
}
case 2:
{
for( i = 0; i < Looptime2; i++ )
{;}
break;
}
case 3:
{
for( i = 0; i < Looptime1; i++ )
{;}
break;
}
default:
;
}
return;
}
/**********************************************************************
モジュール名 : AP_Speed_controlモジュール
関数名 : wheel_led_change()
引数 : なし
戻り値 : なし
処理概要 : 車輪表示のledの変換
作成者 : 組込みチーム 邵青
作成日 : 2007.08.16
変更履歴 : 2007.08.16 新規作成
*************************************************************************/
void wheel_led_change( void )
{
if ( Speed == 0 )
{
PDLH = ( PDLH & 0xfb );
}
else
{
PDLH = ( PDLH | 0x04 );
}
return;
}
/**********************************************************************
モジュール名 : AP_Speed_controlモジュール
関数名 : led_speed()
引数 : なし
戻り値 : なし
処理概要 : スピード表示のledの変換
作成者 : 組込みチーム 邵青
作成日 : 2007.08.16
変更履歴 : 2007.08.16 新規作成
*************************************************************************/
void led_speed( void )
{
int speed_one,speed_ten;