Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • U kontaktu sa
  • Arduino komande na ruskom. Programiranje Arduina u C u AVR studiju

Arduino komande na ruskom. Programiranje Arduina u C u AVR studiju

Arduino programski jezik za početnike detaljno je predstavljen u tabeli ispod. Arduino mikrokontroler programibilno uključeno poseban jezik programiranje bazirano na C/C++. Programski jezik Arduino je varijanta C++, drugim riječima, ne postoji poseban programski jezik za Arduino. Skinuti knjiga PDF moguće na kraju stranice.

IN Arduino IDE sve napisane skice se kompajliraju u program u C/C++ uz minimalne izmjene. Arduino IDE kompajler uvelike pojednostavljuje pisanje programa za ovu platformu i kreiranje uređaja na Arduinu postaje mnogo pristupačnije ljudima koji nemaju opsežno znanje o jeziku C/C++. Dajmo dalje malo informacija sa opisom glavnih funkcija Arduino jezik sa primjerima.

Detaljna referenca na Arduino jezik

Jezik se može podijeliti u četiri dijela: iskazi, podaci, funkcije i biblioteke.

Arduino jezik Primjer Opis

Operateri

postaviti() void setup()
{
pinMode(3, INPUT);
}
Funkcija se koristi za inicijalizaciju varijabli, određivanje načina rada pinova na ploči, itd. Funkcija se pokreće samo jednom, nakon svakog napajanja mikrokontrolera.
petlja() void loop()
{
digitalWrite(3, HIGH);
kašnjenje (1000);
digitalWrite(3, LOW);
kašnjenje (1000);
}
Funkcija petlje se vrti okolo, omogućavajući programu da izvrši i reaguje na proračune. Funkcije setup() i loop() moraju biti prisutne u svakoj skici, čak i ako se ovi izrazi ne koriste u programu.

Kontrolne izjave

ako
if(x>
if(x< 100) digitalWrite (3, LOW );
Naredba if se koristi u kombinaciji sa operatorima poređenja (==, !=,<, >) i provjerava da li je uslov tačan. Na primjer, ako je vrijednost varijable x veća od 100, onda se LED na izlazu 13 uključuje, ako je manja, LED se gasi.
if..else
ako (x > 100) digitalWrite (3, HIGH );
ostalo digitalWrite(3, LOW);
Naredba else vam omogućava da izvršite provjeru različitu od one specificirane u if, kako biste izvršili nekoliko međusobno isključivih provjera. Ako nijedna od provjera ne dobije TRUE rezultat, tada se izvršava blok naredbi u else.
prekidač...slučaj
prekidač (x)
{


slučaj 3: prekid ;

}
Poput if naredbe, naredba switch kontrolira program dozvoljavajući vam da specificirate radnje koje će se izvršiti kada različitim uslovima. Break je naredba za izlazak iz naredbe zadano se izvršava ako nije odabrana alternativa.
za void setup()
{
pinMode(3, IZLAZ);
}
void loop()
{
za (int i=0; i<= 255; i++){
analogWrite(3, i);
kašnjenje (10);
}
}
Konstrukt for se koristi za ponavljanje naredbi zatvorenih u vitičaste zagrade. Na primjer, glatko zatamnjenje LED dioda. Zaglavlje petlje for se sastoji od tri dijela: for (inicijalizacija; uvjet; inkrement) - inicijalizacija se izvodi jednom, zatim se provjerava uvjet, ako je uvjet istinit, onda se vrši inkrement. Petlja se ponavlja sve dok uslov ne postane lažan.
dok void loop()
{
dok (x< 10)
{
x = x + 1;
Serial.println(x);
kašnjenje (200);
}
}
Naredba while se koristi kao petlja koja će se izvršavati sve dok je uslov u zagradama tačan. U primjeru, naredba while petlje će beskrajno ponavljati kod u zagradama sve dok x ne bude manje od 10.
uradi...dok void loop()
{
uradi
{
x = x + 1;
kašnjenje (100);
Serial.println(x);
}
dok (x< 10);
kašnjenje (900);
}
Naredba do...while petlje radi na isti način kao i while petlja. Međutim, ako je izraz u zagradama tačan, petlja se nastavlja, a ne izlazi iz petlje. U gornjem primjeru, ako je x veći od 10, operacija sabiranja će se nastaviti, ali sa pauzom od 1000 ms.
break
nastaviti
prekidač (x)
{
slučaj 1: digitalWrite (3, HIGH );
slučaj 2: digitalWrite (3, LOW );
slučaj 3: prekid ;
slučaj 4: nastavi ;
default : digitalWrite (4, HIGH );
}
Break se koristi za prisilni izlazak iz petlji switch, do, for i while bez čekanja da se petlja završi.
Naredba nastavljanja preskače preostale izraze u trenutnom koraku petlje.

Sintaksa

;
(tačka i zarez)

digitalWrite(3, HIGH);
Tačka-zarez se koristi za označavanje kraja izjave. Zaboravljanje tačke-zareze na kraju reda rezultira greškom kompilacije.
{}
(proteze)
void setup()
{
pinMode(3, INPUT);
}
Početnu zagradu “(” mora pratiti završna zagrada “)”. Neusklađene zagrade mogu dovesti do skrivenih i nerazumljivih grešaka prilikom sastavljanja skice.
//
(komentar)
x = 5; // komentar

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 novajlija u radionici za lemilicu. Ovo možda nije najgori savjet, ali ga još nećemo slijediti. 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. Na različitim sistemima će izgledati 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 bilo koju skicu u Arduino i gledamo 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 vaš 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 veselo. Ponekad avrdude ne može pronaći ploču ili otpadne zbog isteka vremena - 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!

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 u AVR Studio, odnosno 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 pružamo upute korak po korak za instaliranje Arduino softvera za programiranje pomoću 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. Najnovija verzija (1.6.2-r2 u vrijeme pisanja) iz nekog razloga ne radi sa Atmega8 mikrokontrolerom.
Preuzet ćete zip arhivu s već implementiranim okruženjem. Ostaje samo da ga raspakirate u programski direktorij.

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š kod čitljiv za ljude 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 u nju upišete Processing/Wiring (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 pokušate raditi s njima u C-u, možda ćete otkriti da ne rade kako ste očekivali. A ovo može 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.

Zdravo! Ja sam Alikin Aleksandar Sergejevič, nastavnik dodatnog obrazovanja, vodim klubove „Robotika“ i „Radiotehnika“ u Centru za omladinu i tehnologiju mladih u Labinsku. Želio bih malo govoriti o pojednostavljenoj metodi programiranja Arduina pomoću programa ArduBlock.

Uveo sam ovaj program u obrazovni proces i oduševljen sam rezultatom, veoma je tražen među djecom, posebno pri pisanju jednostavnih programa ili za izradu neke početne faze složenih programa. ArduBlock je grafičko programsko okruženje, odnosno sve radnje se izvode sa nacrtanim slikama sa potpisanim akcijama na ruskom jeziku, što uvelike pojednostavljuje učenje Arduino platforme. Djeca od 2. razreda lako mogu savladati rad sa Arduinom zahvaljujući ovom programu.

Da, neko bi mogao reći da Scratch još uvijek postoji i da je također vrlo jednostavno grafičko okruženje za Arduino programiranje. Ali Scratch ne flešuje Arduino, već ga samo kontroliše preko USB kabla. Arduino je ovisan o računaru i ne može raditi autonomno. Prilikom kreiranja vlastitih projekata, autonomija je glavna stvar za Arduino, posebno kada kreirate robotske uređaje.

Čak ni dobro poznati LEGO roboti, kao što su NXT ili EV3, više nisu toliko zanimljivi našim učenicima s pojavom ArduBlock programa u Arduino programiranju. Arduino je također mnogo jeftiniji od bilo kojeg LEGO kompleta za konstrukciju, a mnoge komponente se jednostavno mogu uzeti iz stare kućne elektronike. Program ArduBlock pomoći će ne samo početnicima, već i aktivnim korisnicima Arduino platforme.

Dakle, šta je ArduBlock? Kao što sam već rekao, ovo je grafičko programsko okruženje. Gotovo u potpunosti preveden na ruski. Ali vrhunac ArduBlock-a nije samo to, već i činjenica da se ArduBlock program koji smo napisali pretvara u Arduino IDE kod. Ovaj program je ugrađen u Arduino IDE programsko okruženje, odnosno predstavlja dodatak.

Ispod je primjer trepereće LED diode i konvertovanog programa u Arduino IDE. Sav rad sa programom je vrlo jednostavan i svaki učenik ga može razumjeti.

Kao rezultat rada s programom, ne možete samo programirati Arduino, već i proučavati naredbe koje ne razumijemo u tekstualnom formatu Arduino IDE, ali ako ste previše lijeni da pišete standardne komande, možete brzo koristiti miša za skiciranje jednostavnog programa u ArduBloku i otklanjanje grešaka u Arduino IDE.

Da biste instalirali ArduBlok, prvo morate preuzeti i instalirati Arduino IDE sa službene Arduino web stranice i razumjeti postavke kada radite s Arduino UNO pločom. Kako to učiniti opisano je na istoj web stranici ili na Amperki, ili pogledajte na YouTube-u. Pa, kada sve ovo shvatite, trebate preuzeti ArduBlok sa službene web stranice, ovdje. Ne preporučujem preuzimanje najnovijih verzija, vrlo su komplicirane za početnike, ali verzija od 2013-07-12 je najbolja, ova datoteka je tamo najpopularnija.

Zatim preimenujte preuzetu datoteku u ardublock-all i u folder “documents”. Kreiramo sljedeće foldere: Arduino > tools > ArduBlockTool > tool i u potonji bacamo preuzetu i preimenovanu datoteku. ArduBlok radi na svim operativnim sistemima, čak i na Linuxu, lično sam ga testirao na XP, Win7, Win8, svi primjeri su za Win7. Instalacija programa je ista za sve sisteme.

Pa, pojednostavljeno rečeno, pripremio sam arhivu na 7z Mail disku, raspakujući koju ćete naći 2 foldera. U jednom već postoji Arduino IDE program koji radi, au drugom folderu sadržaj mora biti poslat u folder dokumenata.

Da biste radili u ArduBloku, morate pokrenuti Arduino IDE. Zatim idemo na karticu Alati i tamo nalazimo ArduBlok stavku, kliknemo na nju - i evo ga, naš cilj.

Pogledajmo sada interfejs programa. Kao što ste već shvatili, u njemu nema postavki, ali ima dosta ikona za programiranje i svaka od njih nosi naredbu u Arduino IDE tekstualnom formatu. Nove verzije imaju još više ikona, tako da je razumijevanje najnovije verzije ArduBloka teško i neke od ikona nisu prevedene na ruski.

U odjeljku "Upravljanje" naći ćemo razne cikluse.

U odjeljku „Priključci“ možemo upravljati vrijednostima portova, kao i emiterom zvuka, servo ili ultrazvučnim senzorom blizine koji je povezan s njima.

U odjeljku "Brojevi/konstante" možemo odabrati digitalne vrijednosti ili kreirati varijablu, ali malo je vjerovatno da ćete koristiti ono što je ispod.

U odeljku „Operatori“ naći ćemo sve potrebne operatore za poređenje i izračunavanje.

Odjeljak Uslužni programi uglavnom koristi tempirane ikone.

"TinkerKit Bloks" je odjeljak za kupljene TinkerKit senzore. Mi, naravno, nemamo takav set, ali to ne znači da ikone nisu prikladne za druge setove, naprotiv, momcima je vrlo zgodno da koriste ikone poput uključivanja LED-a ili dugme. Ovi znakovi se koriste u gotovo svim programima. Ali oni imaju posebnost - kada ih odaberete, postoje pogrešne ikone koje označavaju portove, pa ih morate ukloniti i zamijeniti ikonu iz odjeljka „brojevi/konstante“ na vrhu liste.

"DF Robot" - ovaj odjeljak se koristi ako su senzori navedeni u njemu prisutni, ponekad se pronađu. I naš današnji primjer nije izuzetak, imamo „podesivi IR prekidač“ i „linijski senzor“. “Lini senzor” se razlikuje od onog na slici, jer je kompanije Amperka. Njihove radnje su identične, ali Ampere senzor je mnogo bolji, jer ima regulator osjetljivosti.

“Seedstudio Grove” - nikada nisam koristio senzore u ovoj sekciji, iako postoje samo džojstici. U novim verzijama ovaj odjeljak je proširen.

I posljednji odjeljak je “Linker Kit”. Nisam naišao na senzore predstavljene u njemu.

Želio bih pokazati primjer programa na robotu koji se kreće duž trake. Robot je vrlo jednostavan, i za sklapanje i za kupovinu, ali prije svega. Počnimo s njegovom nabavkom i montažom.

Evo i samog kompleta delova, sve je kupljeno na sajtu Amperke.

  1. AMP-B001 Štitnik motora (2 kanala, 2 A) 1.890 RUB
  2. AMP-B017 Troyka Shield 1.690 RUB
  3. AMP-X053 Pretinac za baterije 3×2 AA 1 60 RUR
  4. AMP-B018 Digitalni linijski senzor 2.580 RUB
  5. ROB0049 MiniQ platforma na dva točka 1.1890 RUB
  6. SEN0019 Infracrveni senzor prepreka 1.390 RUB
  7. FIT0032 Nosač za infracrveni senzor prepreka 1,90 RUB
  8. A000066 Arduino Uno 1 1150 RUR

Prvo, sastavite platformu s kotačima i zalemimo žice na motore.

Zatim ćemo ugraditi stalke za montažu Arduino UNO ploče, koje su preuzete sa stare matične ploče ili drugih sličnih nosača.

Zatim pričvrstimo Arduino UNO ploču na ove police, ali ne možemo pričvrstiti jedan vijak - konektori su na putu. Možete ih, naravno, odlemiti, ali ovo je po vašem nahođenju.

Zatim pričvršćujemo infracrveni senzor prepreka na njegov poseban nosač. Imajte na umu da se regulator osjetljivosti nalazi na vrhu, radi lakšeg podešavanja.

Sada ugrađujemo digitalne linijske senzore, ovdje ćete morati potražiti par vijaka i 4 matice za njih. Ugrađujemo dvije matice između same platforme i senzora linije, te popravljamo senzore s ostatkom.

Zatim instaliramo Motor Shield, ili ga na drugi način možete nazvati upravljačkim programom motora. U našem slučaju obratite pažnju na džemper. Nećemo koristiti odvojeno napajanje za motore, tako da je ugrađeno u ovu poziciju. Donji dio je zalijepljen izolacijskom trakom kako ne bi došlo do slučajnih kratkih spojeva sa Arduino UNO USB konektora, za svaki slučaj.

Instaliramo Troyka Shield na motorni štit. Neophodan je za praktičnost povezivanja senzora. Svi senzori koje koristimo su digitalni, tako da su linijski senzori povezani na portove 8 i 9, kako se još nazivaju i pinovima, a infracrveni senzor prepreka je povezan na port 12. Imajte na umu da ne možete koristiti portove 4, 5, 6, 7 jer ih koristi Motor Shield za kontrolu motora. Čak sam i posebno obojio ove luke crvenim markerom kako bi učenici mogli to shvatiti.

Ako ste već primijetili, dodao sam crnu čahuru, za svaki slučaj, kako ne bi izletio pretinac za baterije koji smo postavili. I na kraju, cijelu strukturu učvršćujemo običnom gumenom trakom.

Postoje 2 vrste povezivanja odeljka za baterije. Prvo povezivanje žica na Troyka Shield. Također je moguće zalemiti utikač i spojiti ga na samu Arduino UNO ploču.

Naš robot je spreman. Prije nego počnete programirati, morat ćete naučiti kako sve funkcionira, odnosno:
- Motori:
Priključci 4 i 5 se koriste za upravljanje jednim motorom, a 6 i 7 drugim;
Reguliramo brzinu rotacije motora koristeći PWM na portovima 5 i 6;
Naprijed ili unazad slanjem signala na portove 4 i 7.
- Senzori:
Svi smo mi digitalni, tako da oni daju logičke signale u obliku 1 ili 0;
A da bi ih prilagodili, imaju posebne regulatore, a uz pomoć odgovarajućeg odvijača mogu se kalibrirati.

Detalje možete pronaći u Amperke. Zašto ovdje? Jer postoji mnogo informacija o radu sa Arduinom.

Pa, vjerovatno smo sve pogledali površno, proučili i, naravno, sastavili robota. Sada ga treba programirati, evo ga - dugo očekivanog programa!

I program je konvertovan u Arduino IDE:

Void setup() ( pinMode(8, INPUT); pinMode(12, INPUT); pinMode(9, INPUT); pinMode(4, OUTPUT); pinMode(7, OUTPUT); pinMode(5, OUTPUT); pinMode(6 , OUTPUT ) void loop() ( if (digitalRead(12)) (if (digitalRead(8)) (if (digitalRead(9)) ( digitalWrite(4, HIGH); analogWrite(5, 255); analogWrite(); 6, 255 digitalWrite(7, HIGH ) else ( digitalWrite(4, HIGH); analogWrite(6, 50); digitalWrite(7, LOW); ) ) else ( if (digitalRead); (9)) ( digitalWrite(4, LOW); analogWrite(5, 50); analogWrite(6, 255); digitalWrite(7, HIGH); ) else ( digitalWrite(4, HIGH); analogWrite(5, 255); analogWrite(6, 255) digitalWrite(7, HIGH ) else ( digitalWrite(4, HIGH); analogWrite(6, 0); digitalWrite(7, HIGH); ));

U zaključku, želim reći da je ovaj program jednostavno dar za obrazovanje, čak i za samostalno učenje, pomoći će vam da naučite Arduino IDE komande. Glavni naglasak je da postoji više od 50 ikona za instalaciju, počinje da "kvari". Da, zaista, ovo je vrhunac, budući da vas programiranje samo na ArduBloku cijelo vrijeme neće naučiti programiranju u Arduino IDE. Takozvani “kvar” vam daje priliku da razmislite i pokušate da zapamtite komande za precizno otklanjanje grešaka u programima.

Želim ti uspjeh.

Uvod

Freeduino/Arduino je programiran u posebnom programskom jeziku - baziran je na C/C++, i omogućava vam korištenje bilo koje njegove funkcije. Strogo govoreći, ne postoji poseban Arduino jezik, kao što ne postoji ni Arduino kompajler - pisani programi se konvertuju (sa minimalnim izmenama) u program u C/C++, a zatim kompajliraju od strane AVR-GCC kompajlera. Dakle, u stvari, koristi se varijanta C/C++ specijalizovana za AVR mikrokontrolere.

Razlika je u tome što dobijate jednostavno razvojno okruženje i skup osnovnih biblioteka koje pojednostavljuju pristup periferijama koje se nalaze „na ploči“ mikrokontrolera.

Slažem se, vrlo je zgodno početi raditi sa serijskim portom brzinom od 9600 bita u sekundi, upućivanjem poziva u jednoj liniji:

Serial.begin(9600);

A kada koristite "goli" C/C++, morali biste se pozabaviti dokumentacijom za mikrokontroler i pozvati nešto ovako:

UBRR0H = ((F_CPU / 16 + 9600 / 2) / 9600 - 1) >> 8;
UBRR0L = ((F_CPU / 16 + 9600 / 2) / 9600 - 1);
sbi(UCSR0B, RXEN0);
sbi(UCSR0B, TXEN0);
sbi(UCSR0B, RXCIE0);

Evo kratkog pregleda glavnih funkcija i karakteristika Arduino programiranja. Ako niste upoznati sa sintaksom C/C++ jezika, preporučujemo da pogledate bilo koju literaturu o ovaj problem, ili Internet izvori.

S druge strane, svi prikazani primjeri su vrlo jednostavni i najvjerovatnije nećete imati poteškoća s razumijevanjem izvorni tekstovi i pisanje sopstvenim programimačak i bez čitanja dodatne literature.

Kompletnija dokumentacija (na adresi engleski jezik) je predstavljen na službenoj web stranici projekta - http://www.arduino.cc. Tu je i forum, linkovi na dodatne biblioteke i njihov opis.

Slično opisu na službenoj web stranici Arduino projekat, “port” označava kontakt mikrokontrolera spojen na konektor pod odgovarajućim brojem. Pored toga, postoji i serijski komunikacioni port (COM port).

Struktura programa

U svom programu morate deklarirati dvije glavne funkcije: setup() i loop().

Funkcija setup() se poziva jednom, nakon svakog uključivanja ili resetovanja Freeduino ploče. Koristite ga za inicijalizaciju varijabli, postavljanje načina rada digitalnih portova, itd.

Funkcija loop() sekvencijalno izvršava naredbe opisane u njenom tijelu iznova i iznova. One. Nakon što se funkcija završi, biće ponovo pozvana.

Pogledajmo jednostavan primjer:

void setup() // početne postavke
{
beginSerial(9600); // podešavanje brzine rada serijski port na 9600 bps
pinMode(3, INPUT); // postavljanje 3. porta za unos podataka
}

// Program provjerava 3. port za prisutnost signala na njemu i šalje odgovor na
// view tekstualna poruka na serijski port računara
void loop() // tijelo programa
{
if (digitalRead(3) == HIGH) // uslov za prozivanje 3. porta
serialWrite("H"); // šaljemo poruku u obliku slova "H" na COM port
ostalo
serialWrite("L"); // šaljemo poruku u obliku slova "L" na COM port
kašnjenje (1000); // kašnjenje 1 sek.
}

pinMode(port, mod);

Opis:

Konfigurira navedeni port za unos ili izlaz signala.

Opcije:

port – broj porta čiji način rada želite postaviti (cijela vrijednost od 0 do 13).

mod - ili INPUT (ulaz) ili OUTPUT (izlaz).

pinMode(13, IZLAZ); //13. pin će biti izlaz
pinMode(12, INPUT); //a 12. je ulaz

Bilješka:

Analogni ulazi se mogu koristiti kao digitalni ulazi/izlazi pristupajući im brojevima koji počinju sa 14 ( analogni ulaz 0) do 19 (analogni ulaz 5)

digitalWrite(port, vrijednost);

Opis:

Postavlja nivo napona na visok (HIGH) ili nizak (LOW) na navedenom portu.

Opcije:

port: broj porta

vrijednost: HIGH ili LOW

digitalWrite(13, HIGH); // postaviti pin 13 u "visoko" stanje

vrijednost = digitalRead(port);

Opis:

Čita vrijednost na navedenom portu

Opcije:

port: broj prozvanog porta

Povratna vrijednost: Vraća trenutnu vrijednost na portu (HIGH ili LOW) ukucajte int

int val;
val = digitalRead(12); // poll 12. pin

Bilješka:

Ako ništa nije povezano s portom koji se čita, funkcija digitalRead() može neograničeno vraćati VISKE ili LOW vrijednosti.

Analogni signalni ulaz/izlaz

vrijednost = analognoRead(port);

Opis:

Čita vrijednost sa navedenog analognog porta. Freeduino sadrži 6 kanala, analogno-digitalni pretvarač 10 bitova svaki. To znači da se ulazni napon od 0 do 5V pretvara u cjelobrojnu vrijednost od 0 do 1023. Rezolucija očitavanja je: 5V/1024 vrijednosti = 0,004883 V/vrijednosti (4,883 mV). Potrebno je otprilike 100 nS (0,0001 C) da se očita vrijednost analognog ulaza, tako da maksimalna brzina očitavanja - otprilike 10.000 puta u sekundi.

Opcije:

Povratna vrijednost: Vraća int broj u rasponu od 0 do 1023 pročitan sa navedenog porta.

int val;
val = analogno čitanje(0); // čitanje vrijednosti na 0. analognom ulazu

Bilješka:

Analogni portovi su definirani kao ulaz signala prema zadanim postavkama i, za razliku od digitalnih portova, ne moraju se konfigurirati pozivanjem funkcije pinMode.

analogWrite(port, vrijednost);

Opis:

Izlazi analognu vrijednost na port. Ova funkcija radi na: 3, 5, 6, 9, 10 i 11 Freeduino digitalnih portova.

Može se koristiti za promjenu svjetline LED diode, kontrolu motora itd. Nakon poziva funkcije analogWrite, odgovarajući port počinje raditi u modusu modulacije širine napona sve dok ne dođe do drugog poziva funkcije analogWrite (ili digitalRead / digitalWrite funkcije na istom portu).

Opcije:

port: broj analognog ulaza koji se proziva

vrijednost: cijeli broj između 0 i 255. Vrijednost 0 generiše 0 V na navedenom portu; vrijednost od 255 generiše +5V na navedenom portu. Za vrijednosti između 0 i 255, port počinje brzo da se mijenja između nivoa napona 0 i +5 V - što je vrijednost veća, to češće port generiše VISOK (5 V) nivo.

analogWrite(9, 128) // postaviti pin 9 na vrijednost ekvivalentnu 2.5V

Bilješka:

Nema potrebe da pozivate pinMode da biste postavili port za izlazne signale prije pozivanja analogWrite.

Frekvencija generisanja signala je približno 490 Hz.

vrijeme = millis();

Opis:

Vraća broj milisekundi od izvršenja Freeduina aktuelni program. Brojač će se preliti i resetirati nakon otprilike 9 sati.

Povratna vrijednost: vraća neoznačenu dugu vrijednost

nepotpisano dugo vremena; // deklaracija vremenske varijable tipa unsigned long
vrijeme = millis(); // prenosi broj milisekundi

kašnjenje(vreme_ms);

Opis:

Pauzira program na određeni broj milisekundi.

Opcije:

time_ms – vrijeme kašnjenja programa u milisekundama

kašnjenje (1000); //pauza 1 sekunda

delayMicroseconds

kašnjenje mikrosekunde(vreme_μs);

Opis:

Pauzira program na određeni broj mikrosekundi.

Opcije:

time_μs – vrijeme kašnjenja programa u mikrosekundama

kašnjenje mikrosekunde (500); //pauza 500 mikrosekundi

pulseIn(port, vrijednost);

Opis:

Čita impuls (visok ili nizak) sa digitalnog porta i vraća trajanje impulsa u mikrosekundama.

Na primjer, ako je parametar vrijednosti postavljen na HIGH kada se poziva funkcija, tada pulseIn() čeka da visoki signal stigne na port. Od trenutka kada stigne, počinje odbrojavanje do primanja porta nizak nivo signal. Funkcija vraća dužinu impulsa ( visoki nivo) u mikrosekundama. Radi sa impulsima od 10 mikrosekundi do 3 minute. Imajte na umu da ova funkcija neće vratiti rezultat dok se ne otkrije puls.

Opcije:

port: broj porta sa kojeg čitamo puls

vrijednost: tip pulsa HIGH ili LOW

Povratna vrijednost: vraća trajanje impulsa u mikrosekundama (tip int)

int duration; // deklaracija varijable trajanja tipa int
trajanje = pulseIn(pin, HIGH); // mjeri trajanje pulsa

Serijski prijenos podataka

Freeduino ima ugrađen kontroler za serijski prijenos podataka, koji se može koristiti kako za komunikaciju između Freeduino/Arduino uređaja tako i za komunikaciju s računalom. Na računaru, odgovarajuća veza je predstavljena USB COM portom.

Komunikacija se odvija preko digitalnih portova 0 i 1 i stoga ih ne možete koristiti za digitalne I/O ako koristite serijske funkcije.

Serial.begin(baud_rate);

Opis:

Postavlja brzinu prijenosa informacija o COM portu u bitovima u sekundi za serijski prijenos podataka. Da biste komunicirali sa računarom, koristite jednu od ovih standardizovanih brzina: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 ili 115200 ili 115200. portovi 0 i 1.

Opcije:

baud_rate: Brzina protoka podataka u bitovima u sekundi.

Serial.begin(9600); //podesite brzinu na 9600 bps

Serial.available

count = Serial.available();

Opis:

Prihvatio serijski port bajtovi završavaju u baferu mikrokontrolera, odakle ih vaš program može pročitati. Funkcija vraća broj bajtova akumuliranih u međuspremniku. Serijski bafer može pohraniti do 128 bajtova.

Povratna vrijednost:

Vraća int vrijednost - broj bajtova dostupnih za čitanje u serijskom baferu, ili 0 ako ništa nije dostupno.

if (Serial.available() > 0) ( // Ako postoje podaci u međuspremniku
// ovdje treba postojati prijem i obrada podataka
}

char = Serial.read();

Opis:

Čita sljedeći bajt iz bafera serijski port.

Povratna vrijednost:

Prvi dostupni bajt dolaznih podataka sa serijskog porta, ili -1 ako nema dolaznih podataka.

incomingByte = Serial.read(); // čitanje bajta

Opis:

Briše ulazni bafer serijskog porta. Podaci u baferu se gube, a dalji pozivi Serial.read() ili Serial.available() će imati smisla za podatke primljene nakon Serial.flush() poziva.

Serial.flush(); // Očisti međuspremnik - počnite primati podatke "od nule"

Opis:

Izlaz podataka na serijski port.

Opcije:

Funkcija ima nekoliko oblika poziva ovisno o vrsti i formatu izlaznih podataka.

Serial.print(b, DEC) ispisuje ASCII string - decimalni prikaz b.

int b = 79;

Serial.print(b, HEX) ispisuje ASCII string - heksadecimalni prikaz broja b.

int b = 79;

Serial.print(b, OCT) ispisuje ASCII string - oktalni prikaz broja b.

int b = 79;
Serial.print(b, OCT); // će izbaciti niz "117" na port

Serial.print(b, BIN) ispisuje ASCII niz - binarno predstavljanje brojevi b.

int b = 79;
Serial.print(b, BIN); // će izbaciti string “1001111” na port

Serial.print(b, BYTE) ispisuje niži bajt od b.

int b = 79;
Serial.print(b, BYTE); // će prikazati broj 79 (jedan bajt). U monitoru
//iz serijskog porta dobijamo simbol “O” - njegov
//kod je 79

Serial.print(str) ako je str string ili niz znakova, šalje str u bajt bajta COM porta.

char bajtovi = (79, 80, 81); //niz od 3 bajta sa vrijednostima 79,80,81
Serial.print("Ovde naši bajtovi:"); //izlazi red "Evo naših bajtova:"
Serial.print(bytes); //izlazi 3 znaka sa kodovima 79,80,81 –
//ovo su znakovi "OPQ"

Serial.print(b) ako je b tipa byte ili char, ispisuje sam broj b na port.

char b = 79;
Serial.print(b); // će izaći znak “O” na port

Serial.print(b) ako b ima ceo tip, izlazi decimalni prikaz broja b na port.

int b = 79;
Serial.print(b); // će izbaciti niz "79" na port

Opis:

Funkcija Serial.println je slična funkciji Serial.print i ima iste opcije poziva. Jedina razlika je u tome što se dva dodatna znaka izlaze nakon podataka - znak za vraćanje nosača (ASCII 13, ili "\r") i znak novog reda (ASCII 10, ili "\n").

Primjer 1 i primjer 2 će dati istu stvar na port:

int b = 79;
Serial.print(b, DEC); // će izbaciti niz "79" na port
Serial.print("\r\n"); // će prikazati znakove "\r\n" – prijelaz na red
Serial.print(b, HEX); // će izbaciti string “4F” na port
Serial.print("\r\n");//ispisat će znakove "\r\n" – prijelaz na red

int b = 79;
Serial.println(b, DEC); // će izbaciti string “79\r\n” na port
Serial.println(b, HEX); // će izbaciti string “4F\r\n” na port

U monitoru serijskog porta dobijamo.

Najbolji članci na ovu temu