Za gratulacje dziękuję ślicznnie. Są, niestety, jeszcze nieco na "wyrost", że się tak wyrażę.
Pierwsza próba nie była totalną klapą, ale wykazała błędy i niedoróbki w oprogramowaniu
modelu. Po pierwsze primo silnik główny się wyłączał w najniespodziewanym momencie.
Po drugie primo zbiornik rufowy nie opróżniał się tak jak powinien.
Po trzecie primo, na koniec, model nabrał trzy krople wody i odmówił dalszej wspólnej zabawy
z Panem Smitem.
Błąd w obsłudze silnika poprawiłem. Nie będę przedstawiał poprawek, bo się będziecie ze mnie
śmiać i będziecie mieli rację. A tego nie lubię, jak ktoś się ze mnie śmieje i jeszcze ma rację.
Na drugie primo rada jest taka :
Kod: Zaznacz cały
unsigned char MocSilnWZalOdOdleglZbiorniki( unsigned char zbiornik, int NumerZadanyImp )
{// Ustawia moc silnika zbiornika w zaleznosci od aktualnej ilosci impulsow
// Silnik rufowy ma wieksze opory
int nrImp = CalkujImpulsyZbiornika( zbiornik );
nrImp -= NumerZadanyImp;
if ( nrImp < 0 )nrImp = -nrImp;
if ( ZBIORNIK_DZIOBOWY == zbiornik )
{// Silkik dziobowy ma mniejsze opory
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;
}
else
{// zbiornik rufowy ma wieksze opory
if ( nrImp > 70 )return PELNA_MOC;
if ( nrImp > 30 )return TRZY_CZWARTE_MOCY;
if ( nrImp > 15 )return POL_MOCY;
return JEDNA_CZWARTA_MOCY;
}
}
Czyli silnik zbiornika rufowego pracuje z większą moca.
Na trzecie twardnieje epidian na "telujce" na rufie.
Teraz program do sterowania wygląda tak :
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(;;)
{
SetPolozenieTlokaZbiornikaDzRuZbiorniki();
SterowanieSilnikiemGlownym();
SterowanieZaworemNapowietrzaniaMain();
SteryGlebokosciMain();
if ( WaterOnBoard( ) )
{
for(;;)
{
WynurzOkretAwaryjnieZbiorniki();
SterowanieZaworemNapowietrzaniaMain();
SteryGlebokosciMain();
if ( !ShipInTheWater() )
{
InitZbiorniki();
for(;;);
}
}
}
if ( !ShipInTheWater() )
{
InitZbiorniki();
for(;;);
}
}
}
I działa, w pojęciu autora, tak :
1. Włącz zasilanie, jak jest włączony nadajnik, to poruszaj sterami na kiosku, zaworem
napowietrzania, zainicjuj zbiorniki i czekaj na włożenie do wody.
Jak nie jest włączony nadajnik, to wyłącz się i czekaj na reset.
2. We wodzie daj się sterować za pomocą nadajnika, aż do wyjęcia z wody, albo do
pojawienia się wody na pokładzie.
Jak woda się pojawi na pokładzie, to wynurz awaryjnie model i daj się doprowadzić do tatusia.
Po wyjęciu z wody wylej resztkę ze zbiorników i czekaj na reset.
Tak oto w skrócie telegraficznym i bez zbędnych szczegółow to MA działać, a czy działa, no to dobre
pytanie. Odpowiedź być może w środę.
I wymagana fotka :
Z ukłonami
Andrzej Korycki