Kako podesiti pametne telefone i računare. Informativni portal

Opis Arduino jezika sa komentarima. Opis Arduino IDE

Nakon upoznavanja sa osnovnim elementima Arduina, kao i pisanja programa “ Zdravo svijete! Vrijeme je da se upoznate sa programskim jezikom.

Struktura jezika bazirana je prvenstveno na C/C++, tako da oni koji su prethodno programirali na ovom jeziku neće imati poteškoća u učenju Arduino programiranje. Drugi bi trebali naučiti osnovne informacije o kontrolnim naredbama, tipovima podataka i funkcijama.

Velik dio informacija sadržanih ovdje će biti kompatibilan sa bilo kojim C/C++ kursom, uzimajući u obzir razlike u tipovima podataka, kao i nekoliko specifičnih instrukcija u vezi sa programiranjem I/O porta.

Osnove

Nekoliko formalnih stvari, odnosno onih za koje svi znaju, ali ponekad zaborave...

IN Arduino IDE, kao u C/C++, morate biti svjesni velikih i malih slova. Ključne riječi, kao što su if, for su uvijek upisani mala slova. Svaka instrukcija završava sa ";". Tačka i zarez govori kompajleru koji dio da interpretira kao instrukciju.

Zagrade (..) se koriste za označavanje programskih blokova. Koristimo ih za ograničavanje funkcionalnih tijela (vidi dolje), petlji i uvjetnih naredbi.

Dobra je praksa dodavati komentare na sadržaj programa, to čini kod lakim za razumijevanje. Komentari u jednom redu počinju sa // (dvostruka kosa crta). Višelinijski komentari počinju sa /* i završiti sa */

Ako želimo da uključimo bilo koju biblioteku u naš program, koristimo naredbu include. Evo primjera povezivanja biblioteka:

#include // standardna biblioteka #include "svoya_biblioteka.h" // biblioteka u direktoriju projekta

Funkcije u Arduinu

Funkcija (potprogram) je poseban dio programi koji obavljaju određene operacije. Funkcije se koriste za pojednostavljenje glavnog programa i poboljšanje čitljivosti koda. Korisno je koristiti funkcije jer ih lako možemo koristiti u mnogim našim projektima.

Standardni kurs programiranja sadrži informacije o funkcijama koje će biti predstavljene u sljedećim člancima. U slučaju Arduina, funkcije će biti raspravljene na početku jer su čak najjednostavniji program mora imati dva posebne funkcije. Ovo je već spomenuto u prethodnim člancima, ali ovdje sistematiziramo ove informacije.

Deklaracija funkcije

Dijagram deklaracije funkcije izgleda ovako:

Upišite function_name(parametar) ( // upute za izvršenje (tijelo funkcije) return (/* povratna vrijednost*/); )

tip je ime bilo koga dostupan tip podaci o dati jezik programiranje. Navest ćemo popis tipova dostupnih prilikom programiranja Arduina u posebnom članku.

Nakon izvršenja, funkcija će vratiti vrijednost deklariranog tipa. Ako funkcija ne prihvati nikakvu povratnu vrijednost, tada će tip podataka biti “void”.

function_name omogućava jedinstvenu identifikaciju. Da bismo pozvali (pokrenuli) funkciju, dajemo joj ime.

parametar— parametar poziva funkcije. Parametri nisu obavezni, ali su često korisni. Ako napišemo funkciju koja nema argumente, napuštamo okrugle zagrade prazan.

Unutar zagrada “(…)” je stvarno tijelo funkcije ili instrukcije koju želimo izvršiti. Dat ćemo opis posebnih uputa u posebnom članku.

Sve funkcije koje vraćaju vrijednost završavaju povratnom naredbom iza koje slijedi povratna vrijednost. Samo funkcije deklarirane s null pokazivačem ("void") ne sadrže izraz return. Morate znati da izraz return prekida funkciju bez obzira na lokaciju.

Ispod su neki primjeri deklaracija funkcija.

Void f1() ( //tijelo funkcije) —————————————— int minus() ( // tijelo funkcije povratak (0); ) ——————————— ——— int plus(int a, int b) ( return (a+b); )

Kao što možete vidjeti iz primjera, deklaracija funkcije može imati mnogo oblika ovisno o vašim potrebama.

Preporučujemo vam da naučite i koristite funkcije prilikom pisanja sopstvenim programima. Vremenom, svaki programer akumulira svoju biblioteku funkcija "za sve prilike", što olakšava i brže pisanje novih programa.

Sada kada znamo kako napisati vlastitu funkciju, moramo naučiti kako je koristiti.

Pozivanje funkcije

Sve funkcije pišemo u jedan fajl/program. Postoji, naravno, i elegantnije rješenje, ali pokušat ćemo ga opisati sljedeći put.

Jednom kada deklarišemo funkciju, možemo je koristiti u drugim funkcijama s odgovarajućim imenom i svim potrebnim parametrima. Ispod su primjeri pozivanja funkcija koje smo dali gore:

F1(); plus(2,2); y=plus(1.5);

Kao što možete vidjeti u primjerima, poziv funkcije se obavlja specificiranjem njenog imena i potrebnog broja parametara. Važno je uvijek pozvati funkciju kako je deklarirana.

Ako je funkcija f1() deklarirana bez parametara, tada se prilikom pozivanja ne mogu specificirati parametri, tj. pozivanje f1(0) će biti netačno.

Funkcija plus(int a, int b) zahtijeva tačno dva parametra, tako da pozivanje s jednim ili tri parametra nije moguće.

Pozivanje y=plus(1,5) će izvršiti funkciju "plus" sa parametrima "1" i "5" i pohraniti povratnu vrijednost u varijablu "y".

setup() i loop() funkcije.

Sa znanjem o deklariranju i pozivanju funkcija, možemo prijeći na sistem Arduino funkcije: postaviti() I petlja(). Arduino IDE je potreban da deklarira ove dvije funkcije.

setup() je funkcija koja se poziva automatski kada se uključi napajanje ili se pritisne tipka RESET.

Kao što mu ime govori, koristi se za postavljanje početnih vrijednosti varijabli, deklaracija sistemskih ulaza i izlaza, koje su obično specificirane u početni parametri. Zbog svoje specifičnosti, ova funkcija ne vraća vrijednost i ne poziva se s parametrima. Ispravna deklaracija funkcije setup() je ispod:

Void setup () ( // tijelo funkcije - inicijalizacija sistema)

loop() je funkcija koja se poziva beskonačna petlja. Ova funkcija također ne vraća vrijednost i ne poziva se s parametrima. Ispravna deklaracija funkcije loop() prikazana je ispod:

Void loop () ( // tijelo funkcije - programski kod)

Kao što možete vidjeti, deklaracija funkcije loop() je identična deklaraciji funkcije setup(). Razlika je u izvođenju ovih funkcija od strane mikrokontrolera.

Sada ćemo analizirati sljedeći pseudokod:

Void setup () ( on_led1 (); //uključi led1 off_led1 (); //isključi led1) void loop () (on_led2 (); //uključi led2 off_led2 (); //isključi led2)

Postoje dvije instrukcije u funkciji setup(): prva uključuje LED1 povezanu na ploču (npr. pin 13), a druga isključuje LED1.

Funkcija loop() ima identične upute za uključivanje i isključivanje LED2 spojenog na ploču (npr. pin 12).

Kao rezultat pokretanja programa, LED1 će treptati jednom, dok će LED2 upaliti i ugasiti se sve dok je Arduino uključen.

Pritiskom na dugme RESET dovešće do toga da LED1 ponovo treperi i LED2 ponovo neprekidno treperi.

rezimirati:

  • Funkcije setup() i loop() su sistemske funkcije, koji mora biti definiran u svakom projektu. Čak iu situaciji kada ne upišemo nikakav kod u jednu od njih, i dalje moramo deklarirati ove dvije funkcije;
  • Funkcija setup() se izvršava jednom, loop() se izvršava kontinuirano;
  • Mi kreiramo vlastite funkcije u jednoj datoteci;
  • Naše funkcije možemo pozvati i iz setup() i loop(), i iz drugih funkcija;
  • Naše vlastite funkcije se mogu pozvati s parametrima i vratiti vrijednost;
  • Poziv funkcije se mora izvršiti u skladu sa njenom deklaracijom.

Ova lekcija pruža minimalno znanje potrebno za programiranje Arduino sistema u C. Možete ga samo pregledati i zatim koristiti kao pozadinske informacije. Za one koji su programirali u C na drugim sistemima, možete preskočiti članak.

Ponavljam da je ovo minimalna informacija. Opis pokazivača, klasa, string varijabli, itd. biće dato u narednim časovima. Ako vam nešto nije jasno, ne brinite. U budućim lekcijama će biti mnogo primjera i objašnjenja.

Struktura Arduino programa.

Struktura Arduino programa je prilično jednostavna i, u svom minimalnom obliku, sastoji se od dva dijela setup() i loop().

void setup() (

void loop() (

Funkcija setup() se izvršava jednom, kada se kontroler uključi ili resetuje. Obično se to dešava početne postavke varijable, registri. Funkcija mora biti prisutna u programu, čak i ako u njoj nema ničega.

Nakon što setup() završi, kontrola prelazi na funkciju loop(). Izvršava naredbe zapisane u njegovom tijelu (između vitičastih zagrada) u beskonačnoj petlji. Zapravo, ove komande izvode sve algoritamske radnje kontrolera.

Originalna pravila sintakse C jezika.

; tačka i zarez Izrazi mogu sadržavati koliko god želite razmaka i prijeloma reda. Kraj izraza je označen simbolom tačke i zareza.

z = x + y;
z= x
+ y ;

( ) vitičaste zagrade definirati blok funkcija ili izraza. Na primjer, u funkcijama setup() i loop().

/* … */ blok komentara, obavezno zatvorite.

/* ovo je blok komentara */

// komentar u jednom redu, nema potrebe za zatvaranjem, važi do kraja reda.

// ovo je jedan red komentara

Varijable i tipovi podataka.

Varijabla je ćelija ram memorija, u kojem se pohranjuju podaci. Program koristi varijable za skladištenje međuproračunskih podataka. Podaci se mogu koristiti za proračune različitim formatima, različite dubine bita, tako da varijable u jeziku C imaju sljedeće tipove.

Tip podataka Dubina, bitovi Raspon brojeva
boolean 8 tačno, lažno
char 8 -128 … 127
unsigned char 8 0 … 255
bajt 8 0 … 255
int 16 -32768 … 32767
unsigned int 16 0 … 65535
riječ 16 0 … 65535
dugo 32 -2147483648 … 2147483647
unsigned long 32 0 … 4294967295
kratko 16 -32768 … 32767
float 32 -3.4028235+38 … 3.4028235+38
duplo 32 -3.4028235+38 … 3.4028235+38

Tipovi podataka se biraju na osnovu zahtevane tačnosti proračuna, formata podataka itd. Na primjer, za brojač koji broji do 100, ne biste trebali birati dugačak tip. Uspjet će, ali operacija će trajati više memorije podaci i programi će zahtijevati više vremena.

Deklaracija varijabli.

Tip podataka je specificiran, praćen imenom varijable.

int x; // deklaracija varijable pod nazivom x tipa int
float widthBox; // deklaracija varijable pod nazivom widthBox tipa float

Sve varijable moraju biti deklarirane prije nego što se koriste.

Varijabla se može deklarirati bilo gdje u programu, ali to određuje koji programski blokovi je mogu koristiti. One. Varijable imaju opseg.

  • Varijable deklarirane na početku programa, prije funkcije void setup(), smatraju se globalnim i dostupne su bilo gdje u programu.
  • Lokalne varijable su deklarirane unutar funkcija ili blokova kao što je for petlja i mogu se koristiti samo unutar deklariranih blokova. Moguće je imati više varijabli sa istim imenom, ali različitim opsegom.

int mod; // varijabla dostupna svim funkcijama

void setup() (
// prazan blok, nisu potrebne početne postavke
}

void loop() (

dugo računanje; // varijabla count dostupna je samo u funkciji loop().

za (int i=0; i< 10;) // переменная i доступна только внутри цикла
{
i++;
}
}

Kada deklarišete varijablu, možete je postaviti početna vrijednost(inicijalizirati).

int x = 0; // varijabla x je deklarirana s početnom vrijednošću 0
char d = 'a'; // varijabla d je deklarirana sa početnom vrijednošću jednakom kodu znakova “a”

At aritmetičke operacije With različite vrste dolazi do podataka automatska konverzija tipovi podataka. Ali uvijek je bolje koristiti eksplicitnu konverziju.

int x; // int varijabla
char y; // char varijabla
int z; // int varijabla

z = x + (int)y; // varijabla y se eksplicitno pretvara u int

Aritmetičke operacije.

Operacije odnosa.

Logičke operacije.

Operacije na pokazivačima.

Bitne operacije.

& I
| ILI
^ EKSKLUZIVNO ILI
~ INVERZIJA
<< SHIFT LEFT
>> SHIFT DESNO

Mješovite operacije dodjele.

Izbor opcija, upravljanje programom.

IF operater provjerava uvjet u zagradama i izvršava sljedeći izraz ili blok kovrčave zagrade, ako je uslov tačan.

if (x == 5) // ako je x=5, tada se izvršava z=0
z=0;

if (x > 5) // ako je x >
( z=0; y=8; )

IF...ELSE omogućava vam da birate između dvije opcije.

if (x > 5) // ako je x > 5, tada se blok izvršava z=0, y=8;
{
z=0;
y=8;
}

{
z=0;
y=0;
}

ELSE IF– omogućava vam da napravite više izbora

if (x > 5) // ako je x > 5, tada se blok izvršava z=0, y=8;
{
z=0;
y=8;
}

else if (x > 20) // ako je x > 20, ovaj blok se izvršava
{
}

else // inače se ovaj blok izvršava
{
z=0;
y=0;
}

SWITCH CASE- više izbora. Omogućava vam da uporedite varijablu (u primjeru je to x) sa nekoliko konstanti (u primjeru 5 i 10) i izvršite blok u kojem je varijabla jednaka konstanti.

prekidač (x) (

slučaj 5:
// kod se izvršava ako je x = 5
break;

slučaj 10:
// kod se izvršava ako je x = 10
break;

zadano:
// kod se izvršava ako se nijedan ne podudara prethodna vrijednost
break;
}

FOR Loop. Dizajn vam omogućava da organizirate petlje sa datim brojem iteracija. Sintaksa izgleda ovako:

for (radnja prije početka petlje;
uslov nastavka petlje;
radnja na kraju svake iteracije) (

// kod tijela petlje

Primjer petlje od 100 iteracija.

za (i=0; i< 100; i++) // начальное значение 0, конечное 99, шаг 1

{
suma = suma + I;
}

WHILE petlja. Operator vam omogućava da organizirate petlje s konstrukcijom:

dok (izraz)
{
// kod tijela petlje
}

Petlja se izvodi sve dok je izraz u zagradama istinit. Primjer petlje za 10 iteracija.

x = 0;
dok (x< 10)
{
// kod tijela petlje
x++;
}

DO WHILE– petlja sa uslovom na izlazu.

uradi
{
// kod tijela petlje
) while (izraz);

Petlja se izvodi sve dok je izraz istinit.
BREAK– operator izlaza iz petlje. Koristi se za prekid izvršenja for loops, dok, radi dok.

x = 0;
dok (x< 10)
{
ako (z > 20) prekid; // ako je z > 20, onda izlazimo iz petlje
// kod tijela petlje
x++;
}

IDI– operator bezuslovnog prelaza.

gotometka1; // idi na metka1
………………
metka1:

NASTAVI- preskakanje naredbi do kraja tijela petlje.

x = 0;
dok (x< 10)
{
// kod tijela petlje
ako (z > 20) nastavi; // ako je z > 20, onda se vraćamo na početak tijela petlje
// kod tijela petlje
x++;
}

Nizovi.

Niz je memorijska oblast u kojoj je nekoliko varijabli pohranjeno uzastopno.

Niz je deklarisan ovako:

int ages; // niz od 10 varijable tipa int

plutajuća težina // niz od 100 float varijabli

Kada su deklarisani, nizovi se mogu inicijalizirati:

int starosti = ( 23, 54, 34, 24, 45, 56, 23, 23, 27, 28);

Varijablama niza se pristupa ovako:

x = godine; // x je dodijeljena vrijednost iz 5. elementa niza.
godine = 32; // 9. element niza je postavljen na 32

Numeracija elemenata niza je uvijek od nule.

Funkcije.

Funkcije vam omogućavaju da izvršite iste radnje s različitim podacima. Funkcija ima:

  • ime kojim se zove;
  • argumenti – podaci koje funkcija koristi za izračunavanje;
  • tip podataka koji vraća funkcija.

Opisuje korisnički definiranu funkciju izvan funkcija setup() i loop().

void setup() (
// kod se izvršava jednom kada se program pokrene
}

void loop() (
// glavni kod, izvršava se u petlji
}

// najava prilagođena funkcija sa imenom functionName
upišite ime funkcije(tip argument1, tip argument1, …, tip argument)
{
// tijelo funkcije
return();
}

Primjer funkcije koja izračunava zbir kvadrata dva argumenta.

int sumQwadr(int x, int y)
{
return(x* x + y*y);
}

Poziv funkcije ide ovako:

d= 2; b= 3;
z= suma Qwadr(d, b); // z će biti zbir kvadrata varijabli d i b

Funkcije mogu biti ugrađene, prilagođene ili plug-in.

Vrlo kratko, ali ovi podaci bi trebali biti dovoljni za početak pisanja C programa za Arduino sisteme.

Poslednja stvar koju želim da vam kažem u ovoj lekciji je kako je uobičajeno da se programi formatiraju u C. Mislim da ako čitate ovu lekciju po prvi put, trebalo bi da preskočite ovaj deo i vratite se na njega kasnije, kada budete imali nešto za formatiranje.

glavni cilj vanjski dizajn programa je da se poboljša čitljivost programa i smanji broj formalnih grešaka. Stoga, da biste postigli ovaj cilj, možete sigurno prekršiti sve preporuke.

Imena na C jeziku.

Imena koja predstavljaju tipove podataka moraju se pisati u mješovitim velikim slovima. Prvo slovo imena mora biti veliko (velika slova).

Signal, TimeCount

Promjenjive moraju biti napisane u mješovitim nazivima, s prvim malim slovom (mala slova).

Arduino je razvojna ploča spremna za korištenje i vrlo jednostavan programski jezik koji olakšava početak rada s mikrokontrolerima po cijenu veličine i brzine programa. Nedavno je Atmel dodao podršku za Arduino bootloader AVR Studio, to jest, možete pisati i učitavati programe napisane na C, C++ ili Assembleru bez programatora. Štaviše, možete pisati kod u jeziku Processing/Wiring u AVR Studio.
Preporučujem da počnete čitati članak s ažuriranjem na kraju!
U ovom članku predlažemo upute korak po korak o instaliranju Arduino softvera za programiranje koristeći AVR Studio. Uzeli smo kao osnovu pregled proširenja AVR Studio sa stranice easyelectronics.ru. Pokrenut ćemo sve primjere na našoj ploči.

Instalacija Arduino IDE

Koristimo Arduino verziju 1.5.2. Možete ga preuzeti na službenoj web stranici. Najnoviju verziju(1.6.2-r2 u vrijeme pisanja) iz nekog razloga ne radi sa Atmega8 mikrokontrolerom.
Preuzet ćete zip arhivu sa već postavljenim okruženjem. Ostaje samo da ga raspakirate u direktorij programa.

Instalacija Atmel Studio

UPD

Vidim da je tema popularna i želim da razjasnim nekoliko stvari.
Postoje tri načina na koja sam pokušao da programiram Arduino kompatibilnu ploču u C:

  1. Pišite direktno u Arduino IDE u C. Morate razumjeti da Processing/Wiring nije jezik, već jednostavno skup makroa i biblioteka. Kada pišete u njemu, on gleda u njegova zaglavlja, pretvara vaš ljudski čitljiv kod u C i zatim kompajlira sa standardnim AVR GCC kompajlerom. Ako napišete kod u C, onda on neće pristupiti svojim libovima i odmah će kompajlirati sve kako treba, ALI!... u isto vrijeme, linker će dodati vašem projektu šta god želi. Prednost je što vam ne treba ništa osim Arduino IDE. Nedostatak je magija koja je skrivena od programera. Ova metoda se često koristi u slučajevima kada je potrebno implementirati funkciju koju naši talijanski prijatelji nisu predvidjeli na svom jeziku.
  2. Metoda predložena u ovom članku (u stvari, najčudnija, jer kombinira sve nedostatke). Ideološki, ovo proširenje je potrebno da bi se programirao u Processing/Wiring i koristio Atmel Studio kao interfejs. Postoji i plaćena funkcionalnost koja vam omogućava da otklonite greške u kodu, ali ja to nisam isprobao. Dakle, u suštini, prilikom programiranja, sve se dešava isto kao u prvoj opciji, ali radite u drugom IDE-u. Istovremeno, sa stanovišta rezultata, dobijate istu stvar. Ako ste programirali Arduino i odlučili to učiniti u C-u, slobodno pišite direktno u Arduino IDE. Ako vam se ne sviđa sučelje, možete koristiti normalan editor (preporučujem Sublime Text). Ako radite u Atnel Studiju i želite da flešujete svoju ploču direktno iz njenog interfejsa ili upišete Processing/Wiring u nju (odjednom!), onda je ovaj dodatak za vas. Inače, studio radi samo pod Windowsom, odnosno metoda nije za svakoga. Napisao sam ovaj članak samo zato što sam pronašao novu metodu za sebe, ali mi se ne sviđa.
  3. Treća metoda je, čini mi se, najbolja za naprednog korisnika. U početku se sve dešava kao i obično - napišete kod, prevedete ga i dobijete heksadecimalni fajl. Zatim, sjetite se da imate uobičajenu ploču za otklanjanje grešaka s bootloaderom u rukama, preuzmite uslužni program koji može pristupiti ovom pokretačkom programu i prenijeti vaš kod u memoriju. Već smo objavili upute korak po korak. U ovom slučaju, programer dobija maksimalnu kontrolu nad svim funkcijama, ali problemi mogu nastati zbog upotrebe pokretača treće strane.

Želio bih otkriti još jednu stvar koja se događa u Arduinu. Šta god da radite, Arduino IDE će definitivno uključiti periferne uređaje. Na primjer, pokrenut će tajmere. A ako želite da radite s njima u C-u, možda ćete otkriti da ne rade kako ste očekivali. A ovo bi moglo postati pravi problem. A takvih je primjera mnogo, odnosno mnogo je potencijalnih grabulja, štaka i bubica.
Ako jednostavno učitate heksadecimalni fajl, problemi mogu nastati samo zbog pokretača. Do sada sam pronašao samo jedan - nakon što je bootloader završen, UART ostaje uključen. Ako pišete kroz Arduino IDE, onda će on umetnuti u vaš kod da ga onemogući i ko zna šta još. Ako samo želite da pokrenete svoj hex, onda nećete dobiti kontrolu nad UART nogama. Morat ćete ručno dodati UART onemogućavanje svom projektu. Ovaj artefakt i primjeri koda su detaljno opisani u .
Pa, u zaključku. Većina Arduino kompatibilnih ploča ima konektor za ISP programator. Ako kupite ovaj programator od Kineza za 3-4 dolara, brzo ćete zaboraviti na sve ove probleme.

Bit će nam drago ako podržite naš resurs i posjetite našu trgovinu proizvoda.

U životu Arduino programera prije ili kasnije dođe vrijeme kada standardno razvojno okruženje postane pretrpano. Ako skice više nemaju dovoljno memorije, treba vam teško realno vrijeme i rad s prekidima ili jednostavno želite biti bliže hardveru, onda je vrijeme da pređete na C. Iskusni inženjeri elektronike će se prezrivo namrštiti na pomen Arduina i poslati početnik u radionici za lemilicu. Možda ovo nije najviše loš savjet, ali to još nećemo pratiti. Ako odbacimo Arduino IDE i jezik ožičenja/procesiranja, ostaje nam odlična ploča za otklanjanje grešaka, već opremljena svime potrebnim za rad mikrokontrolera. I, što je još važnije, bootloader je već ugrađen u memoriju kontrolera, što vam omogućava da učitate firmver bez upotrebe programatora.

Za programiranje u C, potreban nam je AVR GCC Toolchain.

Takođe će nam trebati instaliran Arduino IDE, jer... sadrži uslužni program avrdude, koji je potreban za preuzimanje firmvera na kontroler. CrossPack također sadrži avrdude, ali verzija koja dolazi s njim ne radi sa Arduinom.

Nakon što je sve instalirano, kreirajmo naš prvi projekat. Za početak, hajde da napišemo Makefile. To će nam omogućiti da izbjegnemo ručno unošenje dugih komandi svaki put kada kompajliramo i učitavamo firmver.

#Kontroler instaliran na ploči. Može biti drugačije, na primjer atmega328 DEVICE = atmega168 #Frekvencija takta 16 MHz SAT = 16000000 #Avrdude naredba za pokretanje. Treba ga kopirati iz Arduino IDE. AVRDUDE = /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -carduino -P/dev/tty.usbserial-A600dAAQ -b19200 -D -p atmega168 OBJEKTI = main.o COMPILE = avr-gcc -Wall -Os -DF_CPU=$(SAT) -mmcu=$(UREĐAJ) sve: glavno .hex .c.o: $(COMPILE) -c $< -o $@ .S.o: $(COMPILE) -x assembler-with-cpp -c $< -o $@ .c.s: $(COMPILE) -S $< -o $@ flash: all $(AVRDUDE) -U flash:w:main.hex:i clean: rm -f main.hex main.elf $(OBJECTS) main.elf: $(OBJECTS) $(COMPILE) -o main.elf $(OBJECTS) main.hex: main.elf rm -f main.hex avr-objcopy -j .text -j .data -O ihex main.elf main.hex avr-size --format=avr --mcu=$(DEVICE) main.elf

U ovom fajlu treba da unesemo našu komandu za pokretanje avrdude. On različiti sistemi izgledat će drugačije. Da biste saznali svoju opciju, pokrenite Arduino IDE i označite okvir „Prikaži detaljan izlaz tokom uploada“ u postavkama.

Sada učitavamo Arduino bilo koji skicirajte i pogledajte poruke prikazane na dnu prozora. Tamo nalazimo poziv avrdude, kopiramo sve osim parametra -Uflash i zalijepimo ga u Makefile nakon “AVRDUDE = “.


Kratka napomena: svo uvlačenje u Makefile-u se vrši pomoću znakova tab (taster). Ako tvoj uređivač teksta zamijeni ove znakove razmacima, naredba make će odbiti da izgradi projekat.

Sada kreirajmo fajl main.c- stvarni tekst našeg programa, u kojem tradicionalno treperimo LED diodom.

#include #include #define LED_PIN 5 int main() (DDRB |= 1<< LED_PIN; while(1) { PORTB |= 1 << LED_PIN; _delay_ms(1000); PORTB &= ~(1 << LED_PIN); _delay_ms(1000); } return 0; }

Naš projekat je spreman. Otvorimo konzolu u direktoriju našeg projekta i unesite naredbu "make":


Kao što vidite, veličina rezultirajućeg firmvera je samo 180 bajtova. Slična Arduino skica zauzima 1116 bajtova u memoriji kontrolera.

Sada se vratimo na konzolu i unesite "make flash" da učitate kompajlirani fajl u kontroler:


Ako je preuzimanje završeno bez grešaka, LED dioda spojena na pin 13 ploče će treptati radosno. Ponekad avrdude ne može pronaći ploču ili otpadne zbog isteka - u ovom slučaju može pomoći uvrtanje USB kabela. Također, da biste izbjegli sukobe u pristupu ploči, ne zaboravite zatvoriti Arduino IDE prije naredbe “make flash”.

Možda će mnoge stvari opisane u ovom članku izgledati očigledne iskusnim programerima. Pokušao sam da opišem proces na jeziku koji je što razumljiviji za početnika Arduino korisnika i da na jednom mjestu prikupim informacije koje sam uspio dobiti iz različitih izvora i empirijski provjeriti. Možda će ovaj članak nekome uštedjeti par sati vremena.

Sretno u savladavanju mikrokontrolera!

Ovaj simulator najbolje radi na Chrome pretraživaču
Pogledajmo izbliza Arduino.

Arduino nije veliki kompjuter koji se može spojiti na vanjska kola. Arduino Uno koristi Atmega 328P
Ovo je najveći čip na ploči. Ovaj čip izvršava programe koji su pohranjeni u njegovoj memoriji. Program možete preuzeti preko USB-a koristeći Arduino IDE. USB port takođe obezbeđuje napajanje arduinu.

Postoji poseban konektor za napajanje. Ploča ima dva pina označena sa 5v i 3.3v, koji su potrebni za napajanje raznih uređaja. Naći ćete i pinove označene GND, ovo su pinovi za uzemljenje (uzemljenje je 0V). Arduino platforma također ima 14 digitalnih pinova, označenih od 0 do 13, koji se povezuju na vanjske čvorove i imaju dva stanja, visoko ili nisko (uključeno ili isključeno). Ovi kontakti mogu raditi kao izlazi ili kao ulazi, tj. oni mogu ili prenositi neke podatke i kontrolirati vanjske uređaje, ili primati podatke od uređaja. Sljedeći pinovi na ploči imaju oznaku A0-A5. To su analogni ulazi koji mogu primati podatke od različitih senzora. Ovo je posebno zgodno kada trebate izmjeriti određeni raspon, kao što je temperatura. Analogni ulazi imaju dodatne funkcije koje se mogu zasebno omogućiti.

Kako koristiti razvojnu ploču.

Matična ploča je potrebna za privremeno spajanje dijelova, provjerite kako uređaj radi, prije nego što sve zalemite.
Svi sljedeći primjeri sastavljeni su na matičnoj ploči tako da možete brzo napraviti promjene u krugu i ponovno koristiti dijelove bez mučenja s lemljenjem.

Matična ploča ima nizove rupa u koje možete umetnuti dijelove i žice. Neke od ovih rupa su međusobno električno povezane.

Dva gornja i donja reda povezana su u redove duž cijele ploče. Ovi redovi se koriste za napajanje strujnog kola. Može biti 5V ili 3.3V, ali u svakom slučaju, prva stvar koju trebate učiniti je spojiti 5V i GND na matičnu ploču kao što je prikazano na slici. Ponekad se ove veze u redovima mogu prekinuti na sredini ploče, a onda ako je potrebno, možete ih povezati kao što je prikazano na slici.








Preostale rupe, koje se nalaze na sredini ploče, grupisane su u grupe od pet rupa. Koriste se za spajanje dijelova kola.


Prva stvar koju ćemo povezati sa našim mikrokontrolerom je LED. Šema električnog povezivanja je prikazana na slici.

Zašto je potreban otpornik u kolu? U ovom slučaju, ograničava struju koja prolazi kroz LED. Svaka LED dioda je dizajnirana za određenu struju, a ako je ova struja veća, LED će otkazati. Možete saznati koju vrijednost otpornik treba biti koristeći Ohmov zakon. Za one koji ne znaju ili su zaboravili, Ohmov zakon kaže da postoji linearna veza između struje i napona. Odnosno, što više napona damo na otpornik, to će više struje teći kroz njega.
V=I*R
Gdje V- napon na otporniku
I- struja kroz otpornik
R- otpor koji treba pronaći.
Prvo, moramo saznati napon na otporniku. Većina LED dioda od 3 mm ili 5 mm koje ćete koristiti ima radni napon od 3 V. To znači da moramo ugasiti 5-3 = 2V na otporniku.

Zatim ćemo izračunati struju koja prolazi kroz otpornik.
Većina LED dioda od 3 mm i 5 mm sija punom jačinom pri 20 mA. Struja veća od ove može ih onesposobiti, dok će struja manjeg intenziteta smanjiti njihov sjaj bez nanošenja štete.

Dakle, želimo spojiti LED na 5V kolo tako da nosi struju od 20mA. Budući da su svi dijelovi uključeni u jedno kolo, otpornik će također imati struju od 20mA.
Dobijamo
2V = 20 mA * R
2V = 0,02A * R
R = 100 Ohm

100 Ohma je minimalni otpor, bolje je koristiti malo više, jer LED diode imaju neke varijacije u karakteristikama.
U ovom primjeru se koristi otpornik od 220 oma. Samo zato što ih autor ima puno :wink: .

Umetnite LED u rupe na sredini ploče tako da je njen dugi vod spojen na jedan od vodova otpornika. Povežite drugi kraj otpornika na 5V, a drugi vod LED diode spojite na GND. LED bi trebao upaliti.

Imajte na umu da postoji razlika u načinu povezivanja LED dioda. Struja teče od dužeg terminala ka kraćem. Na dijagramu možete zamisliti da struja teče u smjeru u kojem je trokut usmjeren. Pokušajte okrenuti LED diodu naopako i vidjet ćete da neće upaliti.

Ali način na koji spajate otpornik nema nikakve razlike. Možete ga okrenuti ili pokušati spojiti na drugi pin LED diode, to neće utjecati na rad kruga. I dalje će ograničiti struju kroz LED.

Anatomija Arduino skice.

Programi za Arduino se nazivaju sketch. Sastoje se od dvije glavne funkcije. Funkcija postaviti i funkciju petlja
Unutar ove funkcije postavljate sva osnovna podešavanja. Koji pinovi će raditi kao ulaz ili izlaz, koje biblioteke za povezivanje, inicijaliziraju varijable. Funkcija Postaviti() pokreće se samo jednom tokom skice, kada počinje izvršavanje programa.
ovo je glavna funkcija koja se izvršava nakon toga postaviti(). U stvari, to je sam program. Ova funkcija će raditi neograničeno dok ne isključite napajanje.

Arduino treperi LED



U ovom primjeru spojit ćemo LED kolo na jedan od Arduino digitalnih pinova i uključiti ga i isključiti pomoću programa, a naučit ćete i nekoliko korisnih funkcija.

Ova funkcija se koristi u postaviti() dio programa i služi za inicijalizaciju pinova koje ćete koristiti kao ulaz (INPUT) ili izlaz (IZLAZ). Nećete moći čitati ili pisati podatke sa pina dok ga ne postavite na odgovarajući pinMode. Ova funkcija ima dva argumenta: pinNumber je pin broj koji ćete koristiti.

Mode-postavlja kako će pin raditi. Na ulazu (INPUT) ili izlaz (IZLAZ). Da bismo upalili LED, moramo dati signal OD Arduino. Da bismo to učinili, konfiguriramo izlazni pin.
- ova funkcija se koristi za postavljanje stanja (država) pina (pinBroj). Postoje dva glavna stanja (u stvari 3), jedno jeste HIGH, biće 5V na pinu, to je nešto drugo Nisko i pin će biti 0v. To znači da za upalu LED-a moramo pin povezan sa LED-om postaviti na visok nivo HIGH.

Kašnjenje. Služi za odlaganje rada programa za period naveden u msec.
Ispod je kod koji čini da LED treperi.
//LED Blink int ledPin = 7;//Arduino pin na koji je LED spojen void setup() ( pinMode(ledPin, OUTPUT);// postavljanje pina kao OUTPUT) void loop() ( digitalWrite(ledPin, HIGH) ;// uključite LED kašnjenje (1000);// kašnjenje 1000 ms (1 sek) digitalWrite(ledPin, LOW);//Isključite LED kašnjenje (1000);//sačekajte 1 sekundu)

Mala objašnjenja o kodu.
Redovi koji počinju sa "//" su komentari i Arduino ih ignoriše.
Sve naredbe završavaju tačkom i zarezom; ako ih zaboravite, dobit ćete poruku o grešci.

ledPin je varijabla. Varijable se koriste u programima za pohranjivanje vrijednosti. U ovom primjeru, varijabla ledPin vrijednost je dodijeljena 7, ovo je Arduino pin broj. Kada Arduino program naiđe na liniju sa varijablom ledPin, koristit će vrijednost koju smo ranije naveli.
Dakle snimajte pinMode (ledPin, OUTPUT) slično snimanju pinMode(7, OUTPUT).
Ali u prvom slučaju, trebate samo promijeniti varijablu i ona će se mijenjati u svakoj liniji u kojoj se koristi, au drugom slučaju, da biste promijenili varijablu, morat ćete unijeti promjene ručno u svakoj naredbi.

Prvi red označava tip varijable. Kada programirate Arduino, važno je uvijek deklarirati tip varijabli. Za sada je dovoljno da to znate INT objavljuje negativne i pozitivne brojeve.
Ispod je simulacija skice. Kliknite na start da vidite krug u akciji.

Kao što se očekivalo, LED se gasi i ponovo uključuje nakon jedne sekunde. Pokušajte promijeniti odgodu da vidite kako funkcionira.

Kontrola više LED dioda.

U ovom primjeru naučit ćete kako kontrolirati više LED dioda. Da biste to učinili, instalirajte još 3 LED diode na ploču i povežite ih na otpornike i Arduino pinove kao što je prikazano ispod.

Da biste palili i gasili LED diode jednu po jednu, morate napisati program sličan ovome:
//Multi LED Blink int led1Pin = 4; int led2Pin = 5; int led3Pin = 6; int led4Pin = 7; void setup() ( //postavimo pinove kao OUTPUT pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(led3Pin, OUTPUT); pinMode(led4Pin, OUTPUT); ) void loop() ( digitalWrite(led1Pin, OUTPUT); );//uključite LED delay(1000);//kašnjenje 1 s digitalWrite(led1Pin, LOW);//isključite LED kašnjenje (1000);//kašnjenje 1 s //učinite isto za ostala 3 LED diode digitalWrite(led2Pin , HIGH);//upali LED odgodu (1000);//kašnjenje 1 sec digitalWrite(led2Pin, LOW);//ugasi LED kašnjenje (1000);//kašnjenje 1 sekundu digitalWrite(led3Pin, HIGH); );//upali LED kašnjenje (1000);// odgoda 1 sec digitalWrite(led3Pin, LOW);//ugasi LED kašnjenje (1000);//kašnjenje 1 sec digitalWrite(led4Pin, HIGH);//uključite LED kašnjenje (1000);// kašnjenje 1 sekunda digitalWrite(led4Pin, LOW);//ugasi LED kašnjenje (1000); // kašnjenje 1 sek.)

Ovaj program će raditi odlično, ali nije najracionalnije rješenje. Kod treba promijeniti. Da bi program radio iznova i iznova, koristićemo konstrukciju koja se zove .
Petlje su korisne kada trebate ponoviti istu radnju nekoliko puta. U kodu iznad ponavljamo redove

DigitalWrite(led4Pin, HIGH); kašnjenje (1000); digitalWrite(led4Pin, LOW); kašnjenje (1000);
kompletan kod skice u prilogu (preuzimanja: 1187)

Podešavanje svjetline LED dioda

Ponekad ćete morati promijeniti svjetlinu LED dioda u programu. Ovo se može uraditi pomoću naredbe analogWrite() . Ova komanda uključuje i isključuje LED tako brzo da oko ne može vidjeti treperenje. Ako je LED dioda uključena pola vremena i isključena pola vremena, vizualno će se činiti da svijetli na pola svoje svjetline. To se zove modulacija širine impulsa (PWM ili PWM na engleskom). Podložak se koristi prilično često, jer se može koristiti za kontrolu "analogne" komponente pomoću digitalnog koda. Nisu svi Arduino pinovi prikladni za ove svrhe. Samo oni zaključci blizu kojih se izvlači takva oznaka" ~ ". Vidjet ćete ga pored pinova 3,5,6,9,10,11.
Povežite jednu od vaših LED dioda na jedan od PWM pinova (za autora ovo je pin 9). Sada pokrenite LED trepćuću skicu, ali prvo promijenite naredbu digitalWrite() on analogWrite(). analogWrite() ima dva argumenta: prvi je pin broj, a drugi PWM vrijednost (0-255), u odnosu na LED diode to će biti njihova svjetlina, a za elektromotore brzina rotacije. Ispod je primjer koda za različite svjetline LED dioda.
//Promijenite svjetlinu LED-a int ledPin = 9;//LED je spojen na ovaj pin void setup() ( pinMode(ledPin, OUTPUT);// inicijaliziranje pina na izlaz ) void loop() ( analogWrite( ledPin, 255);// puna svjetlina (255/255 = 1) kašnjenje (1000);//pauza 1 sec digitalWrite(ledPin, LOW);//isključi LED kašnjenje (1000);//pauza 1 s analogWrite( ledPin, 191);//osvjetljenje za 3/4 (191/255 ~= 0,75) kašnjenje (1000);//pauza 1 sek digitalWrite(ledPin, LOW);//isključite LED odgodu (1000);// pauza 1 sekunda analogWrite(ledPin, 127); //pola svjetline (127/255 ~= 0,5) kašnjenje (1000);//pauza 1 sekunda digitalWrite(ledPin, LOW);//isključi LED kašnjenje (1000);/ /pauza 1 sekunda analogWrite(ledPin, 63); //četvrtina svjetline (63/255 ~= 0,25) kašnjenje (1000);//pauza 1 sekunda digitalWrite(ledPin, LOW);//isključite LED kašnjenje (1000) ;//pauza 1 sek)

Pokušajte promijeniti PWM vrijednost u naredbi analogWrite() da vidite kako ovo utiče na osvetljenost.
Zatim ćete naučiti kako glatko podesiti svjetlinu od pune do nule. Možete, naravno, kopirati dio koda 255 puta
analogWrite(ledPin, svjetlina); kašnjenje(5);//kratko kašnjenje svjetlina = svjetlina + 1;
Ali, razumete, ovo neće biti praktično. Najbolji način da to učinite je korištenje FOR petlje koju smo ranije koristili.
IN sljedeći primjer koriste se dva ciklusa, jedan za smanjenje svjetline sa 255 na 0
for (int lightness=0;brightness=0;brightness--)( analogWrite(ledPin,brightness); kašnjenje(5); )
kašnjenje (5) koristi se za usporavanje brzine smanjivanja svjetline 5*256=1280ms=1.28s)
Prvi red koristi " svjetlina-" da bi se vrijednost svjetline smanjila za 1 svaki put kada se petlja ponavlja. Imajte na umu da će petlja raditi do osvetljenost >=0.Zamjena znaka > na znak >= uključili smo 0 u raspon svjetline. Ova skica je modelirana u nastavku. //glatko promijenite svjetlinu int ledPin = 9;//LED je spojen na ovaj pin void setup() ( pinMode(ledPin, OUTPUT);// inicijalizacija izlaznog pina) void loop() ( //glatko povećajte svjetlina (0 do 255 ) za (int lightness=0;brightness=0;brightness--)( analogWrite(ledPin,brightness); delay(5); ) delay(1000);//sačekajte 1 sekundu //glatko smanjite svjetlinu (255 do 0) za (int lightness=255;svjetlina>=0;svjetlina--)( analogWrite(ledPin,svjetlina); kašnjenje(5); ) kašnjenje (1000);//sačekajte 1 sek ) )
Nije baš vidljivo, ali ideja je jasna.

RGB LED i Arduino

RGB LED je zapravo tri LED diode različitih boja u jednom pakovanju.

Uključujući različite LED diode različite svjetline, možete kombinirati i dobiti različite boje. Za Arduino, gdje je broj nivoa svjetline 256, dobićete 256^3=16581375 mogućih boja. U stvarnosti će ih, naravno, biti manje.
LED dioda koju ćemo koristiti je obična katoda. One. sve tri LED diode su strukturno povezane katodama na jedan terminal. Ovaj pin ćemo spojiti na GND pin. Preostali pinovi, preko ograničavajućih otpornika, moraju biti povezani na PWM pinove. Autor je koristio pinove 9-11. Na taj način će biti moguće kontrolisati svaku LED diodu zasebno. Prva skica pokazuje kako uključiti svaku LED diodu pojedinačno.



//RGB LED - test //pin konekcije int red = 9; int zeleno = 10; int plava = 11; void setup())( pinMode(crveno, OUTPUT); pinMode(plavo, OUTPUT); pinMode(zeleno, OUTPUT); ) void loop())( //uključivanje/isključivanje crvene LED digitalWrite(crveno, HIGH); delay(500) ; digitalWrite(crveno, LOW); delay(500); //uključuje/isključuje zelenu LED digitalWrite(zeleno, HIGH); delay(500); digitalWrite(zeleno, LOW); delay(500); // uključivanje/isključivanje plave LED diode digitalWrite(blue, HIGH); delay(500); digitalWrite(blue, LOW); delay(500); )

Sljedeći primjer koristi naredbe analogWrite() i da dobijete različite nasumične vrijednosti svjetline za LED diode. Vidjet ćete kako se mijenjaju različite boje nasumično.
//RGB LED - nasumične boje //pin konekcije int red = 9; int zeleno = 10; int plava = 11; void setup())( pinMode(crveno, OUTPUT); pinMode(plavo, OUTPUT); pinMode(zeleno, OUTPUT); ) void loop())( //odaberite nasumične boje analogWrite(red, random(256)); analogWrite(plavo, random(256)); analogWrite(zeleno, random(256)); kašnjenje (1000);//sačekajte jednu sekundu)

Slučajno(256)-vraća se slučajni broj u rasponu od 0 do 255.
U prilogu je skica koja će demonstrirati glatki prelazi boje od crvene do zelene, zatim do plave, crvene, zelene itd. (preuzimanja: 326)
Primjer skice funkcionira, ali ima puno duplikata koda. Možete pojednostaviti kod tako što ćete napisati svoj pomoćna funkcija, koji će se glatko mijenjati iz jedne boje u drugu.
Evo kako će to izgledati: (preuzimanja: 365)
Pogledajmo definiciju funkcije dio po dio. Funkcija se poziva fader i ima dva argumenta. Svaki argument je odvojen zarezom i ima tip deklariran u prvom redu definicije funkcije: void fader (int color1, int color2). Vidite da su oba argumenta deklarirana kao int, i daju im se imena boja1 I boja2 kao varijable uslova za definiranje funkcije. Void znači da funkcija ne vraća nikakve vrijednosti, već samo izvršava naredbe. Ako biste morali napisati funkciju koja vraća rezultat množenja, to bi izgledalo ovako:
int množitelj(int broj1, int broj2)(int proizvod = broj1*broj2; vrati proizvod; )
Obratite pažnju na to kako smo deklarirali Type int umjesto toga kao tip povratka
void.
Unutar funkcije postoje komande koje ste već koristili u prethodnoj skici, samo su brojevi pinova zamijenjeni sa boja1 I boja2. Funkcija se poziva fader, njegovi argumenti se izračunavaju kao boja1 = crvena I boja2 = zelena. Arhiva sadrži kompletnu skicu koristeći funkcije (preuzimanja: 272)

Dugme

Sljedeća skica će koristiti dugme sa normalno otvorenim kontaktima, bez zabravljivanja.


To znači da dok dugme nije pritisnuto, struja ne teče kroz njega, a nakon otpuštanja dugme se vraća na početni položaj.
Pored dugmeta, krug koristi otpornik. IN u ovom slučaju ne ograničava struju, već “povlači” dugme na 0V (GND). One. sve dok se ne pritisne dugme na Arduino pinu na koji je povezan, hoće nizak nivo. Otpornik koji se koristi u kolu je 10 kOhm.


//odredimo kada je dugme pritisnuto int buttonPin = 7; void setup())( pinMode(buttonPin, INPUT);//inicijaliziraj pin na ulaz Serial.begin(9600);//inicijaliziraj serijski port) void loop())( if (digitalRead(buttonPin)==HIGH)(//ako je dugme pritisnuto Serial.println("pritisnuto"); // ispis "pritisnuto" ) else ( Serial.println("nepritisnuto" ); // inače "nepritisnuto" ) )
Postoji nekoliko novih komandi u ovoj skici.
-ova komanda uzima vrijednost High ( visoki nivo) i nizak (nizak nivo), izlaz koji provjeravamo. Ovaj izlaz se prvo mora konfigurirati kao ulaz u setup().
; //where buttonPin je pin broj na koji je dugme povezano.
Serijski port omogućava Arduinu da šalje poruke računaru dok sam kontroler izvršava program. Ovo je korisno za otklanjanje grešaka u programu, slanje poruka drugim uređajima ili aplikacijama. Da biste omogućili prijenos podataka preko serijskog porta (koji se također naziva UART ili USART), morate ga inicijalizirati u setup()

Serial.begin() ima samo jedan argument - ovo je brzina prijenosa podataka između Arduina i računala.
Skica koristi naredbu za prikaz poruke na ekranu u Arduino IDE (Alati >> Serijski monitor).
- dizajn vam omogućava da kontrolišete napredak izvršavanja programa kombinovanjem nekoliko provera na jednom mestu.
Ako digitalRead vrati HIGH, tada se na monitoru prikazuje riječ "pritisnuto". U suprotnom (u suprotnom) na monitoru će biti prikazana riječ „pušteno“. Sada možete pokušati uključiti i isključiti LED pritiskom na dugme.
//detekcija pritiska na dugme sa LED izlazom int buttonPin = 7; int ledPin = 8; void setup())( pinMode(buttonPin, INPUT);//ovaj put ćemo postaviti pin gumba kao INPUT pinMode(ledPin, OUTPUT); Serial.begin(9600); ) void loop())( if (digitalRead(buttonPin) )= =HIGH)( digitalWrite(ledPin,HIGH); Serial.println("pritisnuto"); ) else ( digitalWrite(ledPin,LOW); Serial.println("nepritisnuto"); ) )

Analogni ulaz.

analogRead omogućava vam čitanje podataka sa jednog od analognih pinova Arduino i prikazuje vrijednost u rasponu od 0 (0V) do 1023 (5V). Ako je napon na analognom ulazu 2,5V, tada će se ispisati 2,5 / 5 * 1023 = 512
analogRead ima samo jedan argument - ovo je broj analogni ulaz(A0-A5). Sljedeća skica prikazuje kod za očitavanje napona s potenciometra. Da biste to učinili, povežite se varijabilni otpornik, najudaljeniji pinovi idu na 5V i GND pinove, a srednji pin ide na A0 ulaz.

Pokrenite sljedeći kod i pogledajte na serijskom monitoru kako se vrijednosti mijenjaju ovisno o rotaciji gumba otpornika.
//analogni ulaz int potPin = A0;//centralni pin potenciometra je spojen na ovaj pin void setup())( //analogni pin je uključen kao ulaz po defaultu, tako da inicijalizacija nije potrebna Serial.begin(9600 ); ) void loop())( int potVal = analogRead(potPin);//potVal je broj između 0 i 1023 Serial.println(potVal); )
Sljedeća skica kombinuje skicu klika na dugme i skicu kontrole osvetljenja LED-a. LED dioda će se upaliti od tipke, a svjetlina će se kontrolirati potenciometrom.
//detekcija pritiska na dugme sa LED izlazom i promenljivim intenzitetom int buttonPin = 7; int ledPin = 9; int potPin = A0; void setup())( pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); ) void loop())( if (digitalRead(buttonPin)==HIGH)(//ako je dugme pritisnuto int analogVal = analogRead(potPin); int scaledVal = map(analogVal, 0, 1023, 0, 255); analogWrite(ledPin, scaledVal);//uključite LED sa intenzitetom postavljenim pot Serial.println("pritisnut"); ) else ( digitalWrite(ledPin, LOW);//isključi ako dugme nije pritisnuto Serial.println("nepritisnuto"); ) )

Najbolji članci na ovu temu