Tablica z elementami odwołującymi się do kilku struktur
Ostatnio zmodyfikowano 2015-08-28 11:06
bercikw Temat założony przez niniejszego użytkownika |
Tablica z elementami odwołującymi się do kilku struktur » 2015-08-27 21:53:24 Witam kolegów na forum,
Ze względu na przejrzystość kodu chciałbym stworzyć tablicę, w której zmiana jednego elementu wpływać będzie na elementy struktur.
Przejrzyście bowiem jest aby zmiany odbywały się w pętli for i zmieniały po kolei każdy element tablicy. Nie chcę bowiem tworzyć kilku pętli, osobno dla każdej ze struktur.
Domyślam się, że trzeba będzie operować na wskaźnikach ale moje próby spełzły na niczym. Ponieważ nie potrafię tego zrobić, gdyż kompilator zarzuca niezgodność typów ze względu na to, że jedne elementy są typu int a inne doble.
Gdybym nie jasno opisał problem złożę wyjaśnienia. |
|
carlosmay |
» 2015-08-27 22:13:43 Spróbuj rzutowania wszystkiego na jeden typ (najlepiej na typ o największej precyzji).
|
|
pekfos |
» 2015-08-27 22:14:25 Gdybym nie jasno opisał problem złożę wyjaśnienia. |
Najlepiej razem z kodem, którym próbowałeś rozwiązać problem. |
|
bercikw Temat założony przez niniejszego użytkownika |
» 2015-08-27 22:33:42 Przesyłam kod - nie umiem jednak znaleźć na tym forum znaczników <code> :( PID PID_channel_1, PID_channel_2;
int * paremetry_menu[ Liczba_parametrow ];
const char * elementy_menu[ Liczba_parametrow ] = { "Tz", "Kp", "Ki", "Kd", "Tp", "I", "U" };
ISR( INT0_vect ) { _delay_ms( 30 ); LCD_Clear(); switch( PIND ) { case 0b01111011: menu_aktywne = ~menu_aktywne; LCD_Clear(); break; case 0b10111011: pozycja_w_menu++; if( pozycja_w_menu > Liczba_parametrow - 1 ) pozycja_w_menu = 0; break; case 0b11111001 paremetry_regulatora[ pozycja_w_menu ] = paremetry_regulatora[ pozycja_w_menu ] - 0.1; break; case 0b11111000 paremetry_regulatora[ pozycja_w_menu ] = paremetry_regulatora[ pozycja_w_menu ] + 0.1; break; } }
int main( void ) { PID_channel_1.wartosc_maksymalna_calki = 100.0; PID_channel_1.y_min = - 50.0; PID_channel_1.y_max = 50.0; PID_channel_1.OCR = 3.0; PID_channel_1.OCR_min = 0; PID_channel_1.OCR_max = 65535; PID_channel_1.Tz = 30.1, PID_channel_1.Kp = 0.1, PID_channel_1.Ki = 0.1, PID_channel_1.Kd = 0.1, PID_channel_1.Tp = 0.001024; paremetry_menu[ 0 ] = & PID_channel_1.Tz; paremetry_menu[ 1 ] = & PID_channel_2.Tz; while( 1 ) { if( wcisnieto_guzik == 1 ) { wcisnieto_guzik = 0; LCD_Clear(); } if( menu_aktywne == 0 ) { PCF_GetDateTime( & czas_systemowy ); sprintf( linia_LCD_1, "%2.1f|%2.1f|%02d:%02d", temperatura, temperatura_sec_channel, czas_systemowy.hour, czas_systemowy.minute ); sprintf( linia_LCD_2, "%2.1f|%2.1f|", PID_channel_1.Tz, PID_channel_2.Tz ); LCD_WriteTextInLine1( linia_LCD_1 ); LCD_WriteTextInLine2( linia_LCD_2 ); } else { if( linia_LCD_1[ 0 ] != 'M' && linia_LCD_1[ 1 ] != 'E' ) LCD_Clear(); if( pozycja_w_menu > Liczba_parametrow - 1 ) pozycja_w_menu = 0; sprintf( linia_LCD_1, "MENU:" ); sprintf( linia_LCD_2, "%d - %s:", pozycja_w_menu, elementy_menu[ pozycja_w_menu ] ); LCD_WriteTextInLine1( linia_LCD_1 ); LCD_WriteTextInLine2( linia_LCD_2 ); } } |
|
pekfos |
» 2015-08-28 11:06:24 nie umiem jednak znaleźć na tym forum znaczników <code> :( |
A co masz pod pierwszym postem tematu..? |
|
« 1 » |