Re: SSN-688
: 01 wrz 2011, 13:13
A co? kibelek rozsadziło?
Strona poświęcona modelarstwu szkutniczemu, historii żeglugi, żaglowcom, statkom i okrętom. Forum, galeria, wirtualna modelarnia. Serdecznie zapraszamy!
https://www.koga.net.pl/phpbb3/
oksal pisze::cry: To jesteś skazany na fontannę w Tczewie.
bartes123 pisze:...
Miejska fontanna to jednak miejska fontanna - jak szybko biegasz możesz się w niej i bezkarnie zesrać. Ale okrętu podwodnego nie zwodujesz...
Kod: Zaznacz cały
unsigned char MocSilnWZalOdOdleglZbiorniki( unsigned char zbiornik, int NumerZadanyImp )
{
int nrImp = CalkujImpulsyZbiornika( zbiornik );
nrImp -= NumerZadanyImp;
if ( nrImp < 0 )nrImp = -nrImp;
if ( nrImp > 100 )return PELNA_MOC;
if ( nrImp > 70 )return TRZY_CZWARTE_MOCY;
if ( nrImp > 40 )return POL_MOCY;
if ( nrImp > 25 )return JEDNA_CZWARTA_MOCY;
return JEDNA_OSMA_MOCY;
}
unsigned char ZatrzymacSilnikZbiorniki( unsigned char zbiornik, int NumerZadanyImp )
{
int nrImp = CalkujImpulsyZbiornika( zbiornik );
nrImp -= NumerZadanyImp;
if ( nrImp < 0 )nrImp = -nrImp;
if ( nrImp < 8 )return 1;
return 0;
}
void SetPolozenieTlokaZbiorniki( unsigned char zbiornik, int NumerZadanyImp )
{
int nrImp = CalkujImpulsyZbiornika( zbiornik );
unsigned char moc = MocSilnWZalOdOdleglZbiorniki( zbiornik, NumerZadanyImp );
unsigned char kierunek;
if ( IsSilnikZbiornikaBusy( zbiornik ) )return;
kierunek = GetKierunekObrotowSilnikZbiornika( zbiornik );
if ( nrImp > NumerZadanyImp )
{// powinien oprozniac
switch( StanSilnika( zbiornik ) )
{
case SILNIK_STOI:
if( ZatrzymacSilnikZbiorniki( zbiornik, NumerZadanyImp ) )return;
if ( SILNIK_NAPELNIA == kierunek )
{
KierunekObrotowSilnikaZbiornika( zbiornik, OPROZNIAJ_ZBIORNIK);
return;
}
SetMocSilnikaZbiornika( zbiornik, moc );
SilnikZbiornikaOn( zbiornik );
break;
case SILNIK_NAPELNIA:
SilnikZbiornikaOff( zbiornik );
return;
case SILNIK_OPROZNIA:
SetMocSilnikaZbiornika( zbiornik, moc );
if ( ZatrzymacSilnikZbiorniki( zbiornik, NumerZadanyImp ) ) SilnikZbiornikaOff( zbiornik );
break;
case SILNIK_BUSY:
break;
}
}
else if ( nrImp == NumerZadanyImp )
{
SilnikZbiornikaOff( zbiornik );
SetMocSilnikaZbiornika( zbiornik, moc );
}
else
{// powinien napelniac
switch( StanSilnika( zbiornik ) )
{
case SILNIK_STOI:
if( ZatrzymacSilnikZbiorniki( zbiornik, NumerZadanyImp ) )return;
if ( SILNIK_OPROZNIA == kierunek )
{
KierunekObrotowSilnikaZbiornika( zbiornik, NAPELNIAJ_ZBIORNIK);
return;
}
SetMocSilnikaZbiornika( zbiornik, moc );
SilnikZbiornikaOn( zbiornik );
break;
case SILNIK_NAPELNIA:
SetMocSilnikaZbiornika( zbiornik, moc );
if ( ZatrzymacSilnikZbiorniki( zbiornik, NumerZadanyImp ) ) SilnikZbiornikaOff( zbiornik );
return;
case SILNIK_OPROZNIA:
SilnikZbiornikaOff( zbiornik );
break;
case SILNIK_BUSY:
break;
}
}
}
// Impulsy z nadajnika maja od 264 do 468
// To ma sie odwzorowac na 1100 impulsow impulsatora
// tylko sterowanie tylko zbiornikiem dziobowym
void SetPolozenieTlokaZbiornikaDzZbiorniki( void )
{
int nrImp;
cli();
nrImp = iRCDlugImpZanurzenia;
sei();
if( nrImp < 264 )nrImp = 264;
if( nrImp > 458 )nrImp = 458;
nrImp -= 264; //Zmienna od 0 do 194
nrImp *= 57;
nrImp /=10;
SetPolozenieTlokaZbiorniki( ZBIORNIK_DZIOBOWY, nrImp );
}
Kod: Zaznacz cały
void TestSterowaniaGlebokoscia20110904( void )
{
int czas;
SilnikGlownyOff();
BootWaterOnBoardMain();
OpoznienieNaStarcie10Sek();
InitZbiorniki();
PORTA &= ~_BV(LED_GREEN);
while( !ShipInTheWater() );
czas = GetIntSecondMain();
while( ( GetIntSecondMain() - czas ) < 2 );
for(;;)
{
ZmianaGlebokosciImpZbiorniki( );
SterowanieSilnikiemGlownym();
SterowanieZaworemNapowietrzaniaMain();
SteryGlebokosciMain();
if ( !ShipInTheWater() )
{
InitZbiorniki();
for(;;);
}
}
}