Mam do napisania prace inż. ze Sterownika C.O.
Korzystając z kilku wątków oraz kodu PID od Atmela postawiłem na Atmedze16 pomiar temperatury zapisujący ją w strukturach oraz człon PID zwracający wartość zmiennej int16 w zależnosci od zadanej oraz aktualnej ( odczyt ) temperatury.
Ale przechodząc do sedna. Mam pewien problem, z którym od rana nie potrafię sobie poradzić.
Pisze póki co proste zależności uwzględniające tylko temperaturę odczytu.
Program ( a raczej wklejony kawałek ) ma za zadanie działać nastepująco:
Jeśli temperatura odczytu < 28*C
załącz dmuchawę pieca na 10sekund inkrementując przy tym flagę dla kolejnej funkcji ( która może się okazać konieczna lub nie )
Jako że temperatura nie wzrosła
Po 3 cyklach załączonej dmuchawy , wartość flagi flag_wegiel jest równa 3, zatem możemy przejść do funkcji która ma za zadanie dodać węgiel za pomocą automatycznego podajnika.
Problem pojawia się kiedy potrzebuje wyzerować flagę flag_wegiel. Funkcja w zależności od usytuowania jej w funkcji wegiel() albo się wgl nei załącza albo nie wychodzi z tejże funkcji.
sama funkcja Sterowanie(); - czyli sama dmuchawa działa bez zarzutu i tak jak powinna.
Kodu PID oraz pomiaru temperatury z DS18b20 nie załączam, gdyż działa w 100% poprawnie ( chyba, że ktoś potrzebuje algorytm PID, to chętnie udostępnie, kod od Atmela, nie daje się poprawnie skompilować bez drobnych przeróbek).
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Mam też pewne obawy czy w ogóle jest możliwość wyjścia z funkcji węgiel. czy to aby się nie zapętla na wieki.
Domyślam się, że to błaha sprawa. Ale okrutnie mi dała dziś popalić. Zdecydowanie bardziej jak struktury, IDs czujników i PID.
Post wydzielony z innego tematu - Zielony J.