Svetelektro.com

Svetelektro.com

Meno:
Heslo:
SVETELEKTRO • Posun nuly (absolutní snímač)

Posun nuly (absolutní snímač)

C,C++,C#

Moderátori: psichac, Moderátori

Posun nuly (absolutní snímač)

Odoslaťod jirka.jirka. » 07 Dec 2016, 12:46

Zdravím. Mám absolutní snímač a teď jsem došel k primitivní věci, ale nenapadá mě jak ji nejlépe vyřešit.

Dejme tomu, že po instalaci absolutního snímače bude osa natočená pokaždé nějak jinak. A teď zařízení natočím do správné polohy a té bych chtěl nastavit nulu. Takže jakýsi offset. Ale když potom budu točit s oskou, tak abych měl vždy kladnou hodnotu. Tzn. nastavím 0° a potom když budu točit, tak jako by se nic nestalo. Tzn. hodnoty budou 0~360°.

část kódu je zde:
Kód: Vybrať všetko
polohaAbsolutnihoSnimace = (int16_t)(rx_mailbox.ul_datal & 0x0000ffff);


převod hodnoty polohaAbsolutnihoSnimace
Kód: Vybrať všetko
uhel = (((float)(polohaAbsolutnihoSnimace*360)/(8192));


Hodnota z enkodéru je 13 bitů. Nějaký nápad, jak toho docílit? Díky moc
jirka.jirka.
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 775
Založený: 17.10.2008
Bydlisko: Zlín
Karma: 6

Re: Posun nuly (absolutní snímač)

Odoslaťod jirka.jirka. » 07 Dec 2016, 14:11

Tady jsem něco sesmolil. Tak snad je to správně.... :D
Kód: Vybrať všetko
uhel = (((float)(polohaAbsolutnihoSnimaceADC)*360)/(8192)) - OdecetKorekcnihoUhlu;
if (uhel < 0)
   uhel = 360 + uhel;


Kde OdecetKorekcnihoUhlu je dany úhel, o který se to má posunout.
jirka.jirka.
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 775
Založený: 17.10.2008
Bydlisko: Zlín
Karma: 6

Re: Posun nuly (absolutní snímač)

Odoslaťod Zaky » 07 Dec 2016, 14:12

Chtělo by to doplnit, zda absolutní snímač lze točit kolem dokola a zda má rozsah 360°, Tedy z něj dostáváš hodnoty 0-8191. Pokud ano, tak od přečtené hodnoty odečti svůj offset, pokud je hodnota kladná, nebo 0, máš hotovo, pokud je záporná, odečti ji od 360° a máš taky hotovo, jo a koukám, že už to máš :-)
Zaky
Nový člen
Nový člen
Príspevky: 84
Založený: 08.11.2014
Karma: 0

Re: Posun nuly (absolutní snímač)

Odoslaťod jirka.jirka. » 07 Dec 2016, 14:15

Kua, jsem si myslel, že jsem na něco zapomněl.... :D

jedná se o jednootáčkový. Tzn. 0~360° a výstup potom je 0~8192. Po přetočení přeteče.
jirka.jirka.
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 775
Založený: 17.10.2008
Bydlisko: Zlín
Karma: 6

Re: Posun nuly (absolutní snímač)

Odoslaťod Zaky » 07 Dec 2016, 16:35

Korekci bych udělal jako první na celočíselné hodnotě, pokud z toho potom potřebuješ úhel, zvaž, jestli není lepší ho počítat taky celočíselně, třeba v tisícínách stupně, tedy 185.452° reprezentovat jako celočíselných 185452. Float není v neopodstatněných případech zrovna vhodný datový typ, už kvůli výpočetní náročnosti.
Zaky
Nový člen
Nový člen
Príspevky: 84
Založený: 08.11.2014
Karma: 0

Re: Posun nuly (absolutní snímač)

Odoslaťod jirka.jirka. » 07 Dec 2016, 18:55

Můj chip obsahuje FPU jednotku. Takže jsem si s tím chtěl trošku pohrát. A zkoušel jsem ji vypnout, to je potom rooodeo. :D Ale když ji zapnu, tak to nejde ani poznat.

Ale stejně to předělám tak, ať jedu pouze v celých číslech.
Takže úhel 123,45° budu mít prezentované jako 12345°. :)
jirka.jirka.
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 775
Založený: 17.10.2008
Bydlisko: Zlín
Karma: 6

Re: Posun nuly (absolutní snímač)

Odoslaťod jirka.jirka. » 23 Dec 2016, 11:36

Zdravím.

Mám 2 zařízení na CAN bus. Když mám obě připojené, tak všechno funguje. Ale nyní se snažím o toto. Jak udělat, aby když se mi jedno zařízení odpojí, tak aby druhé pokračovalo dále?

Mám to takto?

Nekonecčnou smyčku, kterou vyčítám každých 5ms. Proto vím, že když je 1 průchod smyčkou je 5ms. Takže pokud je timeGyro větší než 20, tak to odpovídá 100ms. A vím, že aby CAN správně fungoval, musím změnit ID přijímané zprávy. Ale pokud to nechám, jak to mám, tak to nefunguje.... :( Nějaký nápad, co dělám špatně? Ten čas 5ms pro mě není kritický, pouze potřebuju, aby když je nějaké zařízení odpojeno, tak od ostatních abych dostával data.

Kód: Vybrať všetko
smyčka, do které vstoupím každých 5ms.
for (;;){
      if (!g_ul_recv_status) {
         //puts("zadna zprava na CAN sbernici\r");
         }
         else
         {
            if ((rx_mailbox.ul_id >> 18) == FIRST_GYRO_ID) //rotation to 11bit number (fromt 32bit)
            {
               GyroX   = (int16_t)(rx_mailbox.ul_datal & 0x0000ffff);   
               GyroY   = (int16_t)((rx_mailbox.ul_datal >> 16) & 0x0000ffff);      
               timeGyro = 0;
               prepni = 0;
            }      
            if ((rx_mailbox.ul_id >> 18) == ID_ABS_SNIMAC_READ)
            {
               uhel   = (int16_t)(rx_mailbox.ul_datal & 0x0000ffff);
               timeABS = 0;
               prepni = 1;
            }

         if (failGyro == 0)
            timeGyro++;
         if (failABS == 0)
            timeABS++;

         if ( (timeGyro < 20) && (timeABS < 20) )   //kontrola, zda funguje CANbus
         {   
            if (prepni == 1)
            {
               reset_mailbox_conf(&rx_mailbox);
               rx_mailbox.ul_mb_idx = CAN_COMM_RXMB_ID;
               rx_mailbox.uc_obj_type = CAN_MB_RX_MODE;
               rx_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk;
               rx_mailbox.ul_id = CAN_MID_MIDvA(FIRST_GYRO_ID);
               can_mailbox_init(CAN0, &rx_mailbox);
            }
            if (prepni == 0)
            {
               reset_mailbox_conf(&rx_mailbox);
               rx_mailbox.ul_mb_idx = CAN_COMM_RXMB_ID;
               rx_mailbox.uc_obj_type = CAN_MB_RX_MODE;
               rx_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk;
               rx_mailbox.ul_id = CAN_MID_MIDvA(ID_ABS_SNIMAC_READ);
               can_mailbox_init(CAN0, &rx_mailbox);
            }
         }
         
         if ( (timeGyro > 20) && (failGyro == 0) )
         {
            reset_mailbox_conf(&rx_mailbox);
            rx_mailbox.ul_mb_idx = CAN_COMM_RXMB_ID;
            rx_mailbox.uc_obj_type = CAN_MB_RX_MODE;
            rx_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk;
            rx_mailbox.ul_id = CAN_MID_MIDvA(ID_ABS_SNIMAC_READ);
            can_mailbox_init(CAN0, &rx_mailbox);
            failGyro = 1;   //toto se provede pouze jednou
         }
         if ( (timeABS > 20) && (failABS == 0))
         {
            reset_mailbox_conf(&rx_mailbox);
            rx_mailbox.ul_mb_idx = CAN_COMM_RXMB_ID;
            rx_mailbox.uc_obj_type = CAN_MB_RX_MODE;
            rx_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk;
            rx_mailbox.ul_id = CAN_MID_MIDvA(FIRST_GYRO_ID);
            can_mailbox_init(CAN0, &rx_mailbox);
            failABS = 1;
         }
         g_ul_recv_status = 0;   //clear flag of receive message
      }
   }


-- Spojený príspevok 23 Dec 2016, 10:51 --

Tak problém je někde v tom, že mi nenavštíví tento if:
Kód: Vybrať všetko
if ( (timeGyro > 20) && (failGyro == 0) )
jirka.jirka.
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 775
Založený: 17.10.2008
Bydlisko: Zlín
Karma: 6

Re: Posun nuly (absolutní snímač)

Odoslaťod jirka.jirka. » 02 Jan 2017, 11:22

Zdravím.

Takže jsem částečně pokročil. Nyní pokud odpojím např. senzor A, tak data vyčítám dál ze zařízení z B. Naopak to platí taktéž. Ale když odpojít obě zařízení, tak se nic neděje...... Třeba někdo uvidí, kde by mohl být problém. Díky moc

Definice, CAN Handleru.
Kód: Vybrať všetko
void CAN0_Handler(void)
{
   uint32_t ul_status;

   ul_status = can_mailbox_get_status(CAN0, 0);
   if ( (ul_status & CAN_MSR_MRDY) == CAN_MSR_MRDY) {
      rx_mailbox.ul_status = ul_status;
      can_mailbox_read(CAN0, &rx_mailbox);
      /* nastavim flag, ktery indikuje, za zprava byla prijata */
      g_ul_recv_status = 1;
   }
}


Smyčka, která proběhne každých 5ms.
Kód: Vybrať všetko
for (;;){
      if (!g_ul_recv_status) {
         /* nic jsem neprijal :) */
         }
         else
         {
            if ((rx_mailbox.ul_id >> 18) == FIRST_GYRO_ID)
            {
               GyroX   = (int16_t)(rx_mailbox.ul_datal & 0x0000ffff);      
               GyroY   = (int16_t)((rx_mailbox.ul_datal >> 16) & 0x0000ffff);
               timeGyro = 0;
               prepni = 0;
            }      
            if ((rx_mailbox.ul_id >> 18) == ID_ABS_SNIMAC_READ)
            {
               uhel   = (int16_t)(rx_mailbox.ul_datal & 0x0000ffff);
               timeABS = 0;
               prepni = 1;
            }
         xQueueSend(vypis_data_ethernet, (void *)&data, 1);
         g_ul_recv_status = 0;   //clear flag of receive message
      }

      if (failGyro == 0)
         timeGyro++;
      if (failABS == 0)
         timeABS++;

      if ( (timeGyro < 20) && (timeABS < 20) )   //kontrola, zda funguje CANbus
      {   
         if ( (prepni == 1) && (failGyro == 0) )
         {
            reset_mailbox_conf(&rx_mailbox);
            rx_mailbox.ul_mb_idx = CAN_COMM_RXMB_ID;
            rx_mailbox.uc_obj_type = CAN_MB_RX_MODE;
            rx_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk;
            rx_mailbox.ul_id = CAN_MID_MIDvA(FIRST_GYRO_ID);
            can_mailbox_init(CAN0, &rx_mailbox);
         }
         if ( (prepni == 0) && (failABS == 0) )
         {
            reset_mailbox_conf(&rx_mailbox);
            rx_mailbox.ul_mb_idx = CAN_COMM_RXMB_ID;
            rx_mailbox.uc_obj_type = CAN_MB_RX_MODE;
            rx_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk;
            rx_mailbox.ul_id = CAN_MID_MIDvA(ID_ABS_SNIMAC_READ);
            can_mailbox_init(CAN0, &rx_mailbox);
         }
      }
      
      if ( (timeGyro > 31) && (failGyro == 0) )
      {
         reset_mailbox_conf(&rx_mailbox);
         rx_mailbox.ul_mb_idx = CAN_COMM_RXMB_ID;
         rx_mailbox.uc_obj_type = CAN_MB_RX_MODE;
         rx_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk;
         rx_mailbox.ul_id = CAN_MID_MIDvA(ID_ABS_SNIMAC_READ);
         can_mailbox_init(CAN0, &rx_mailbox);
         data.rapamep_error |= (1 << CHYBA_GYRO);
         failGyro = 1;
      }
      if ( (timeABS > 31) && (failABS == 0))
      {
         reset_mailbox_conf(&rx_mailbox);
         rx_mailbox.ul_mb_idx = CAN_COMM_RXMB_ID;
         rx_mailbox.uc_obj_type = CAN_MB_RX_MODE;
         rx_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk;
         rx_mailbox.ul_id = CAN_MID_MIDvA(FIRST_GYRO_ID);
         can_mailbox_init(CAN0, &rx_mailbox);
         data.rapamep_error |= (1 << CHYBA_ABS);
         failABS = 1;
      }

      if ( (failABS == 1) && (failGyro == 1) )
      {
                   /* Zde pouze vypisuji, kdyz je chyba. Ale sem jsem nedostanu */
      }
   }


Inicializace CAN busu na SAM4E16E
Kód: Vybrať všetko
extern int8_t inicializace_can(void)
{
   data.rapamep_error = 0;
   
   uint32_t ul_sysclk;
   
   /* Enable CAN0 clock. */
   pmc_enable_periph_clk(ID_CAN0);

   ul_sysclk = sysclk_get_cpu_hz();
   if (can_init(CAN0, ul_sysclk, CAN_BPS_125K))
   {
      /* Disable all CAN0 interrupts. */
      can_disable_interrupt(CAN0, CAN_DISABLE_ALL_INTERRUPT_MASK);
      can_reset_all_mailbox(CAN0);

      /* Init CAN0 Mailbox 0 to Reception Mailbox. */
      reset_mailbox_conf(&rx_mailbox);
      rx_mailbox.ul_mb_idx = CAN_COMM_RXMB_ID;
      rx_mailbox.uc_obj_type = CAN_MB_RX_MODE;
      rx_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk;
      rx_mailbox.ul_id = CAN_MID_MIDvA(/*ID_ABS_SNIMAC_READ*/0x00);
      can_mailbox_init(CAN0, &rx_mailbox);

      /* Init CAN0 Mailbox 1 to Transmit Mailbox. */
      reset_mailbox_conf(&tx_mailbox);
      tx_mailbox.ul_mb_idx = CAN_COMM_TXMB_ID;
      tx_mailbox.uc_obj_type = CAN_MB_TX_MODE;
      tx_mailbox.uc_tx_prio = CAN_TX_PRIO;
      tx_mailbox.uc_id_ver = 0;
      tx_mailbox.ul_id_msk = 0;
      can_mailbox_init(CAN0, &tx_mailbox);

      /* Write transmit information into mailbox. */
      tx_mailbox.ul_id = CAN_MID_MIDvA(CAN_TRANSFER_ID);
      tx_mailbox.ul_datal = 0x00;   //Original - CAN_MSG_DUMMY_DATA;
      tx_mailbox.uc_length = MAX_CAN_FRAME_DATA_LEN;

      /* Enable CAN0 mailbox interrupt. */
      can_enable_interrupt(CAN0, CAN_IER_MB0);   //original 1 << CAN_COMM_RXMB_ID
      
      /* Configure and enable interrupt of CAN1. */
      NVIC_EnableIRQ(CAN0_IRQn);
      
      tx_mailbox.ul_datal = 0;   //zacina od nejspodnejsiho bitu
      tx_mailbox.ul_datah = 0;   //zacina od nejspodnejsiho bitu
      can_mailbox_write(CAN0, &tx_mailbox);   //zapise data do buffera
      /* Send out the information in the mailbox. */
      can_global_send_transfer_cmd(CAN0, CAN_TCR_MB1);   //odesle data z bufferu pryc po CANu
      
      nastaveniAbsSnimace();

      //komunikace je pripravena
      return 0;
   }
   else
   {
      return -1;   //inicializace selhala
   }
}


Popř. kdyby někdo měl nějaký nápad, tak určitě dejte vědět.

Osobně si myslím, že je něco prohnilého v tomto. Protože pokud debuguji program, tak se sem nikdy nedostanu. Což je nějaké divné.
Kód: Vybrať všetko
if ( (failABS == 1) && (failGyro == 1) )
      {
                   /* Zde pouze vypisuji, kdyz je chyba. Ale sem jsem nedostanu */
      }
jirka.jirka.
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 775
Založený: 17.10.2008
Bydlisko: Zlín
Karma: 6

Re: Posun nuly (absolutní snímač)

Odoslaťod peterple » 02 Jan 2017, 11:33

Pozrel som zbežne. žiadny zásadný problém nevidím. Typujem že sa ti nulujú tie premenné na počítanie času. Jak to debuguješ? Pripoj si tam sériovú linku, posielaj si na ňu stav týchto dvoch premenných a uvidíš.
peterple
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1288
Vek: 50.14
Založený: 25.06.2013
Bydlisko: Krajné
Karma: 36

Re: Posun nuly (absolutní snímač)

Odoslaťod jirka.jirka. » 02 Jan 2017, 13:01

Ok. Toto zkusím, ale zde bych problém neviděl.
Protože jakmile přičítám jednu z časových proměnných, tak nastavím daný příznak fail, např. když čas na gyorkopu dosáhne hodnoty 31, nastaví se daný fail flag
Kód: Vybrať všetko
failGyro = 1
, a tím se zakáže přičítání času.

Kód: Vybrať všetko
if (failGyro == 0)
         timeGyro++;
      if (failABS == 0)
         timeABS++;


Čímž další přičítání času už nemůže nastat. Časová proměnná je uint8_t, což je až 255 hodnot. Takže přetečení se mi moc nezdá. Ale ok budu debugovat. Jinak programuji to J-TAGem, ale problém je ten, že používám i ETHERNET, takže ten debug mi vždycky zničí spojení. Proto debuguju skrze ETHERNET a data si vypisuji v mém vlastním jednoduchém terminálu.
jirka.jirka.
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 775
Založený: 17.10.2008
Bydlisko: Zlín
Karma: 6

Re: Posun nuly (absolutní snímač)

Odoslaťod peterple » 02 Jan 2017, 14:46

nemyslel som že to pretečie, ale že sa to stále nuluje. Break hw debuggerom je to posledné čo by som tu použil. Ten ethernet je 100x lepší.
peterple
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1288
Vek: 50.14
Založený: 25.06.2013
Bydlisko: Krajné
Karma: 36

Re: Posun nuly (absolutní snímač)

Odoslaťod jirka.jirka. » 03 Jan 2017, 08:16

Takže pátrám dále po chybě.
Pokud "debuguji" po LAN, což je docela fajn, tak jsem dospěl sem.
Pokud odpojím GYRO, tak se nastaví proměnná timeGyro na hodnotu 32 a dále se s ní nic neděje. Úplně stejně je tomu tak i u proměnné timeABS.

Ale pokud odpojím jedno zařízení, vše je OK, viz výše. Ale přidám-li k tomu druhé zařízení, tak se program zastaví. A výpis po LAN taktéž. Takže ještě si asi přidám i nějaké blikání LED a budu muset najít kde se mi program kousne a proč.

Ale aspoň vím, že řešení kontroly zařízení na CANu funguje. Ještě odstranit ten průser, když tam není žádné zařízení.

-- Spojený príspevok 03 Jan 2017, 07:56 --

Klucííííí, já jsem asi trouba. :D

Pokud odesílám data po frontě, tak tyto data musím odesílat až za všema těma kontrolama. :D A ne, že data budu odesílat pouze, pokud přijmu data po CANu.

Protože, když odpojím všechny zařízení z CANu, tak je jasné, že už taky nic neodešlu. :D

Nebo-li.

Původní kód.
Kód: Vybrať všetko
if (!g_ul_recv_status) {
         /* nic jsem neprijal :) */
         }
         else
         {
            if ((rx_mailbox.ul_id >> 18) == FIRST_GYRO_ID)
            {
               GyroX   = (int16_t)(rx_mailbox.ul_datal & 0x0000ffff);     
               GyroY   = (int16_t)((rx_mailbox.ul_datal >> 16) & 0x0000ffff);
               timeGyro = 0;
               prepni = 0;
            }     
            if ((rx_mailbox.ul_id >> 18) == ID_ABS_SNIMAC_READ)
            {
               uhel   = (int16_t)(rx_mailbox.ul_datal & 0x0000ffff);
               timeABS = 0;
               prepni = 1;
            }
         xQueueSend(vypis_data_ethernet, (void *)&data, 1);
         g_ul_recv_status = 0;   //clear flag of receive message
      }


Takže jediné, co je potřeba, tak vzít tento řádek:
Kód: Vybrať všetko
xQueueSend(vypis_data_ethernet, (void *)&data, 1);


A vložit jej až za tu poslední závorku. :D

No nic, vlastní nepozornost.............. :D Tak snad mě nebudete proklínat. :D :axe: Důležité ale je, že chyba byla nalezená.
jirka.jirka.
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 775
Založený: 17.10.2008
Bydlisko: Zlín
Karma: 6

Re: Posun nuly (absolutní snímač)

Odoslaťod jirka.jirka. » 03 Jan 2017, 13:05

A když už tady řeším nějaký ten ofset toho absolutního snímače, tak se ještě zeptám.

V MCU mám jednoduchý výpočet: (nyní prosím omluvte floaty. Všechno bude přepočteno na integer, ale pro názornost je ten float rychlejší.
Kód: Vybrať všetko
polohaAbsolutnihoSnimaceADC   = (int16_t)(rx_mailbox.ul_datal & 0x0000ffff);
uhel = (((float)(polohaAbsolutnihoSnimaceADC*360))/8192) - ((float)NulovaciUhel/100);


A teď si dělám jednoduchou aplikaci v C#, kde po odeslání příkazu po LAN, provedu zápis offsetu do interní paměti MCU. Toto je v pořádku. Ale jak na ten přepočet toho offsetu v C#?
Kód: Vybrať všetko
$OFSET,xxxxx*CHCK<CR><LF>


Mám to takto:
Vyčtu aktuální hodnotu natočené hřídele, vyčtu aktuální hodnotu offsetu uloženou v paměti MCU. Potom sečtu tyto dvě proměnné a pokud je součet větší než 360°, tak tento úhel odečtu.

Zde je komplet zápis pro stisk tlačítka v C#.
Kód: Vybrať všetko
private void button10_Click(object sender, EventArgs e)
        {
            try
            {
                double OFSIK = OfsetValue ;
                double UHLIK = uhelOtoceni ;

                double SetOffset = OFSIK + UHLIK;
                if (SetOffset > 360.0)
                    SetOffset = SetOffset - 360.0;

                string hodnotaString = Convert.ToString(SetOffset);

                string s1 = getChecksum("$OFSET," + hodnotaString + "*");
                Byte[] data = System.Text.Encoding.ASCII.GetBytes("$OFSET," + hodnotaString + "*" + s1 + "\r\n");
               
                stream.Write(data, 0, data.Length);

                txtTalk.AppendText("Odeslana zprava: " + "$OFSET," + hodnotaString + "*" + s1 + "\r\n");
            }
            catch
            {
                MessageBox.Show("Data nelze odeslat!\r\n" );
            }
        }


Ale nejsem si moc jistý tím zápisem. Ale třeba se jenom mýlím. Mohl by mi na to někdo kouknout, jestli to takto je správně?
Kód: Vybrať všetko
double SetOffset = OFSIK + UHLIK;
       if (SetOffset > 360.0)
       SetOffset = SetOffset - 360.0;


Hlavně mi nejde do hlavy to propojení toho offsetu s aktuální pozicí natočení hřídele.
jirka.jirka.
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 775
Založený: 17.10.2008
Bydlisko: Zlín
Karma: 6


Naspäť na C,C++,C#

Kto je prítomný

Užívatelia prezerajúci si toto fórum: Žiadny registrovaný používateľ a 1 hosť.

Forums ©
Autor stránky je Ondrej Závodský(zawin), o graficky design sa stará Ľuboš Fabo(BUFU).

TOPlist

Powered by Copyright © UNITED-NUKE CMS. All Rights Reserved.
Čas potrebný k spracovaniu stránky 0.14 sekúnd