Bitars banka steg för steg: Arduino kontroll av WS2811, WS2812 och WS2812B RGB lysdioder (3 / 5 steg)
Steg 3: Från decimaltal till binärt: bryta ner nummer i 1: or och 0: or
Att vi vill hitta den binär representationen av decimaltal 23. Vi märker först att 23 är en kombination av nummer 3 i 10 ^ 0 position och nummer 2 i 10 ^ 1 position, vilket betyder att när man väger varje nummer enligt dess position (2 * 10 ^ 1 + 3 * 10 ^ 0) vi få nummer 23. Om vi försökte göra samma sak i binär vi skulle komma med nummer 10111 eftersom 1 * 2 ^ 4 + 0 * 2 ^ 3 + 1 * 2 ^ 2 + 1 * 2 ^ 1 + 1 * 2 ^ 0 = 23. Att hitta den binär representationen av förhållandevis få annat 23 kan naturligtvis göras utan mycket beräkning. Men för större blir det nödvändigt att använda följande algoritm:
-Öka från 2 ^ 0, hitta första makt 2 som är större än ett decimaltal som vi har
-Börjar med makt 2 omedelbart nedanför den vi hittade i det första steget, dividera decimaltal med befogenheter för 2 i fallande ordning, ända ner till 2 ^ 0
-Efter varje division steg får vi antingen en 1 eller 0 som kvoten och några resten värde. Resten ska så småningom gå till 0 (detta kan inträffa innan det sista divisionen steget)
-1: or och 0: or som kvoter ge den binär representationen av decimaltal
Tja, om vi inte har gått igenom processen innan, låter allt som rent nonsens. Ingenting som går igenom ett exempel för att klara upp saker. Att vi vill hitta den binär representationen av decimaltal 117. Låt oss försöka följa algoritmen ovan (jag kommer att använda några personliga tweaks):
-Vi börjar med 2 ^ 0 som är mindre än 117, så vi fortsätter att öka. 2 ^ 1 är också mindre, hålla igång... Okej så vi får till 2 ^ 5 är fortfarande mindre än 117, men så snart som vi träffar 2 ^ 6 märker vi att det är "första makt 2 som är större än ett decimaltal som vi har"
-Så vi vet att vi måste börja med makt 2 omedelbart under 2 ^ 6, som är 2 ^ 5. [Personlig tweaks] eftersom vi vet att vi kommer att vara divideras med all makt 2 nedan 2 ^ 5, jag skriver dem alla ner förväg så jag inte glömmer. Jag också påminna mig själv att resten av divisionen skall upphöra i 0 (även om det kunde förvandlas till 0 längs vägen.
Divider | Resten | Kvoten
2 ^ 6 (64) ||
2 ^ 5 (32) ||
2 ^ 4 (16) ||
2 ^ 3 (8) ||
2 ^ 2 (4) ||
2 ^ 1 (2) ||
2 ^ 0 (1) ||
0
-Med allt ställa in, vi börjar uppdelning kliver:
Divider | Resten | Kvoten
2 ^ 6 (64) | 117 | 1
2 ^ 5 (32) | 53 |
2 ^ 4 (16) ||
2 ^ 3 (8) ||
2 ^ 2 (4) ||
2 ^ 1 (2) ||
2 ^ 0 (1) ||
0
117 dividerat med 64 ger en kvot av 1 och en rest av 53. Vi vet således att i den 7: e plats av vår binär representation av 117, det blir en 1 (dvs. 1XXXXXX). För att få de andra positionerna fortsätta vi helt enkelt division:
Divider | Resten | Kvoten
2 ^ 6 (64) | 117 | 1
2 ^ 5 (32) | 53 | 1
2 ^ 4 (16) | 21 | 1
2 ^ 3 (8) | 5 | 0
2 ^ 2 (4) | 5 | 1
2 ^ 1 (2) | 1 | 0
2 ^ 0 (1) | 1 | 1
0
- Och så får vi att den binär representationen av decimaltal 117 är 1110101. Vi måste komma ihåg, att även om resten går till 0 innan sista division steg, vi måste fortsätta ända ner till 2 ^ 0. Således, när det gäller den decimala nummer 48:
Divider | Resten | Kvoten
2 ^ 5 (32) | 48 | 1
2 ^ 4 (16) | 16 | 1
2 ^ 3 (8) | 0 | 0
2 ^ 2 (4) | 0 | 0
2 ^ 1 (2) | 0 | 0
2 ^ 0 (1) | 0 | 0
0
Binär representation är 110000 i stället för 110, som vi skulle få om vi stannade dykning när resten först nått 0. Att veta hur att bryta ner ett tal till sina väljare 1: or och 0: or är mycket nödvändigt för att kunna överföra data till WS281X.