Stap 2: Het maken van code korter de gemakkelijke manier...
Laten we beginnen met een eenvoudige schets controleert de status van een van de 4 knoppen en banden die waarde aan één van de 4 LEDs. Druk op een knop (pen), de bijbehorende LED(s) oplichten.
Ik heb ook pin-toewijzing voor de 5 verschillende planken die hier is afgebeeld, de chipKIT Max32, DP32, Uno32, Uc32 en CMOD platen en de Arduino UNO:
Nu, toen ik begon het schrijven van code, het was altijd de langste code die ik bedenken kon van omdat ik niet beter wist. Ik stel dat zou hebben leek het iets als dit:
/* This a long, pin-by-pin version of mapping 4 switches to 4 LEDs*/ //pins for Uno32/uC32 : Max32 : DP32 : CMOD : UNO int led_1 = 26; // : 34 : 5 : 20 : 4 int led_2 = 27; // : 35 : 6 : 21 : 5 int led_3 = 28; // : 36 : 7 : 22 : 6 int led_4 = 29; // : 37 : 8 : 23 : 7 int btn_1 = 30; // : 30 : 0 : 35 : 8 int btn_2 = 31; // : 31 : 1 : 36 : 9 int btn_3 = 32; // : 32 : 2 : 37 : 10 int btn_4 = 33; // : 33 : 3 : 38 : 11 void setup() { pinMode(led_1, OUTPUT); pinMode(led_2, OUTPUT); pinMode(led_3, OUTPUT); pinMode(led_4, OUTPUT); pinMode(btn_1, INPUT); pinMode(btn_2, INPUT); pinMode(btn_3, INPUT); pinMode(btn_4, INPUT); } void loop() { if ((digitalRead(btn_1) == HIGH) && (digitalRead(btn_2) == LOW) && (digitalRead(btn_3) == LOW) && (digitalRead(btn_4) == LOW)) { digitalWrite(led_1, HIGH); digitalWrite(led_2, LOW); digitalWrite(led_3, LOW); digitalWrite(led_4, LOW); } else if ((digitalRead(btn_1) == LOW) && (digitalRead(btn_2) == HIGH) && (digitalRead(btn_3) == LOW) && (digitalRead(btn_4) == LOW)) { digitalWrite(led_1, LOW); digitalWrite(led_2, HIGH); digitalWrite(led_3, LOW); digitalWrite(led_4, LOW); } else if ((digitalRead(btn_1) == LOW) && (digitalRead(btn_2) == LOW) && (digitalRead(btn_3) == HIGH) && (digitalRead(btn_2) == LOW)) { digitalWrite(led_1, LOW); digitalWrite(led_2, LOW); digitalWrite(led_3, HIGH); digitalWrite(led_4, LOW); } else if ((digitalRead(btn_1) == LOW) && (digitalRead(btn_2) == LOW) && (digitalRead(btn_3) == LOW) && (digitalRead(btn_4) == HIGH)) { digitalWrite(led_1, LOW); digitalWrite(led_2, LOW); digitalWrite(led_3, LOW); digitalWrite(led_4, HIGH); } else { digitalWrite(led_1, LOW); digitalWrite(led_2, LOW); digitalWrite(led_3, LOW); digitalWrite(led_4, LOW); } }
(U kunt dit met enkel een paar veranderingen in de pin-toewijzingen gebruiken. Kopieer en commentaar/uncomment zo nodig. Deze pinnen werden gekozen omdat het het gemakkelijker maken zal om de registers later bewerken. Meer code zullen toegevoegd worden later voor elk van deze borden.)
Boven naar beneden, deze schets is 73 lijnen (niet meegerekend opmerkingen), en met behulp van MPIDE vergt 6664 bytes van het geheugen voor de chipKIT Uno32 en 1402 bytes voor de Arduino UNO.
Nu, laten we eens kijken naar een gewijzigde versie, deze keer met behulp van enkele lussen voor() te doen van de repetitieve spullen, en sommige geneste digitalRead() en digitalWrite() -opdrachten pin-Staten toewijzen.
/* This is a more concise version of mapping 4 switches to 4 LEDs*/ //pins for Uno32/uC32 int led[] = {26,27,28,29}; //Max32 : {34,35,36,37}; //DP32 : {5,6,7,8}; //CMOD : {20,21,22,23}; //UNO : {4,5,6,7}; int btn[] = {30,31,32,33}; //Max32 : {30,31,32,33}; //DP32 : {0,1,2,3}; //CMOD : {35,36,37,38}; //UNO : {8,9,10,11}; void setup() { for (int i = 0; i < 4; i++) { pinMode(led[i], OUTPUT); pinMode(btn[i], INPUT); } } void loop() { for (int i = 0; i < 4; i++) { digitalWrite(led[i], digitalRead(btn[i])); } }
Deze sketch is aanzienlijk korter. In feite, is het minder dan een derde op 20 lijnen w/o opmerkingen. Het vergt wel een beetje minder ruimte in het geheugen (6324 bytes voor chipKIT, 1074 bytes voor Arduino), maar het enige echte voordeel is dat de schets minder lijnen neemt. De instructie set in het geheugen is ongeveer hetzelfde. De compiler heeft nog steeds zoeken en laden van de pinMode(), digitalRead() en digitalWrite() commando's uit de bibliotheek achtergrondbestanden. Deze zijn vooraf ingesteld in grootte, zodat als je ze zelfs een keer gebruiken de geconverteerde montage-instructies in de chip-geheugen moeten worden geladen.
Dus zelfs als we de code verkorten, het is duidelijk dat het niet veel ruimte op de chip kan besparen. Laten we dat te bevestigen.