
the desky arduino charakterizováno za to poměrně jednoduché programování v IDE prostředí. To je způsobeno použitím polí a řetězcůkteré umožňují zjednodušení souboru rozmanitých proměnných a dat.
Pokud se chcete hlouběji ponořit do Ve světě programování pro Arduino je důležité znát tyto dvě funkce, protože vám pomohou ušetřit čas. žádné další chyby.
Chcete-li se dozvědět více, je důležité, abyste četli až do konce. Vysvětlíme, o co tyto pojmy jde, a postup krok za krokem, který byste měli dodržovat při používání matice. Začněme
Co je to pole v programování na Arduinu a k čemu se používá?
Níže vám ukážeme účel dvou velmi důležitých prvků při programování desky Arduino:
Pole
Pole, vektory nebo maticeJsou to kontejnery pro proměnné. To znamená, že jsou... „proměnné“ které obsahují další, aby je bylo možné seskupit. Nazývají se také maticemi, protože jeho graficky znázorněné uspořádání je podobné uspořádání matice a Nazývají se také vektory protože matice s jedním řádkem nebo sloupcem se nazývají stejným názvem.
Aby bylo možné použít pole, existují dva požadavky. První je, že všechny obsažené proměnné jsou stejné povahy, a druhá je, že není překročen limit proměnných, které může program uložit.
Tento limit se liší v závislosti na poli.Protože si ho sami předdefinujeme při deklaraci (je důležité, abychom při vytváření pole rezervovali paměť, která se použije k definování konce matice), můžeme pak říci, že Je to sada proměnných seskupených pod jedním názvem, V rámci této skupiny však mohou existovat i další různé typy, seřazené podle indexu. To zjednodušuje programování tím, že kód je jednodušší a přehlednější.
Strings
Řetězce znaků nebo „řetězce“ Jedná se o datové typy, které umožňují shromažďovat různé znaky. Liší se od „char“ protože umožňují uložení více než jednoho znaku. Je to možné. ukládat slova, fráze, čísla, speciální znaky nebo kombinace těchto prvků.
Například:
Řetězec str1 = "vítejte"; Řetězec str2 = "vítejte uchazeče"; Řetězec str3 = "54321"; Řetězec str4 = "vítejte uživatele 54321"; Řetězec str5 = "*/-+"; Řetězec str6 = "dobře"uživatel přišel ++**54325**++";
Díky tomuto nástroji je možné snadněji dosáhnout různých výsledků. Mezi ně patří zřetězení, které spočívá v sestavení dvou řetězců znaků do jednoho.
To je velmi užitečné, když chcete vytvářet sekvence kódu, viz níže:
Řetězec str1 = "vítejte"; Řetězec str2 = "uživatel"; Řetězec str3 = ""; str3 += str1; str3 += " "; str3 += str2;
Pokud vypíšete „str3“, výsledek bude „vítáme uživatele“.Vytvořili jsme zřetězení hodnot "Vítejte" plus proměnná "Uživatelské jméno", po označení a prázdná řetězcová proměnnáDalším z jeho využití je „naVelkáPísa()“ y „naMaláPísa()“Tyto funkce nahrazují všechny znaky v řetězci velkými a malými písmeny. Jsou také velmi užitečné pro převod čísel z desítkové soustavy na hexadecimální, osmičkové nebo binární.
Jako příklad použijeme 26:
int num = 26; String hex = String(num, HEX); String bin = String(num, BIN); String oct = String(num, OCT); println(hex); println(bin); println(oct); Po vytištění bude výsledek 1A 11010 32
1A by v hexadecimální soustavě bylo 26, zatímco 11010 je výsledkem v binární a 32 v osmičkové soustavě.
Naučte se krok za krokem, jak používat matici nebo pole při programování s Arduinem
Pole i řetězce Toto jsou nepostradatelné nástroje, které se musíte naučit používat Pokud chcete naprogramovat svou desku Arduino.
Pro začátek uvádíme několik základních pokynů:
Prohlásit
Je důležité, Pro upřesnění, pro použití polí je nejprve nutné indexovat první prvek. s číslem nulaTakto na něj nyní můžeme zadávat dotazy a přiřazovat mu hodnoty.
Můžeme je deklarovat kterýmkoli z následujících způsobů:
int losEnteros[6]; //deklaruje pole 6 proměnných typu int int losPins[] = {2, 4, 8, 3}; //deklaruje pole 4 proměnných typu int float losSensores[5] = {2, 4, -8, 3.8, 2.1, 6}; //deklaruje pole 6 proměnných typu float char mensaje[5] = "Pozdrav"; //deklaruje pole 5 prvků typu char char mensaje[6] = {'s','a','l','u','d','o'}; //deklaruje pole 6 prvků typu char int mimatriz[5]; int Pins[] = {2, 4, 8, 3, 6}; int losValores[5] = {2, 4, -8, 3, 2};
To byste měli mít na paměti Pole typu char vyžadují další znak k identifikaci úrovně pole..
Přístup k matici
Matice, jak jsme již řekli, Je indexován od nulyPrvní hodnota se tedy nachází na indexu 0. Podle příkladu, Hodnoty[0] bude rovno 2 a Hodnoty[1] Bude to 4Proto musíme být při přístupu k poli opatrní. Pokud se pokusíme o přístup za konec (s indexem menším než nula nebo větším než deklarovaná velikost), budou to ovlivněny použité paměťové adresy. pro jiné účely způsobí chyby.
Přiřazení hodnoty poli
Pro přiřazení hodnot do pole se zase používá operátor přiřazování (=), pokračujte v příkladu takto:
losSensores[0] = 10; //asigna 10 al primer elemento de la matrizx = losSensores[4]; //guarda el valor del quinto elemento de la matriz en la variable x
Načíst hodnotu z pole
Pro načtení konkrétní hodnoty z konkrétní matice a podle příkladu stačí použít řádek:
x = losValores[4];
Seznam nejlepších projektů s Arduinem a poli, které si můžete procvičit
Co teď Víte, o co v těchto nástrojích jde?Nastal čas uvést je do praxe.
Abychom vám s tím pomohli, připravili jsme pro vás tyto tři projekty, abyste si mohli procvičit a uvést do praxe vše, co jste se v tomto příspěvku naučili:
Paměťová hra
Je to herní aplikace ve kterém si musíme zapamatovat co nejvíce číslic, dokud nedokončíme načítání "bicí".
Co se týče hardwaru, budeme potřebovat:
- Arduino Mega 2560
- Sedmisegmentový displej (podobný číslicím na kalkulačkách).
- Numerická klávesnice pro Arduino typu 3 x 4
- Generické svetry
- Miniaturní displej pro nabíjení baterie
Pak je k sobě propojíme takto:
- Připojte první pin vlevo k pinu 8 ArduinaPiny 8 až 2 na řídicí jednotce Arduino Mega. Jak je znázorněno na obrázku.
- La sedmisegmentový displej se připojuje k pinům 35, 37, 39, 41, 47, 49 a 53.
- La Miniaturní displej baterie se připojuje pomocí pinů DIO na 9 a CLK na 10.
Co se týče softwaru, toto je kód:
#zahrnout #zahrnout int CLK = 10; int DIO = 9; Zobrazení baterie TM1651(CLK, DIO); const byte ROWS = 4; const byte COLS = 3; char keys[ROWS][COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; byte rowPins[ROWS] = {8, 7, 6, 5}; byte colPins[COLS] = {4, 3, 2}; Klávesnice keyboard = Keyboard(makeKeymap(keys), rowPins, colPins, ROWS, COLS); int start[7] = {39, 41, 53, 49, 47, 37, 35}; int ugasi [ 7 ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 }; int jedan [ 7 ] = { 0 , 1 , 1 , 0 , 0 , 0 , 0 }; At t dva [ 7 ] = { 1 , 1 , 0 , 1 , 1 , 0 , 1 }; int tri[7] = {1, 1, 1, 1, 0, 0, 1}; int cetiri [7] = {0, 1, 1, 0, 0, 1, 1}; int pet [ 7 ] = { 1 , 0 , 1 , 1 , 0 , 1 , 1 }; int sest[7] = {0, 0, 1, 1, 1, 1, 1}; int sedam[7] = {1, 1, 1, 0, 0, 0, 0}; int osam[7] = {1, 1, 1, 1, 1, 1, 1}; int devet[7] = {1, 1, 1, 0, 0, 1, 1}; int null[7] = {1, 1, 1, 1, 1, 1, 1, 0}; int pom = 0; int s[50]; int k = 0; int partition = 0; empty configuration() { Serial.start(9600); Output(start); BatteryDisplay.init(); } BatteryDisplay.set(BRIGHTEST); // BRIGHT_TYPICAL = 2, BRIGHT_DARKEST = 0, BRIGHTEST = 7; BatteryDisplay.frame(FRAME_ON); randomSeed(analogRead(0)); while (partition != 8) { BatteryDisplay.displayLevel(partition); s[k] = random(0, 10); WriteDisplay(start, ugasi); delay(200); ispis(s[k]); if (Konecno(k) != 0) { WriteDisplay(start, ugasi); break; } break++; k++; } // while finish } // dokončení nastavení void loop() {} int Konecno(int k) { int pom = 0; while (pom <= k) { char key = keyboard.getKey(); while (!key) { key = keyboard.getKey(); } if (s[pom] != K(key)) return -1; pom++; delay(400); } return 0; } // konec int K ( Char key ) { if ( key == '1' ) return 1651 ; else if ( key == '2' ) return 2 ; else if ( key == '3' ) return 3 ; else if ( key == '4' ) return 4 ; else if ( key == '5' ) return 5 ; else if ( key == '6' ) return 6 ; else if ( key == '7' ) return 7 ; else if ( key == '8' ) return 8 ; else if ( key == '9' ) return 9 ; } }
Knight Rider, fantastické auto nebo začarované auto
Pokud vám tato jména nezní povědomě, jistě ano vašim rodičům nebo dokonce prarodičům. Je to kód, který řídí chování série LED diod. stejným způsobem, jako to udělala jedna z hlavních postav tohoto osmdesátkového seriálu.
Budeme potřebovat:
- 6 LED
- 6 rezistorů o hodnotě 220 ohmů
- Deska Arduino UNO
- Generické svetry
LED diody jsou připojeny k pinu 2 až 7 pomocí rezistoru na každém jumperu. Ukážeme vám také tři různé způsoby, jak tento vizuální efekt naprogramovat. V prvním případě použijeme pouze „digitální psaní“ (pinNum, HIGH / LOW) a „delay“ (time). Ve druhém případě to uděláme konstrukcí typu "pro" který udělá totéž, ale v kódu s menším počtem řádků.
Nakonec kód, který tento efekt provede plynuleji:
/* Knight Rider 1 */ int pin2 = 2; int pin3 = 3; int pin4 = 4; int pin5 = 5; int pin6 = 6; int pin7 = 7; int timer = 100; void setup(){ pinMode(pin2, OUTPUT); pinMode(pin3, OUTPUT); pinMode(pin4, OUTPUT); pinMode(pin5, OUTPUT); pinMode(pin6, OUTPUT); pinMode(pin7, OUTPUT); } void loop() { digitalWrite(pin2, HIGH); delay(časovač); digitalWrite(pin2, LOW); delay(časovač); digitalWrite(pin3, HIGH); delay(časovač); digitalWrite(pin3, LOW); delay(časovač); digitalWrite(pin4, HIGH); delay(časovač); digitalWrite(pin4, LOW); delay(časovač); digitalWrite(pin5, HIGH); delay(časovač); digitalWrite(pin5, LOW); delay(časovač); digitalWrite(pin6, HIGH); delay(časovač); digitalWrite(pin6, LOW); delay(časovač); digitalWrite(pin7, HIGH); delay(časovač); digitalWrite(pin7, LOW); delay(časovač); digitalWrite(pin6, HIGH); delay(časovač); digitalWrite(pin6, LOW); delay(časovač); digitalWrite(pin5, HIGH); delay(časovač); digitalWrite(pin5, LOW); delay(časovač); digitalWrite(pin4, HIGH); delay(časovač); digitalWrite(pin4, LOW); delay(časovač); digitalWrite(pin3, HIGH); delay(časovač); digitalWrite(pin3, LOW); delay(časovač); } /* Knight Rider 2 */ int pinArray[] = {2, 3, 4, 5, 6, 7}; int count = 0; int timer = 100; void setup(){ // provedeme všechny deklarace najednou for (count=0;count<6;count++) { pinMode(pinArray[count], OUTPUT); } } void loop() { for (count=0;count<6;count++) { digitalWrite(pinArray[count], HIGH); delay(timer); digitalWrite(pinArray[count], LOW); delay(timer); } for (count=5;count>=0;count--) { digitalWrite(pinArray[count], HIGH); delay(timer); digitalWrite(pinArray[count], LOW); delay(timer); } } /* Knight Rider 3 */ int pinArray[] = {2, 3, 4, 5, 6, 7}; int count = 0; int timer = 30; void setup(){ for (count=0;count<6;count++) { pinMode(pinArray[count], OUTPUT); } } void loop() { for (count=0;count<5;count++) { digitalWrite(pinArray[count], HIGH); delay(časovač); digitalWrite(pinArray[count + 1], HIGH); delay(časovač); digitalWrite(pinArray[count], LOW); delay(časovač*2); } for (count=5;count>0;count--) { digitalWrite(pinArray[count], HIGH); delay(časovač); digitalWrite(pinArray[count - 1], HIGH); delay(časovač); digitalWrite(pinArray[count], LOW); delay(časovač*2); } }
Binární hodiny
Un binární hodiny Je to zařízení, které vizualizuje čas. (což je šedesátkové) ve složeném binárním výrazu, tedy výrazu se šesti číslicemi (2 pro hodinu, 2 pro minuty a 2 pro sekundy).
Je to opravdu snadné; pro začátek budeme potřebovat:
- 1 prototypová deska
- 6 červených LED diod
- 6 zelených LED diod
- 5 LED diod, žluté
- 17 rezistorů o hodnotě 330 ohmů
- 17 propojky
- Arduino UNO
Se vším, co jsem se naučil, Budete schopni dešifrovat všechna pole, která se objevují v potřebném kódu. k ovládání těchto hodin.
Překontrolovat:
int ledPinsSec[] = {2, 3, 4, 5, 6, 7}; int ledPinsMin[] = {8, 9, 10, 11, 12, 13}; int ledPinsHr[] = {14, 15, 16, 17, 18, 19}; int secSize = sizeof(ledPinsSec) / sizeof(int); int minSize = sizeof(ledPinsMin) / sizeof(int); int hourSize = sizeof(ledPinsHr) / sizeof(int); int sekundy = 30; int minuty = 30; int hodiny = 15; void setup() { begin(9600); //Získá počet prvků v poli println(sizeof(ledPinsSec)); for(int i = 0; i< secSize;i++) { pinMode(ledPinsSec[i], VÝSTUP); } for(int i = 0; i< minSize;i++) { pinMode(ledPinsMin[i], VÝSTUP); } for(int i = 0; i< hourSize;i++) { pinMode(ledPinsHr[i], VÝSTUP); } } void loop() { sekundy++; pokud(sekundy > 59) { sekundy = 0; minuty++; pokud(minuty > 59) { minuty = 0; hodiny++; pokud(hodiny > 23) { hodiny = 0; } } } //Serial.println((char) sekundy); print("Hodiny: "); print(hodiny); print("Minuty: "); print(minuty); print("Sekundy: "); println(sekundy); DisplaySeconds(); DisplayMinutes(); DisplayHours(); delay(1000); /* DisplaySeconds(); DisplayMinutes(); DisplayHours();*/ } void DisplaySeconds() { for(int i = secSize - 1; i>= 0; i--) { int currentSecond = bitRead(sekundy, i); digitalWrite(ledPinsSec[i], currentSecond); } } void DisplayMinutes() { for(int i = minSize - 1; i>= 0; i--) { int currentMinute = bitRead(minuty, i); digitalWrite(ledPinsMin[i], currentMinute); } } void DisplayHours() { for(int i = hourSize - 1; i>= 0; i--) { int currentHour = bitRead(hodiny, i); digitalWrite(ledPinsHr[i], currentHour); } }


















