mandarīnpīle Posted May 15, 2013 Report Share Posted May 15, 2013 Ir pie iRobot Roomba pieslēgta Arduino plate. Neskaidrību rada braukšanu komandu došana, respektīvi, veids, kā no decimālās skaitīšanas sistēmas pāriet uz high-byte un low-byte. iRobots savai funkcionēšanai pieprasa komandu došanu šādā secībā: [braukšanas kods] [ātruma high-byte] [ātruma low-byte] [pagrieziena high-byte] [pagrieziena low-byte] Instrukcijā dots piemērs, kā veikt pārveidojumus: ātrums = -200 mm/s = hex FF38 = [hex FF] [hex 38] = [255] [56] pagrieziens = 500 grādu = hex 01F4 = [hex 01] [hex F4] = [1] [244] Testa nolūkos nolēmu nosūtīt šos rezultātā iegūtos skaitļus un robots tiešām brauc kā paredzēts: Serial.write(137) //Braukšanas kods Serial.write(255); Serial.write(56); Serial.write(1); Serial.write(244); Jautājums, kā saveidot funkciju, kas automātiski no decimālās sistēmas jebkādu ātruma un pagrieziena vērtību pārveidos par high un low bytiem? Arduino funkcijas highByte(); un lowByte(); atgriež kaut ko uz to pusi, bet ne īsti. Piemēram, funkcija lowByte(500); (skaitlis no piemēra instrukcijā) atgriež skaitli 244 (kā piemērā) bet ar kaut kādām nesaprotamām rakstzīmēm galā. Kāpēc tā un kā šis process ir pareizi jādara? Quote Link to comment Share on other sites More sharing options...
marrtins Posted May 15, 2013 Report Share Posted May 15, 2013 (edited) Kaut kā tā varbūt? Sen ar šīm lietām nav sanācis noņemties :) b = 200 hi = b div 256 // dalīšana bez atlikuma lo = b mod 256 // atlikums Ja negatīvs, tad b = 65536 - b Edited May 15, 2013 by marrtins Quote Link to comment Share on other sites More sharing options...
mandarīnpīle Posted May 17, 2013 Author Report Share Posted May 17, 2013 Kaut kā tā varbūt? Sen ar šīm lietām nav sanācis noņemties :) b = 200 hi = b div 256 // dalīšana bez atlikuma lo = b mod 256 // atlikums Ja negatīvs, tad b = 65536 - b Jā, tas darbojas. Varētu paskaidrot, kāds tam ir matemātiskais pamatojums? Quote Link to comment Share on other sites More sharing options...
marrtins Posted May 17, 2013 Report Share Posted May 17, 2013 Matemātiski neizskaidrošu, bet nu idejiski tas ir vnk darbības ar citu bāzi. Piemēram, pie bāzes 10 ir kā ierasts: 1,2,3...,9 un tad mainās kārta: '1'+'0' (hi=1 lo=0), 11 - hi=1, lo=2. Šajā gadījumā bāze ir 256 (0xFF + 1, b11111111 + 1). Ar negatīvo - šāds pieraksts vnk ir pieņemts - pēdējais (vai pirmais - no kuras puses skatoties - b1000000000000000) bits ir 1 - tātad negatīvs, kas rezultējas uz 65536 / 2 katrai zīmei. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.