Gör: it Robotics startkit - förståelse bitvis Math (2 / 3 steg)
Steg 2: När ReadOptical() metoden
Som sagt det finns är några stavfel i kommentarerna i koden i linefollow.ino.Every loop program samtal den följande function:sensor_in=line_following.read_optical();
Kommentarer för denna read_optical() lyder följande:
Returer
0 × 000 optical1 svart
0x0ff optical1 vitt
0 × 100 optical1 vit
0x1ff optical1 svart
0x2XX inte redo; Använd inte detta värde
Faktiskt är bör följande
Returer
0 × 000 optical1 svart
0xFF optical1 vit
0 × 100 optical2 vit
0x1ff optical2 svart
0x2XX inte redo; Använd inte detta värde (antingen sensorn kan returnera detta värde)
Egentligen bör 0x0ff 0xff
Hänvisa till blogginlägg programvara Del3
Du kommer att se i den nedan punkterna vikten av dessa stavfel. (har att göra med att läsa alla andra sensor) På raden efter robot finns två optiska sensorer, varje gång funktionen loop() kör linefollow.ino skiss samtal en metod för att se om en av sensorerna är att se ljus eller mörk.
På en mikro-controller, till exempel Arduino, är en sekund en mycket lång tid. Funktionen loop() kan köra många tusen gånger per sekund. Hur lång tid varje slinga tar beror på hur många programinstruktioner äga rum. Några instruktioner tar längre tid att köra än andra instruktioner.
Instruktion (vad funktioner och metoder består av) körningstid mäts i CPU klockcykler. Arduino som standard fungerar på 16 MHz eller 16 miljoner klockan cykler en sekund. Linefollow.ino skiss utför några ganska enkel logik.
När du har installerat vissa variabler, anropar loop() en funktion för att se om en sensor är ljus eller mörk, beroende på svaret några fancy logik utförs för att minska svaret till ett värde av 0, 1, 2 eller 3. Dessa värden används sedan berätta motorerna antingen gå framåt, vänster eller höger.
Varje 15 millisekunder loop programmet berättas att växla och läsa andra sensorn. Så berätta du har ett program som loopar läsa första en sensor, konverterar svaret på 0, 1, 2 eller 3, motorerna vad man ska göra, och sedan läsa andra sensorn, konvertera svaret på 0, 1, 2 eller 3 och sedan berätta motorer att göra. I många fall, beroende på värdena i variablerna insats 1 och åtgärd2 instruktioner att kontrollera motorerna hoppas över. Hänvisa till ett senare blogginlägg.
Dessa operationer görs igen tusentals gånger per sekund. Resten av denna blogg och senare Bloggar kommer att lära dig vad som händer med den fancy logik som läser sensorn och konverterar svaret på 0, 1, 2 eller 3. Följande kodsegmentet är fancy koden som omvandlar sensormätningar till ett värde of0, 1, 2 eller 3. Denna kod innebär några program anvisningar som kan vara ganska förvirrande för newmicro-controller programmerare.
Se en annan bloggpost att jag skrev heter "Tutorial – bitars banka och booleska matematik utan the Math" denna tutorial går hand i hand med att förstå följande kodsegmentet:
om ((sensor_in & 0xf00) == 0)
sensorValue1 = sensor_in & 0xff;
annars om ((sensor_in & 0xf00) >> 8 == 1)
sensorValue2 = sensor_in & 0xff;
om (sensorValue1 == 0x00) insats 1 = Åtgärd1 & 0xfe;
om (sensorValue1 == 0xFF) insats 1 = insats 1 | 0x01;
om (sensorValue2 == 0x00) insats 1 = insats 1 | 0x02;
om (sensorValue2 == 0xFF) insats 1 = insats 1 & 0xfd;
Detta segment av koden använder tre speciella operatorer (instruktioner som är verksamma på givna värden) koden använder följande binära operatorer: & bitvis och operatör, | Bitvis OR operatorand den >> bitvis rätt Shift operatör.
(Läst handledningen)