Een beginnersgids voor Arduino (8 / 15 stap)

Stap 8: Zelfs meer flikkerende LEDs


De LED-volgorde programmeren

Open de voorbeeld blink7.

Op lijn 3, ziet u een nieuwe structuur: we noemen dit een matrix. Een array is in feite een lijst van variabelen, in dit geval, het is een lijst van variabelen van het type int. Wij vierkante haken gebruiken om aan te geven dat er een matrix. Om de array te initialiseren, we gebruiken gebogen haken, en de waarden worden gescheiden door komma's.

Wanneer we willen een waarde uit een matrix te gebruiken, zullen we moeten specificeren die plaats in de array die we de waarde van willen. Laten we de matrix in blink7 als voorbeeld te gebruiken:

int array [] = {1,2,3,4,5,6,5,4,3,2};

Als we willen de eerste waarde van de matrix op te halen, wij gebruiken

 array[0] 

De nul tussen vierkante haakjes wordt de indexgenoemd. Arrays zijn op nul gebaseerde, dit betekent dat het eerste in de array element index nul. Dit kan verwarrend op het eerste, bijvoorbeeld array [5] zal terugkeren 6, waar je zou verwachten om terug te keren 5.
U kunt zich voorstellen dat dit een heleboel problemen kan veroorzaken... Dat is waarom deze fout heeft een eigen naam: een uit-door-één foutof hobo voor korte.

Wanneer u probeert te lezen van een waarde die niet binnen de matrix, matrix [10] bijvoorbeeld, de Arduino zal lees net de volgende plaats in het geheugen, zonder zich te realiseren dat de waarde er lezing is niet een deel van de matrix meer. Het geeft je alleen de waarde die het vindt op die bijzondere plek in zijn geheugen.
Maar dingen nog erger wanneer u het schrijven van een index is buiten de matrix, omdat u kan het overschrijven van andere gegevens, zoals variabelen of stukjes code die toevallig op die plaats in het geheugen! Een slecht idee...

Als u een array declareren wilt zonder het nog te initialiseren, kunt u

 array[10]; 

Opmerking dat 10 het aantal elementen, is terwijl het laatste element array [9] zal worden!

Als u het initialiseren op dezelfde regel, zoals in blink7, de Arduino IDE zal tellen de elementen voor u, en u hoeft niet te geven iets tussen de haakjes.

Als u weten van het aantal elementen in de matrix wilt, kunt u de functie sizeof(array) . Deze functie geeft als resultaat de grootte van de matrix, in bytes (1 byte = 8-bits). Dit is echter niet het bedrag van de elementen, in blink7, sizeof(array) 20 zal terugkeren. Dit is omdat elk element een int is, en een int 2 bytes lang is. Dus het totale aantal elementen is 20/2 = 10.
We gebruiken dit om af te sluiten onze for-lus wanneer we de hele matrix heb gelezen: zo lang als de index kleiner dan het aantal elementen is, kunnen we veilig het lezen van de matrix. We beginnen met i = 0, aangezien het eerste element index 0 is. Ditmaal alleen verhogen wij ik met 1. De notatie 'i ++' is precies hetzelfde als schrijven ' ik = i + 1', het is gewoon korter. Een andere manier van schrijven van dit zou ' ik += 1'.

Omdat LED #1 is aangesloten op pin 2, LED #2 naar pin 4, 3 tot en met 6 etc, vermenigvuldigen we het LED-nummer door 2 te krijgen het pin-nummer.

Arduino Referentie: Array

Arduino Referentie: Sizeof

Arduino Referentie: toename

Arduino Referentie: samengestelde toevoeging

Kunt u de waarden in de matrix om uw eigen reeks, en u kan zelfs toevoegen of verwijderen van elementen, aangezien we ons programma onafhankelijk van de lengte van de matrix, gemaakt met behulp van de functie sizeof().

Samenvatting:

  • Een array is een lijst van waarden (of tekens, of andere arrays) en maakt gebruik van vierkante haakjes]
  • Dit is de verklaring van een matrix: "int array [10];"
  • Dit is de aangifte en de initialisatie van een array: ' int array [] = {1,2,3,4,5,6,5,4,3,2};
  • Array indices zijn nul, wat betekent dat het eerste element is index 0
  • sizeof(array) geeft de grootte in bytes van de array
  • sizeof(data type) geeft de grootte in bytes van het gegevenstype
  • sizeof (array) / sizeof (gegevenstype van matrix) geeft u het aantal elementen in de matrix

Extra: 2-dimensionale arrays (Matrices)

In een array kan de elementen niet alleen gegevenstypen, zoals ints, maar ook andere arrays. Dit kunt u zogenaamde 2-dimensionale arrays, die kunnen worden vergeleken met matrices.

Dit wordt gebruikt in het voorbeeld blink8: nu kunt u de led cijfers en/of de vertraging in de matrix instellen.

 int array[][2] = { {1, 600}, {2, 100}, {3, 100}, {4, 100}, {5, 100}, {6, 600}, {5, 100}, {4, 100}, {3, 100}, {2, 100} }; 

Merk op dat we hebben om op te geven van alle dimensies behalve de eerste tussen de vierkante haakjes, wanneer een multi-dimensionale array declareren.

De syntaxis om een waarde uit de array is

 array[row][column] 

Open de voorbeeld matrix_sum. In het volgende voorbeeld zal niets doen als u het uploaden, het hoeft niet elke uitgangen, het is gewoon voor leren doeleinden.

Het maakt 4 matrices (2D arrays), waarvan er twee waarden hebben. Het berekent net de som van de twee matrices, en de getransponeerde matrix voor de eerste.

Dit wordt gedaan met behulp van geneste for-lussen. U kunt deze uitleg volgen op de afbeelding hierboven.
De nummers zijn de volgorde van die de for-lus zal gaan over hen. Ik wordt gebruikt voor de rijen, j voor de kolommen. Ze beginnen op de eerste kolom en de eerste rij (1,1) in de matrix notatie [0] [0] voor matrix notatie, dan is de kolom is Oplopend (1,2) of [1] [0], de kolom opnieuw wordt verhoogd (1,3) of [2] [0] wanneer j wordt verhoogd weer, de j-lus heeft afgesloten, omdat j niet langer minder dan drie is. Ik wordt verhoogd, j gaat terug naar nul: (2,1) of [0] [1], j wordt verhoogd: (2,2) of [1] [1], dan (2,3) of [2] [1]. Ik wordt verhoogd, j gaat terug naar nul: (3,1) of [2] [0], then (3,2) of [2] [1], en ten slotte (3,3) of [2,2]. Nu j sluit u af, en ik sluit ook.

De berekening van de getransponeerde matrix is gelijk, het wisselt gewoon de kolommen en de rijen:

transposeMatrix [i] [j] = matrixA [j], [i];

Binnen deze arrays kunt u meer arrays, in feite het creëren van multi-dimensionale ruimten. In theorie, hij aantal dimensies is onbeperkt, maar zodra u meer dan drie dimensies gebruiken, krijgt het echt ingewikkeld, dus andere methoden voorkeur zijn.

Gerelateerde Artikelen

Een beginnersgids voor Kolrosing, door een beginner.

Een beginnersgids voor Kolrosing, door een beginner.

* Dit is mijn inzending voor de wedstrijd "Houtbewerking". Als je van wat ik hier heb gedaan gelieve te stemmen! Bedankt! *Dus je zo ongeveer klaar met uw houtbewerkingsproject bent, hebt misschien je gemaakt enkele lepels, een mooie doos, een m
Visie: Een fakkel voor de personen met gezichtsstoornissen

Visie: Een fakkel voor de personen met gezichtsstoornissen

Visie is een apparaat van de fakkel gevormd om te helpen blinden navigeren met meer comfort, snelheid en vertrouwen, terwijl maken gebruik van ultrasone golven te detecteren in de buurt van hindernissen en hoogte te stellen van de gebruiker door midd
Digitale multimeter shield voor Arduino

Digitale multimeter shield voor Arduino

Dit instructable beschrijft een schild, die "Arduino" board in een digitale multimeter (DMM converteert).Het schild kan worden ingevoegd in "Arduino" UNO und Duemilanove planken. Het kan werken in drie modi:standalone - de meting gegev
How to Build een schild voor de Linkit One

How to Build een schild voor de Linkit One

Hallo mensen! Pure koolstof hier met een ander Instructable. Vandaag zal ik u tonen hoe te bouwen van een aangepaste schild voor het Linkit één Board. Voordat we in dat krijgen maar moet ik u vertellen waarom ik ging op dit streven in de eerste plaat
Een Absolute beginnersgids voor de Intel Edison

Een Absolute beginnersgids voor de Intel Edison

Hey daar! Onlangs ontving ik een Intel Edison board van Instructables, als een aardige gift. Als je afvraagt wat dat is, is de Intel Edison een kleine computer de grootte van een SD-kaart (dat is serieus klein), voor elektronica en computer hobbyiste
ArduDroid: Een eenvoudige 2-weg Bluetooth gebaseerde Androïde Controller voor Arduino

ArduDroid: Een eenvoudige 2-weg Bluetooth gebaseerde Androïde Controller voor Arduino

UPDATES:19 nov. 2031: advies: de fantastische synergie tussen Arduino & Android.30 oktober 2013: Andruino is nu officieel ARDUDROID en zal binnenkort beschikbaar op Google Play. Deze naamswijziging te vermijden conflict met een andere app op Google P
Het maken van een androïde toepassing voor Arduino (LED Turn on/off)

Het maken van een androïde toepassing voor Arduino (LED Turn on/off)

hier hebben we een androïde toepassing die gebruikmaakt van ecllipsedeze toepassing inschakelen leidde op arduino.deze toepassing werkt ook in je LAN.Hardware vereist:1: arduino uno2: arduino ethernet Shield3: RJ45-kabel4: LED5. android telefoonDe so
SensoDuino: Zet uw Androïde telefoon in een draadloze sensoren Hub voor Arduino

SensoDuino: Zet uw Androïde telefoon in een draadloze sensoren Hub voor Arduino

UPDATES23 november 2013: SensoDuino 0.160 krijgt een links.19 nov. 2031: advies: de fantastische synergie tussen Arduino & Android.19 november 2013: SensoDuino 0.159 is uit. Android telefoon datum (y, m, d) en tijd (h, m, s) worden ondersteund als se
Gemakkelijk, omkeerbare Motor controle voor Arduino (of een Microcontroller)

Gemakkelijk, omkeerbare Motor controle voor Arduino (of een Microcontroller)

dit project maakt gebruik van slechts drie hoofdcomponenten voor voorwaartse en omgekeerde bepalen voor een interne motor.  U kunt het gemakkelijk interface naar een Arduino of elke andere microcontroller.Het is zo eenvoudig - u kunt het draad van "f
AVRSH: Een tolk opdrachtshell voor Arduino/AVR.

AVRSH: Een tolk opdrachtshell voor Arduino/AVR.

Ooit wilde worden "aangemeld" bij uw AVR microcontroller? Ooit gedacht dat het zou gaaf zijn aan de "kat" een register om te zien van de inhoud ervan? Hebt u altijd al wilde een manier om de nodige energie en individuele perifere sub-s
Een Complete gids voor Onboard Jumpers op de Intel Edison kit voor Arduino

Een Complete gids voor Onboard Jumpers op de Intel Edison kit voor Arduino

De Intel® Edison kit voor Arduino kunt de Intel® Edison verenigbaar met Arduino shields ontworpen voor de UNO R3. De Arduino Expansion Board omvat verschillende jumper headers configureren van de Raad van bestuur met verschillende instellingen zoals
Een kleine Tea Timer (TTT) machine voor Arduino en ATtiny

Een kleine Tea Timer (TTT) machine voor Arduino en ATtiny

De TinyTeaTimmer (TTT) is een implementatie voor een kleine accessoire die gemakkelijk kan worden gemonteerd en geprogrammeerd d.m.v. een schakelaar, een knop, 1 of 2 LED's, een kleine servomotor en een Arduino board of een ATTiny-processor.De schets
Een gids voor het beheren van dingen met wisselende inbreng (via arduino)

Een gids voor het beheren van dingen met wisselende inbreng (via arduino)

het hart van dit project is een) aansluiten van een sensor op de analoge ingang van de arduino en b) programmeren met de if... else-statement.dit specifieke project toont een computer koelsysteem te handhaven bepaalde temperatuur binnen een computer
Een gids voor Raspberry Pi Arduino mededeling in Embedded systemen

Een gids voor Raspberry Pi Arduino mededeling in Embedded systemen

Dit is een gids voor verschillende methoden voor communicatie tussen de Raspberry Pi en Arduino. Deze handleiding is gemaakt van alles wat die ik heb geleerd van de oprichting van een forest capaciteiten. De post van het project kan worden gezien, ee