Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • U kontaktu s
  • Arduino naredbe na ruskom. Programiranje Arduino u C u AVR Studio

Arduino naredbe na ruskom. Programiranje Arduino u C u AVR Studio

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

U Arduino IDE sve napisane skice se prevode u program u C/C++ uz minimalne izmjene. Arduino IDE kompajler uvelike pojednostavljuje pisanje programa za ovu platformu, a stvaranje uređaja na Arduinu postaje mnogo pristupačnije osobama koje nemaju opsežno znanje C/C++ jezika. Dajmo dalje malo informacija s opisom glavnih funkcija Arduino jezik s primjerima.

Detaljna referenca na Arduino jezik

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

Arduino jezik Primjer Opis

Operatori

postaviti() void setup()
{
pinMode(3, INPUT);
}
Funkcija se koristi za inicijalizaciju varijabli, određivanje načina rada pinova na ploči, itd. Funkcija se izvodi samo jednom, nakon svakog napajanja mikrokontrolera.
petlja() void petlja()
{
digitalWrite(3, HIGH);
kašnjenje (1000);
digitalWrite(3, LOW);
kašnjenje (1000);
}
Funkcija petlje se vrti u krug, dopuštajući programu da izvodi izračune i reagira na njih. Funkcije setup() i loop() moraju biti prisutne u svakoj skici, čak i ako se ove naredbe ne koriste u programu.

Kontrolne izjave

ako
ako (x>
ako (x< 100) digitalWrite (3, LOW );
Iskaz if koristi se u kombinaciji s operatorima usporedbe (==, !=,<, >) i provjerava je li uvjet istinit. Na primjer, ako je vrijednost varijable x veća od 100, tada se uključuje LED na izlazu 13; ako je manja, LED se gasi.
ako..drugo
if (x > 100) digitalWrite (3, VISOKO);
else digitalWrite(3, LOW);
Operator else vam omogućuje da izvršite provjeru koja nije navedena u if-u, kako biste izvršili nekoliko međusobno isključivih provjera. Ako niti jedna od provjera ne dobije TRUE rezultat, tada se izvršava blok naredbi u else.
prekidač...kućište
prekidač(x)
{


slučaj 3: prekid ;

}
Poput naredbe if, naredba switch kontrolira program dopuštajući vam da navedete radnje koje će se kada izvršiti različitim uvjetima. Break je naredba za izlaz iz naredbe; default se izvršava ako nije odabrana nijedna alternativa.
za void setup()
{
pinMode(3, IZLAZ);
}
void petlja()
{
za (int i=0; i<= 255; i++){
analogWrite(3, i);
kašnjenje(10);
}
}
For konstrukcija se koristi za ponavljanje iskaza u vitičastim zagradama. Na primjer, glatko prigušivanje LED-a. Zaglavlje for petlje sastoji se od tri dijela: for (inicijalizacija; uvjet; inkrement) - inicijalizacija se izvodi jednom, zatim se provjerava uvjet, ako je uvjet istinit, tada se izvodi inkrement. Petlja se ponavlja sve dok uvjet ne postane lažan.
dok void petlja()
{
dok (x< 10)
{
x = x + 1;
Serial.println(x);
kašnjenje (200);
}
}
Naredba while koristi se kao petlja koja će se izvršavati sve dok je uvjet u zagradama istinit. U primjeru, naredba petlje while ponavljat će kod u zagradama beskrajno sve dok x ne bude manji od 10.
učiniti... dok void petlja()
{
čini
{
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 istinit, petlja se nastavlja umjesto da izlazi iz petlje. U gornjem primjeru, ako je x veći od 10, operacija zbrajanja će se nastaviti, ali uz pauzu od 1000 ms.
pauza
nastaviti
prekidač(x)
{
slučaj 1: digitalWrite (3, HIGH );
slučaj 2: digitalWrite (3, LOW);
slučaj 3: prekid ;
slučaj 4: nastaviti ;
zadano: digitalWrite (4, VISOKO);
}
Break se koristi za prisilni izlazak iz petlji switch, do, for i while bez čekanja da se petlja završi.
Naredba continue preskače preostale naredbe u trenutnom koraku petlje.

Sintaksa

;
(točka i zarez)

digitalWrite(3, HIGH);
Točka-zarez se koristi za označavanje kraja izjave. Zaboravljanje točke i zareza na kraju retka rezultira pogreškom kompilacije.
{}
(proteza)
void setup()
{
pinMode(3, INPUT);
}
Početnu zagradu “(” mora slijediti završna zagrada “)”. Nepodudarne zagrade mogu dovesti do skrivenih i nerazumljivih pogrešaka prilikom sastavljanja skice.
//
(komentar)
x = 5; // komentar

U životu Arduino programera, prije ili kasnije dođe vrijeme kada standardno razvojno okruženje postane prenatrpano. Ako skice više nemaju dovoljno memorije, treba vam hard realtime i rad s prekidima ili jednostavno želite biti bliže hardveru, onda je vrijeme da prijeđete na C. Iskusni elektroničari će se prezirno namrštiti na spomen Arduina i poslati početnik u radionici za lemilo. Ovo možda nije najgori savjet, ali nećemo ga još slijediti. Ako odbacimo Arduino IDE i jezik ožičenja/procesiranja, ostaje nam izvrsna debugging ploča, već opremljena svime što je potrebno za rad mikrokontrolera. I, što je važno, bootloader je već ugrađen u memoriju kontrolera, što vam omogućuje da učitate firmware bez upotrebe programatora.

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

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

Nakon što je sve instalirano, kreirajmo naš prvi projekt. Za početak, napišimo Makefile. Omogućit će nam da izbjegnemo ručno unošenje dugačkih naredbi svaki put kada kompajliramo i učitavamo firmware.

#Kontroler instaliran na ploči. Može biti drugačiji, 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=$(CLOCK) -mmcu=$(DEVICE) all: main .hex .c.o: $(KOMPILACIJA) -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 ovu datoteku moramo unijeti našu naredbu za pokretanje avrdude. Izgledat će drugačije na različitim sustavima. Kako biste saznali svoju opciju, pokrenite Arduino IDE i potvrdite okvir "Prikaži verbose izlaz tijekom prijenosa" u postavkama.

Sada učitavamo bilo koju skicu u Arduino i gledamo poruke prikazane na dnu prozora. Tamo pronalazimo poziv avrdude, kopiramo sve osim parametra -Uflash i zalijepimo ga u Makefile nakon “AVRDUDE = “.


Kratka napomena: sve uvlake u Makefileu se rade sa znakovima tab (tipka Tab). Ako vaš uređivač teksta zamijeni te znakove razmacima, make naredba će odbiti izgraditi projekt.

Kreirajmo sada datoteku glavni.c- stvarni tekst našeg programa, u kojem tradicionalno treperi LED.

#uključi #uključi #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š projekt je spreman. Otvorimo konzolu u našem direktoriju projekta i unesite naredbu "make":


Kao što možete vidjeti, 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" za učitavanje kompajlirane datoteke u kontroler:


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

Možda će se mnoge stvari opisane u ovom članku iskusnim programerima učiniti očiglednima. Pokušao sam proces opisati jezikom koji je razumljiv početniku Arduino korisniku i na jednom mjestu prikupiti informacije koje sam uspio dobiti iz raznih izvora i empirijski provjeriti. Možda ovaj članak nekome uštedi par sati vremena.

Sretno u svladavanju 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, to jest, možete pisati i učitavati programe napisane u C, C++ ili Assembleru bez programera. Štoviše, možete pisati kod na jeziku obrade/ožičenja u AVR Studiju.
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. Kao osnovu uzeli smo recenziju proširenja AVR Studio s web 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 stranici. Najnovija verzija (1.6.2-r2 u vrijeme pisanja) iz nekog razloga ne radi s mikrokontrolerom Atmega8.
Preuzet ćete zip arhivu s već postavljenim okruženjem. Sve što ostaje je raspakirati ga u programski direktorij.

Instalacija Atmel Studio

UPD

Vidim da je tema popularna i želim pojasniti nekoliko točaka.
Postoje tri načina na koja sam pokušao programirati Arduino-kompatibilnu ploču u C-u:

  1. Pišite izravno u Arduino IDE u C-u. Morate razumjeti da Processing/Wiring nije jezik, već jednostavno skup makronaredbi i biblioteka. Kada pišete u njemu, on gleda u njegova zaglavlja, pretvara vaš čovjek čitljiv kod u C i zatim kompajlira sa standardnim AVR GCC kompajlerom. Ako pišete kod u C-u, onda on neće pristupiti svojim libovima i odmah će kompajlirati sve kako treba, ALI!... u isto vrijeme će povezivač dodati vašem projektu što 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 (zapravo, najčudnija, jer kombinira sve nedostatke). Ideološki, ovo proširenje je potrebno za programiranje u Processing/Wiring i korištenje Atmel Studio-a kao sučelja. Postoji i plaćena funkcija koja vam omogućuje debugiranje koda, ali je nisam isprobao. Dakle, u biti, kod programiranja sve se događa isto kao u prvoj opciji, ali radite u drugom IDE-u. Istovremeno, s gledišta rezultata, dobivate isto. Ako ste programirali Arduino i odlučili to učiniti u C-u, slobodno pišite izravno u Arduino IDE. Ako vam se ne sviđa sučelje, možete koristiti normalni editor (preporučam Sublime Text). Ako radite u Atnel Studiju i želite fleširati svoju ploču izravno s njezinog sučelja ili napisati Processing/Wiring u njoj (odjednom!), onda je ovaj dodatak za vas. Usput, studio radi samo pod Windowsima, odnosno metoda nije za svakoga. Napisao sam ovaj članak samo zato što sam pronašao novu metodu za sebe, ali ne sviđa mi se.
  3. Treća metoda, čini mi se, najbolja je za naprednog korisnika. U početku se sve događa kao i obično - napišete kod, kompajlirate ga i dobijete hex datoteku. Zatim, imajući na umu da imate običnu ploču za ispravljanje pogrešaka s bootloaderom u rukama, preuzmite uslužni program koji može pristupiti ovom bootloaderu i prenijeti vaš kod u memoriju. Već smo objavili upute korak po korak. U tom slučaju programer dobiva maksimalnu kontrolu nad svim funkcijama, ali mogu nastati problemi zbog upotrebe programa za pokretanje treće strane.

Želio bih otkriti još jednu stvar koja se događa u Arduinu. Što god učinili, Arduino IDE će definitivno sam uključiti periferne uređaje. Na primjer, pokrenut će mjerače vremena. A ako želite raditi s njima u C-u, možda ćete otkriti da ne rade kako ste očekivali. A to može postati pravi problem. A takvih primjera je mnogo, odnosno potencijalnih grablji, štaka i bubica je mnogo.
Ako jednostavno učitate heksadecimalnu datoteku, problemi mogu nastati samo zbog bootloadera. Do sada sam pronašao samo jedan - nakon što je bootloader dovršen, UART ostaje uključen. Ako pišete kroz Arduino IDE, on će se umetnuti u vaš kod da ga onemogući i tko zna što još. Ako samo želite pokrenuti svoj hex, tada nećete imati kontrolu nad UART nogama. Morat ćete ručno dodati onemogućivanje UART-a u svoj projekt. Ovaj artefakt i primjeri koda detaljno su 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 te probleme.

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

Zdravo! Ja sam Alikin Alexander Sergeevich, učitelj dodatnog obrazovanja, vodim klubove "Robotika" i "Radiotehnika" u Centru za mlade i tehnologiju mladih u Labinsku. Želio bih malo razgovarati o pojednostavljenoj metodi programiranja Arduina pomoću programa ArduBlock.

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

Da, netko 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ša Arduino, već ga samo kontrolira putem USB kabela. Arduino ovisi o računalu i ne može raditi samostalno. Prilikom izrade vlastitih projekata, autonomija je glavna stvar za Arduino, posebno kada stvarate robotske uređaje.

Čak i dobro poznati LEGO roboti, poput NXT-a ili EV3, dolaskom ArduBlock programa u Arduino programiranje više nisu toliko zanimljivi našim studentima. Arduino je također mnogo jeftiniji od bilo kojeg LEGO konstrukcionog kompleta, a mnoge se komponente mogu jednostavno uzeti iz stare kućne elektronike. Program ArduBlock pomoći će ne samo početnicima, već i aktivnim korisnicima Arduino platforme.

Dakle, što je ArduBlock? Kao što sam već rekao, ovo je okruženje za grafičko programiranje. Gotovo u potpunosti preveden na ruski. Ali vrhunac ArduBlocka nije samo to, već i činjenica da ArduBlock program koji smo napisali pretvara u Arduino IDE kod. Ovaj program je ugrađen u Arduino IDE programsko okruženje, tj. plugin je.

Ispod je primjer trepćućeg LED-a i konvertiranog programa u Arduino IDE. Sav rad s 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 za pisanje standardnih naredbi, možete brzo koristiti mišem za skiciranje jednostavnog programa u ArduBloku i otklanjanje pogrešaka u Arduino IDE-u.

Da biste instalirali ArduBlok, prvo morate preuzeti i instalirati Arduino IDE sa službene Arduino web stranice i razumjeti postavke pri radu s Arduino UNO pločom. Kako to učiniti opisano je na istoj web stranici ili na Amperki ili pogledajte na YouTubeu. Pa, kad sve ovo shvatite, morate preuzeti ArduBlok sa službene stranice, ovdje. Ne preporučam 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 mapu “documents”. Kreiramo sljedeće mape: Arduino > tools > ArduBlockTool > tool i u potonju bacamo preuzetu i preimenovanu datoteku. ArduBlok radi na svim operativnim sustavima, čak i na Linuxu, osobno sam ga testirao na XP, Win7, Win8, svi primjeri su za Win7. Instalacija programa je ista za sve sustave.

Pa, jednostavno rečeno, pripremio sam arhivu na 7z Mail disku, raspakirajući koju ćete pronaći 2 mape. U jednoj već postoji radni Arduino IDE program, au drugoj mapi sadržaj je potrebno poslati u mapu dokumenata.

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

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

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

U odjeljku "Priključci" možemo upravljati vrijednostima priključaka, kao i emiterom zvuka, servo ili ultrazvučnim senzorom blizine koji je na njih povezan.

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

U odjeljku “Operatori” pronaći ćemo sve potrebne operatore za usporedbu i izračun.

Odjeljak Uslužni programi uglavnom koristi ikone s vremenskim ograničenjima.

"TinkerKit Bloks" je dio za kupljene TinkerKit senzore. Mi, naravno, nemamo takav set, ali to ne znači da ikone nisu prikladne za druge setove, naprotiv, vrlo je zgodno za dečke da koriste ikone poput uključivanja LED-a ili dugme. Ovi se znakovi koriste u gotovo svim programima. Ali imaju jednu osobitost - kada ih odaberete, pojavljuju se netočne ikone koje označavaju priključke, pa ih trebate ukloniti i zamijeniti ikonom iz odjeljka "brojevi/konstante" na vrhu popisa.

“DF Robot” - ovaj odjeljak se koristi ako su senzori navedeni u njemu prisutni, ponekad se pronađu. I naš današnji primjer nije iznimka, mi imamo “Adjustable IR Switch” i “Line Sensor”. “Line senzor” je drugačiji od ovog na slici, jer je iz firme Amperka. Radnje su im identične, ali je Ampere senzor puno bolji jer ima regulator osjetljivosti.

“Seedstudio Grove” - Nikada nisam koristio senzore u ovom odjeljku, iako postoje samo joystickovi. 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, kako za sastavljanje tako i za kupnju, ali na prvom mjestu. Počnimo s njegovom nabavom i montažom.

Evo i samog seta dijelova, sve je kupljeno na web stranici Amperka.

  1. AMP-B001 Motor Shield (2 kanala, 2 A) 1890 RUB
  2. AMP-B017 Troyka Shield 1690 RUB
  3. AMP-X053 Pretinac za baterije 3×2 AA 1 60 RUR
  4. AMP-B018 Digitalni linijski senzor 2580 RUB
  5. ROB0049 MiniQ platforma na dva kotača 11890 RUB
  6. SEN0019 Infracrveni senzor prepreka 1390 RUB
  7. FIT0032 Nosač za infracrveni senzor prepreka 1,90 RUB
  8. A000066 Arduino Uno 1 1150 RUR

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

Zatim ćemo instalirati nosače za montažu Arduino UNO ploče, koji su uzeti sa stare matične ploče ili drugih sličnih nosača.

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

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

Sada postavljamo digitalne linijske senzore, ovdje ćete morati potražiti par vijaka i 4 matice za njih.Instaliramo dvije matice između same platforme i linijskog senzora, a s ostatkom pričvrstimo senzore.

Zatim instaliramo Motor Shield, ili ga inače možete nazvati pokretačkim programom motora. U našem slučaju obratite pozornost na skakač. Nećemo koristiti zasebno napajanje za motore, pa je instalirano u ovom položaju. Donji dio je zalijepljen električnom trakom kako ne bi došlo do slučajnog kratkog spoja s Arduino UNO USB konektora, za svaki slučaj.

Instaliramo Troyka Shield na vrh Motor Shielda. Potrebno je za praktičnost povezivanja senzora. Svi senzori koje koristimo su digitalni, tako da su linijski senzori spojeni na priključke 8 i 9, kako se još nazivaju pinovi, a infracrveni senzor prepreka spojen je na priključak 12. Imajte na umu da ne možete koristiti priključke 4, 5, 6, 7 jer ih koristi Motor Shield za upravljanje motorima. Čak sam te luke posebno obojao crvenim flomasterom kako bi učenici to mogli shvatiti.

Ako ste već primijetili, dodao sam crnu čahuru, za svaki slučaj, da pretinac za bateriju koji smo ugradili ne bi izletio van. I na kraju, učvrstimo cijelu strukturu običnom gumenom trakom.

Postoje 2 vrste priključaka odjeljka za baterije. Prvo spajanje žica na Troyka Shield. Također je moguće zalemiti strujni 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, naime:
- Motori:
Priključci 4 i 5 služe za upravljanje jednim motorom, a 6 i 7 drugim;
Reguliramo brzinu vrtnje motora pomoću PWM na priključcima 5 i 6;
Naprijed ili unatrag slanjem signala na priključke 4 i 7.
- Senzori:
Svi smo mi digitalni, pa oni daju logične signale u obliku 1 ili 0;
A za podešavanje imaju posebne regulatore, a uz pomoć odgovarajućeg odvijača mogu se kalibrirati.

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

Pa vjerojatno smo sve površno pogledali, proučili i, naravno, sklopili robota. Sada ga treba programirati, evo ga - dugo očekivani program!

I program pretvoren u Arduino IDE:

Void setup() ( pinMode(8 , INPUT); pinMode(12 , INPUT); pinMode(9 , INPUT); pinMode(4 , IZLAZ); pinMode(7 , IZLAZ); pinMode(5, IZLAZ); 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(5, 255); 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(5, 0); analogWrite(6, 0); digitalWrite(7 , HIGH); ) )

Zaključno, želim reći da je ovaj program jednostavno božji dar za obrazovanje; čak i za samostalno učenje, pomoći će vam da naučite Arduino IDE naredbe. Glavni naglasak je da postoji više od 50 instalacijskih ikona, počinje "gljakati". Da, doista, ovo je vrhunac, budući da vas stalno programiranje samo na ArduBloku neće naučiti programiranju u Arduino IDE. Takozvani “glitch” vam daje priliku da razmislite i pokušate zapamtiti naredbe za precizno otklanjanje pogrešaka programa.

Želim ti uspjeh.

Uvod

Freeduino/Arduino je programiran u posebnom programskom jeziku - baziran je na C/C++, i omogućuje korištenje bilo koje njegove funkcije. Strogo govoreći, ne postoji zaseban Arduino jezik, kao što ne postoji niti Arduino kompajler - napisani programi se (uz minimalne izmjene) pretvaraju u program u C/C++, a zatim prevode AVR-GCC kompajler. Dakle, zapravo se koristi varijanta C/C++ specijalizirana za AVR mikrokontrolere.

Razlika je u tome što dobivate jednostavno razvojno okruženje i skup osnovnih biblioteka koje pojednostavljuju pristup periferiji koja se nalazi "na" mikrokontroleru.

Slažem se, vrlo je prikladno započeti rad sa serijskim priključkom brzinom od 9600 bita u sekundi, upućujući poziv u jednom retku:

Serial.begin(9600);

A kada koristite "goli" C/C++, morali biste se pozabaviti dokumentacijom za mikrokontroler i nazvati 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);

Ovdje je kratak pregled glavnih funkcija i značajki Arduino programiranja. Ako niste upoznati sa sintaksom jezika C/C++, preporučujemo da pogledate bilo koju literaturu o ovo pitanje, ili internetskih izvora.

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

Kompletnija dokumentacija (at Engleski jezik) predstavljen je na službenoj stranici projekta - http://www.arduino.cc. Tu je i forum, poveznice na dodatne knjižnice i njihov opis.

Slično opisu na službenoj web stranici Arduino projekt, "priključak" znači kontakt mikrokontrolera spojen na konektor pod odgovarajućim brojem. Osim toga, tu je i serijski komunikacijski port (COM port).

Struktura programa

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

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

Funkcija loop() sekvencijalno izvršava naredbe opisane u svom tijelu uvijek iznova. Oni. Nakon što funkcija završi, bit će ponovno pozvana.

Pogledajmo jednostavan primjer:

void setup() // početne postavke
{
beginSerial(9600); // postavljanje radne brzine serijski priključak pri 9600 bps
pinMode(3, INPUT); // postavljanje 3. priključka za unos podataka
}

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

pinMode(port, mod);

Opis:

Konfigurira navedeni priključak za ulaz ili izlaz signala.

Mogućnosti:

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

način - 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 mogu se koristiti kao digitalni ulazi/izlazi pristupajući im brojevima koji počinju s 14 ( analogni ulaz 0) do 19 (analogni ulaz 5)

digitalWrite(port, vrijednost);

Opis:

Postavlja razinu napona na visoku (HIGH) ili nisku (LOW) na navedenom priključku.

Mogućnosti:

port: broj porta

vrijednost: VISOKA ili NISKA

digitalWrite(13, HIGH); // postavite pin 13 na "visoko" stanje

vrijednost = digitalRead(port);

Opis:

Čita vrijednost na navedenom priključku

Mogućnosti:

luka: prozvani broj porta

Povratna vrijednost: Vraća trenutnu vrijednost na portu (VISOKA ili NISKA) tip int

int val;
val = digitalRead(12); // anketa 12. igle

Bilješka:

Ako ništa nije povezano s priključkom koji se čita, tada funkcija digitalRead() može nepravilno vraćati VISOKE ili NIZE vrijednosti.

Ulaz/izlaz analognog signala

vrijednost = analogRead(port);

Opis:

Čita vrijednost s navedenog analognog priključka. Freeduino sadrži 6 kanala, analogno-digitalni pretvarač 10 bita svaki. To znači da se ulazni napon od 0 do 5 V pretvara u cjelobrojnu vrijednost od 0 do 1023. Razlučivost očitanja je: 5 V/1024 vrijednosti = 0,004883 V/vrijednost (4,883 mV). Potrebno je otprilike 100 nS (0,0001 C) za očitavanje analogne ulazne vrijednosti, pa maksimalna brzina očitanja - približno 10 000 puta u sekundi.

Mogućnosti:

Povratna vrijednost: Vraća int broj u rasponu od 0 do 1023 pročitan s navedenog priključka.

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

Bilješka:

Analogni priključci definirani su kao ulaz signala prema zadanim postavkama i, za razliku od digitalnih priključnica, ne moraju se konfigurirati pozivanjem funkcije pinMode.

analogWrite(port, vrijednost);

Opis:

Izlaz analogne vrijednosti u priključak. Ova funkcija radi na: 3, 5, 6, 9, 10 i 11 Freeduino digitalnih priključaka.

Može se koristiti za promjenu svjetline LED-a, upravljanje motorom itd. Nakon poziva funkcije analogWrite, odgovarajući priključak počinje raditi u modu modulacije širine impulsa napona sve dok ne dođe do drugog poziva funkciji analogWrite (ili funkcije digitalRead / digitalWrite na istom priključku).

Mogućnosti:

port: broj analognog ulaza koji se ispituje

vrijednost: cijeli broj između 0 i 255. Vrijednost 0 generira 0 V na navedenom priključku; vrijednost 255 generira +5V na navedenom priključku. Za vrijednosti između 0 i 255, port počinje brzo izmjenjivati ​​između 0 i +5 V naponske razine - što je viša vrijednost, port češće generira VISOKU (5 V) razinu.

analogWrite(9, 128); // postavi pin 9 na vrijednost koja je ekvivalentna 2,5 V

Bilješka:

Nema potrebe pozivati ​​pinMode za postavljanje porta na izlazne signale prije poziva analogWrite.

Frekvencija generiranja signala je približno 490 Hz.

vrijeme = millis();

Opis:

Vraća broj milisekundi od pokretanja Freeduina trenutni program. Brojač će se preliti i resetirati nakon otprilike 9 sati.

Povratna vrijednost: vraća dugu vrijednost bez predznaka

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

odgoda(vrijeme_ms);

Opis:

Pauzira program na određeni broj milisekundi.

Mogućnosti:

time_ms – vrijeme odgode programa u milisekundama

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

kašnjenjeMikrosekunde

kašnjenje mikrosekundi(vrijeme_μs);

Opis:

Pauzira program na određeni broj mikrosekundi.

Mogućnosti:

time_μs – vrijeme odgode programa u mikrosekundama

kašnjenje u mikrosekundama (500); //pauza 500 mikrosekundi

pulsIn(port, vrijednost);

Opis:

Očitava puls (visoki ili niski) s digitalnog priključka i vraća trajanje impulsa u mikrosekundama.

Na primjer, ako je parametar "vrijednost" postavljen na HIGH pri pozivanju funkcije, tada pulseIn() čeka da visoka razina signala stigne na port. Od trenutka kada stigne, počinje odbrojavanje do prijema luke niska razina signal. Funkcija vraća duljinu impulsa ( visoka razina) u mikrosekundama. Radi s impulsima od 10 mikrosekundi do 3 minute. Imajte na umu da ova funkcija neće vratiti rezultat dok se ne otkrije puls.

Mogućnosti:

port: broj porta s kojeg očitavamo puls

vrijednost: vrsta pulsa HIGH ili LOW

Povratna vrijednost: vraća trajanje impulsa u mikrosekundama (upišite int)

int trajanje; // deklaracija varijable trajanja tipa int
trajanje = pulseIn(pin, HIGH); // mjerenje trajanja 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čunalu je odgovarajuća veza predstavljena USB COM priključkom.

Komunikacija se odvija preko digitalnih priključaka 0 i 1 i stoga ih nećete moći koristiti za digitalni I/O ako koristite serijske funkcije.

Serial.begin(baud_rate);

Opis:

Postavlja brzinu prijenosa informacija COM porta u bitovima po sekundi za serijski prijenos podataka. Za komunikaciju s računalom koristite jednu od ovih standardiziranih brzina: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 ili 115200. Također možete definirati druge brzine kada komunicirate s drugim mikrokontrolerom pomoću portovi 0 i 1.

Mogućnosti:

baud_rate: Brzina protoka podataka u bitovima po sekundi.

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

Serijski.dostupan

count = Serial.available();

Opis:

Prihvaćen od serijski priključak bajtovi završavaju u međuspremniku mikrokontrolera, odakle ih vaš program može čitati. Funkcija vraća broj bajtova akumuliranih u međuspremniku. Serijski međuspremnik može pohraniti do 128 bajtova.

Povratna vrijednost:

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

if (Serial.available() > 0) ( // Ako ima podataka u međuspremniku
// ovdje bi trebao biti prijem i obrada podataka
}

char = Serial.read();

Opis:

Čita sljedeći bajt iz međuspremnika serijski priključak.

Povratna vrijednost:

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

incomingByte = Serial.read(); // pročitati bajt

Opis:

Briše ulazni međuspremnik serijskog porta. Podaci u međuspremniku su izgubljeni, a daljnji pozivi Serial.read() ili Serial.available() imat će smisla za podatke primljene nakon Serial.flush() poziva.

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

Opis:

Izlazni podaci na serijski port.

Mogućnosti:

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

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

int b = 79;

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

int b = 79;

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

int b = 79;
Serial.print(b, OCT); //izvest će niz “117” u port

Serial.print(b, BIN) ispisuje ASCII niz - binarni prikaz brojevi b.

int b = 79;
Serial.print(b, BIN); //izvest će niz “1001111” u port

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

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

Serial.print(str) ako je str niz ili niz znakova, prenosi str na COM port bajt bajt.

char bajtova = (79, 80, 81); //niz od 3 bajta s vrijednostima 79,80,81
Serial.print("Ovdje naši bajtovi:"); //ispisuje redak "Ovdje naši bajtovi:"
Serial.print(bajtovi); //ispisuje 3 znaka s 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); //izbacit će znak “O” na port

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

int b = 79;
Serial.print(b); //izvest će niz “79” u port

Opis:

Funkcija Serial.println slična je funkciji Serial.print i ima iste opcije poziva. Jedina razlika je u tome što se nakon podataka izlaze dva dodatna znaka - znak za povratak na početak (ASCII 13 ili "\r") i znak za novi red (ASCII 10 ili "\n").

Primjer 1 i primjer 2 ispisat će istu stvar u port:

int b = 79;
Serial.print(b, DEC); //izvest će niz “79” u port
Serial.print("\r\n"); //prikazat će znakove "\r\n" – novi redak
Serial.print(b, HEX); //izvest će niz “4F” u port
Serial.print("\r\n");//ispisat će znakove "\r\n" – novi red

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

U monitoru serijskog porta dobivamo.

Najbolji članci na temu