MicroController Register Manipulation (2 / 6 steg)

Steg 2: Att göra koden kortare det enkla sättet...

Låt oss börja med en enkel skiss som kontrollerar staten en av 4 knappar och band det värdet med en av 4 lysdioder. Trycker på någon knapp, de motsvarande LED(s) tänds.

Jag har tagit med pin-mappning för 5 olika styrelserna visas här, chipKIT Max32, DP32, Uno32, Uc32 och CMOD styrelser och Arduino UNO:



Nu, när jag först började skriva kod, det var alltid längsta koden jag kunde tänka på eftersom jag inte visste bättre. Jag kan tänka mig det hade sett ut ungefär så här:

/ * Detta en lång, pin-av-pin version
av kartläggning 4 växlar till 4 lysdioder * /

stift för 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, produktionen);
pinMode (led_2, produktionen);
pinMode (led_3, produktionen);
pinMode (led_4, produktionen);

pinMode (btn_1, ingång);
pinMode (btn_2, ingång);
pinMode (btn_3, ingång);
pinMode (btn_4, ingång);
}

void loop()
{
om ((digitalRead(btn_1) == HIGH) & &
(digitalRead(btn_2) == låg) & &
(digitalRead(btn_3) == låg) & &
(digitalRead(btn_4) == Low))
{
digitalWrite (led_1, hög);
digitalWrite (led_2, låg);
digitalWrite (led_3, låg);
digitalWrite (led_4, låg);
}
annars om ((digitalRead(btn_1) == LOW) & &
(digitalRead(btn_2) == hög) & &
(digitalRead(btn_3) == låg) & &
(digitalRead(btn_4) == Low))
{
digitalWrite (led_1, låg);
digitalWrite (led_2, hög);
digitalWrite (led_3, låg);
digitalWrite (led_4, låg);
}
annars om ((digitalRead(btn_1) == LOW) & &
(digitalRead(btn_2) == låg) & &
(digitalRead(btn_3) == hög) & &
(digitalRead(btn_2) == Low))
{
digitalWrite (led_1, låg);
digitalWrite (led_2, låg);
digitalWrite (led_3, hög);
digitalWrite (led_4, låg);
}
annars om ((digitalRead(btn_1) == LOW) & &
(digitalRead(btn_2) == låg) & &
(digitalRead(btn_3) == låg) & &
(digitalRead(btn_4) == High))
{
digitalWrite (led_1, låg);
digitalWrite (led_2, låg);
digitalWrite (led_3, låg);
digitalWrite (led_4, hög);
}
annat
{
digitalWrite (led_1, låg);
digitalWrite (led_2, låg);
digitalWrite (led_3, låg);
digitalWrite (led_4, låg);
}
}

(Du kan använda detta med bara några få ändringar pin tilldelningarna. Kopiera och kommentar/avkommentera som behövs. Dessa stift valdes eftersom det kommer att göra det lättare att manipulera registren senare. Mer kod tillkommer senare för var och en av dessa styrelser.)

Uppifrån och ned, denna skiss är 73 rader (oräknat kommentarer), och med hjälp av MPIDE kommer att kräva 6664 byte minne för chipKIT Uno32 och 1402 byte för Arduino UNO.

Nu, låt oss titta på en modifierad version, denna gång med() loopar föratt göra de enformiga saker och vissa kapslade digitalRead() och digitalWrite() -kommandon att tilldela pin stater.

/ * Detta är en mer kortfattad version av
Mappa 4 växlar till 4 lysdioder * /

stift för Uno32/uC32
int ledde [] = {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()
{
för (int jag = 0; jag < 4; i ++)
{
pinMode (ledde [i], utgång);
pinMode (btn [i], ingång);
}
}

void loop()
{
för (int jag = 0; jag < 4; i ++)
{
digitalWrite (ledde [i], digitalRead(btn[i]));
}
}

Denna skiss är märkbart kortare. I själva är verket mindre än en tredjedel på 20 linjer utan kommentarer. Det tar lite mindre plats i minnet (6324 byte för chipKIT, 1074 byte för Arduino), men den enda riktiga fördelen är att skissa tar färre linjer. Instruktionsuppsättning i minnet är ungefär densamma. Kompilatorn har fortfarande att söka efter och läsa in den pinMode(), digitalRead() och digitalWrite() -kommandon från biblioteksfiler som bakgrund. Dessa är förinställda i storlek, så om du använder dem ännu en gång konverterade monteringsanvisningarna måste läsas in i minnet chip.

Så även om vi förkortar koden, det är klart att det inte kan spara mycket utrymme på chip. Låt oss fixa det.

Se Steg
Relaterade Ämnen

Seg... pinne.

Gör det själv själv-balansera... saker... har funnits nästan lika länge som kommersiella självbalanserande saker. Uppenbarligen de hemlagade versionerna är inte som släta, tillförlitlig, eller felsäkra som äkta, men de är fortfarande ganska fängsland...

Atmel start 2: Microcontroller kretsar och säkringar

M. A. Parker c2015Kretsar och säkringar konstruerar en enkel men viktig krets på en experimenter's skärbräda som ska användas som grundläggande plattform för många microcontroller projekt och för att ange parametrarna mikrokontroller (dvs säkringar)....

BITS & Byte magic manipulation

Hej duSå att du påbörjat resan av programmering och känner lust att lära sig magi bits och Bytes. Väl se längre vilket jag hoppas att upplysa er i fungerar och, eller inte och flytta.Om du har arbetat med Arduino som du kanske vet lite om detta men j...

Multiplexering 7 Segment visar med Arduino och SKIFT register

i detta instructable, jag kommer att lära grunderna i multiplexing 7 segmenterar skärmar med en Arduino och ett par av SKIFT register. Detta projekt är väl lämpad för att Visa numeriska information eller om du vill styra en massa lysdioder. För nybör...

Ledde matrisen projektet använder SKIFT register och pic16f628a mikro

detta är aproject att flytta orden på led matrisdisplayVi använder1-pic16f628a som mikrokontroller: billiga, programminnet 2k, har interna oscillatror, två portar A, B och en massa saker.2-ledde matrisen 8 * 8 rader gemensam anod och kolumner gemensa...

Hur man gränssnitt 16 X 2 LCD med AVR Microcontroller

här är Kopplingsschemat hos gränssnitt 16 X 2 LCD till AVR Microcontroller. I denna krets, att kristalloscillator ge klockan till mikrokontroller. Kondensatorerna ansluten till crystal ska fungera som filter och hjälpa kristallen att genljuda och svä...

Att få mer I/O pins på ATTiny med Skift register

Om du tidigare arbetat (eller arbetar) med små 8-bitars mikrokontroller, som ATTiny eller PIC12, du har förmodligen inträffat ett grundläggande problem för att inte ha tillräckligt GPIO pins för dina behov eller projektets krav.Uppgradera till en stö...

LEDDE matrisen med hjälp av SKIFT register

detta instructable är tänkt att vara en mer fullständig förklaring än andra tillgängliga online. Detta kommer bland annat ge mer hårdvara förklaring än finns i LED markeringsramen instructable av led555.MålDetta instructable presenterar begreppen med...

Hela världen microcontroller länk för under $20

kontrollera termostaten hem från jobbet. Slå på en sprinkler från någonstans i världen genom att snärta en switch. Detta Instructable visar hur du länkar två eller flera $4 mikrokontroller med ryggraden i internet och några enkla VB.Net-kod.Detta byg...

Arduino powered 7 seg LED-skärm med hjälp av SKIFT register - jag gjorde det på TechShop

sju segmenterade skärmar är bra. De är ganska enkla, inte ta mycket ström och har en stor flexibilitet när det gäller att Visa nummer. Men bortsett från 14 stift bara för att köra det är sådan smärta. Om bara det fanns ett sätt att använda dem utan a...

4 x 4 x 4 LED cube uppgradering med Skift register (74hc595)

projektet började med en påse med lysdioder som jag hade tagit bort från ficklampor, konvertera till UV ficklampor. Jag visste att jag skulle hitta något roligt för att använda dem med, men det var månader innan jag listade ut vad med dem att göra. N...

3D tryckt Microcontroller Dice Roller

Detta är ett bara-på-skoj projekt jag gjorde i Digilent MakerSpace. Oftast när jag spelar brädspel använder jag en tärning-rullande smartphone app eftersom tärningarna är så lätt att förlora. Jag tänkte jag skulle prova att göra min egen Hårdvaruvers...

5 skäl varför du är inte kompetent att programmet A Microcontroller

när börjar med microcontrollers du sannolikt att möta några problem i programmering din microcontroller och det finns inget mer frustrerande än slösa timmar att hitta problemet och stilla inte kunna. Jag har arbetat med olika typer av mikrokontroller...

Aleph 1,0 - Internet kontrollerad Mikroskop Roboten Manipulator

Aleph 1.0 är en avlägsen kontrollerade robotic manipulator för biologiska eller kemiska sonder. Idén kom från det faktum att forskare behöver ett säkert sätt att manipulera och analysera bioriskavfall eller giftiga ämnen eller att helt enkelt Observe...

Arduino Microcontroller och dess olika tillämpningar

Arduino microcontroller och dess olika tillämpningarSteg 1:...

Mångsidiga mobila Manipulator Mk 1

Kort beskrivning:Bygga din egen DIY giant robot som spelar piano, ritar bilder, förbereder mat, vatten växter, bedriver ljussabel dueller och mer. Den mångsidiga mobil Manipulator är en avancerad öppen källkod mänskliga-size mobil robotik plattform f...

Hur du ändrar fuse bitar av AVR Atmega328p - 8 bitars microcontroller med Arduino

I detta instructable du lära dig att ändra fuse bitar av Atmega328p mikrokontroller. Jag använder Arduino mega som programmerare till program Atmega328P-PU på bakbord. Den levereras med en standard 1MHz inre kalibrerad oscillator frekvens. Jag vill ä...

Använda allmänt tillgängliga program för att manipulera bilder

professionella grafiska designers använder dyra program som Photoshop och Illustrator för att arbeta med bildfiler. Det finns fria alternativ som Gimp och Inkscape, de är underbara, men det finns fortfarande en brant inlärningskurva och de är verklig...

Hur man använder en 74HC595 SKIFT Register med en AVR ATtiny13

om du har spelat med mikrokontroller och elektronik så du har förmodligen sett LED dot matrix-displayer och andra projekt som använder SKIFT register som 7-segment visar och mer. Detta instructable går över en snabb intro till 74HC595 8-bitars serail...