Arduino komutları ve işlevleri. Arduino ve uyumlu programlama dilleri. Değişkenler ve veri türleri

Tanıtım

Freeduino / Arduino özel bir programlama dilinde programlanmıştır - C / C ++ tabanlıdır ve herhangi bir işlevini kullanmanıza izin verir. Açıkçası, Arduino derleyicisi olmadığı gibi ayrı bir Arduino dili yoktur - yazılan programlar (minimum değişikliklerle) bir C/C++ programına dönüştürülür ve ardından AVR-GCC derleyicisi tarafından derlenir. Bu nedenle, aslında, AVR mikrodenetleyicileri için uzmanlaşmış bir C / C ++ varyantı kullanılır.

Aradaki fark, basit bir geliştirme ortamına ve mikro denetleyicideki çevre birimlerine erişimi kolaylaştıran bir dizi temel kitaplığa sahip olmanızdır.

Katılıyorum, bir hattan çağrı yaparak 9600 bps hızında bir seri bağlantı noktası ile çalışmaya başlamak çok uygundur:

Seri.başlangıç ​​(9600);

Ve "çıplak" C / C ++ kullanırken, mikrodenetleyicinin belgeleriyle ilgilenmeniz ve şöyle bir şey çağırmanız gerekir:

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);

İşte Arduino programlamanın temel işlevlerine ve özelliklerine hızlı bir genel bakış. C / C++ dillerinin sözdizimine aşina değilseniz, bu konuyla ilgili herhangi bir literatüre veya İnternet kaynaklarına başvurmanızı öneririz.

Öte yandan, sunulan tüm örnekler çok basittir ve büyük olasılıkla ek literatür okumadan bile kaynak kodunu anlamakta ve kendi programlarınızı yazmakta zorluk çekmeyeceksiniz.

Daha eksiksiz belgeler (İngilizce) projenin resmi web sitesinde sunulmaktadır - http://www.arduino.cc. Ayrıca bir forum, ek kütüphanelere bağlantılar ve bunların açıklamaları da bulunmaktadır.

Arduino projesinin resmi sitesindeki açıklamaya benzer şekilde, bir "port", ilgili numaranın altındaki konektöre getirilen bir mikro denetleyici kontağı anlamına gelir. Ayrıca seri iletişim portu (COM portu) bulunmaktadır.

Program yapısı

Programınızda iki ana fonksiyon tanımlamalısınız: setup() ve loop().

Kurulum () işlevi, Freeduino kartının her açılışından veya sıfırlanmasından sonra bir kez çağrılır. Değişkenleri başlatmak, dijital bağlantı noktası modlarını ayarlamak vb. için kullanın.

Döngü () işlevi, gövdesinde açıklanan komutları sırayla tekrar tekrar yürütür. Onlar. fonksiyon bittikten sonra tekrar çağrılır.

Basit bir örneğe bakalım:

geçersiz kurulum () // başlangıç ​​ayarları
{
startSeri (9600); // seri portun hızını 9600 bps olarak ayarla
pinMode (3, GİRİŞ); // veri girişi için 3. portu ayarla
}

// Program 3. portu üzerinde bir sinyal olup olmadığını kontrol eder ve bir yanıt gönderir.
// bilgisayarın seri portuna metin mesajı olarak
geçersiz döngü () // program gövdesi
{
if (digitalRead (3) == HIGH) // 3. portu yoklama koşulu
seriWrite ("H"); // COM portuna "H" harfi şeklinde bir mesaj gönder
Başka
seriWrite ("L"); // COM portuna "L" harfi şeklinde bir mesaj gönder
gecikme (1000); // 1 sn geciktir.
}

pinMode (bağlantı noktası, mod);

Açıklama:

Bir sinyal girişi veya çıkışı için belirtilen bağlantı noktasını yapılandırır.

Seçenekler:

port - modunu ayarlamak istediğiniz port numarası (0'dan 13'e kadar tamsayı değeri).

modu GİRİŞ veya ÇIKIŞ'tır.

pinMode (13, ÇIKIŞ); // 13. pin çıktı olacak
pinMode (12, GİRİŞ); // ve 12. giriş

Not:

Analog girişler, 14 (analog giriş 0) ila 19 (analog giriş 5) arasında sayılarla ifade edildiğinde dijital girişler / çıkışlar olarak kullanılabilir

digitalWrite (bağlantı noktası, değer);

Açıklama:

Belirtilen portta yüksek (YÜKSEK) veya düşük (DÜŞÜK) voltaj seviyesini ayarlar.

Seçenekler:

bağlantı noktası: bağlantı noktası numarası

değer: YÜKSEK veya DÜŞÜK

digitalWrite (13, YÜKSEK); // 13. pimi "yüksek" duruma ayarlayın

değer = digitalRead (bağlantı noktası);

Açıklama:

Belirtilen bağlantı noktasında bir değer okur

Seçenekler:

port: yoklanacak port numarası

Dönüş değeri: int türündeki bağlantı noktasındaki (HIGH veya LOW) geçerli değeri döndürür

int değeri;
val = dijitalOkuma (12); // 12. çıktıyı yokla

Not:

Okunan bağlantı noktasına hiçbir şey bağlı değilse, digitalRead () rastgele YÜKSEK veya DÜŞÜK değerleri döndürebilir.

Analog sinyal girişi / çıkışı

değer = analogRead (bağlantı noktası);

Açıklama:

Belirtilen analog bağlantı noktasından bir değer okur. Freeduino, her biri 10 bit A / D dönüştürücü olmak üzere 6 kanal içerir. Bu, 0 ila 5V arasındaki bir giriş voltajının 0 ila 1023 arasındaki bir tamsayı değerine dönüştürüldüğü anlamına gelir. Okuma çözünürlüğü: 5V / 1024 değerler = 0,004883 V / değer (4.883 mV). Analog giriş değerini okumak yaklaşık 100 nS (0,001 C) alır, bu nedenle maksimum okuma hızı saniyede yaklaşık 10.000 defadır.

Seçenekler:

Dönüş değeri: belirtilen bağlantı noktasından okunan, 0 ile 1023 aralığında int türünde bir sayı döndürür.

int değeri;
val = analogOku (0); // 0m analog girişindeki değeri oku

Not:

Analog portlar varsayılan olarak sinyal girişi için tanımlanır ve dijital portların aksine pinMode işlevine yapılan bir çağrı ile yapılandırılmaları gerekmez.

analogWrite (bağlantı noktası, değer);

Açıklama:

Bağlantı noktasına bir analog değer verir. Bu özellik şu cihazlarda çalışır: 3, 5, 6, 9, 10 ve 11 Freeduino dijital bağlantı noktası.

Bir LED'in parlaklığını değiştirmek, bir motoru kontrol etmek vb. için kullanılabilir. AnalogWrite'a yapılan bir çağrıdan sonra, ilgili port, bir sonraki analogWrite (veya aynı port üzerinde digitalRead / digitalWrite) çağrısına kadar PWM modunda çalışmaya başlar.

Seçenekler:

bağlantı noktası: sorgulanan analog giriş sayısı

değer: 0 ile 255 arasında bir tam sayı. 0 değeri, belirtilen bağlantı noktasında 0 V üretir; 255 değeri, belirtilen bağlantı noktasında +5 V üretir. 0 ile 255 arasındaki değerler için, bağlantı noktası 0 ve +5 V voltaj seviyeleri arasında hızla değişmeye başlar - değer ne kadar yüksek olursa, bağlantı noktası o kadar sıklıkla YÜKSEK (5 V) bir seviye oluşturur.

analogWrite (9, 128); // pin 9'u 2.5V'a eşdeğer bir değere ayarlayın

Not:

AnalogWrite'ı çağırmadan önce portu sinyal pinine ayarlamak için pinMode fonksiyonunu çağırmak gerekli değildir.

Sinyal oluşturma frekansı yaklaşık 490 Hz'dir.

zaman = milis ();

Açıklama:

Freeduino'nun mevcut programı yürütmesinden bu yana geçen milisaniye sayısını döndürür. Yaklaşık 9 saat sonra sayaç taşacak ve sıfırlanacaktır.

Dönüş değeri: işaretsiz uzun bir değer döndürür

imzasız uzun süre; // unsigned long türündeki değişkenin bildirimi
zaman = milis (); // milisaniye sayısını ilet

gecikme (zaman_ms);

Açıklama:

Programı belirtilen milisaniye sayısı kadar askıya alır.

Seçenekler:

time_ms - milisaniye cinsinden program gecikme süresi

gecikme (1000); // 1 saniye duraklat

gecikmeMikrosaniye

gecikmeMikrosaniye (time_μs);

Açıklama:

Programı belirtilen mikrosaniye sayısı kadar duraklatır.

Seçenekler:

μs_time - mikrosaniye cinsinden program gecikme süresi

gecikmeMikrosaniye (500); // 500 mikrosaniye duraklat

pulseIn (bağlantı noktası, değer);

Açıklama:

Dijital bağlantı noktasından bir darbe (yüksek veya düşük) okur ve darbe süresini mikrosaniye cinsinden döndürür.

Örneğin, fonksiyon çağrıldığında değer parametresi HIGH olarak ayarlanırsa, pulseIn () portta yüksek bir sinyal seviyesi bekler. Geldiği andan itibaren port düşük sinyal seviyesi alana kadar geri sayım başlar. İşlev, darbenin uzunluğunu (yüksek seviye) mikrosaniye cinsinden döndürür. 10 mikrosaniyeden 3 dakikaya kadar olan darbelerle çalışır. Bu işlevin bir darbe algılanana kadar bir sonuç döndürmeyeceğini unutmayın.

Seçenekler:

port: nabzın okunacağı port numarası

değer: darbe tipi YÜKSEK veya DÜŞÜK

Dönüş değeri: darbenin süresini mikrosaniye cinsinden döndürür (int tipi)

int süre; // int türünde bir süre değişkeni bildiriyor
süre = pulseIn (pin, YÜKSEK); // nabız süresini ölçün

Seri veri iletimi

Freeduino, Freeduino / Arduino cihazları arasındaki iletişimin yanı sıra bir bilgisayarla iletişim için kullanılabilen yerleşik bir seri denetleyiciye sahiptir. Bilgisayarda, ilgili bağlantı bir USB COM bağlantı noktası ile temsil edilir.

İletişim 0 ve 1 numaralı dijital bağlantı noktaları üzerinden gerçekleşir ve bu nedenle seri veri işlevlerini kullanıyorsanız bunları dijital G / Ç için kullanamazsınız.

Serial.başlangıç ​​(baud hızı);

Açıklama:

Seri veri iletimi için COM portunun baud hızını saniyede bit olarak ayarlar. Bilgisayarla iletişim kurmak için şu normalleştirilmiş hızlardan birini kullanın: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 veya 115200. 0 ve 1 numaralı bağlantı noktaları.

Seçenekler:

baud hızı: saniyedeki bit cinsinden veri akış hızı.

Seri.başlangıç ​​(9600); // hızı 9600 bps olarak ayarla

seri.mevcut

sayı = Seri.kullanılabilir ();

Açıklama:

Seri bağlantı noktası aracılığıyla alınan baytlar, programınızın okuyabileceği mikro denetleyici arabelleğine gider. İşlev, arabellekte biriken bayt sayısını döndürür. Seri arabellek 128 bayta kadar depolayabilir.

Döndürülen değer:

Bir int - sıralı arabellekte okunabilecek bayt sayısı veya hiçbir şey yoksa 0 döndürür.

if (Serial.available ()> 0) (// arabellekte veri varsa
// veri alma ve işleme olmalı
}

karakter = Seri.read();

Açıklama:

Seri bağlantı noktası arabelleğinden sonraki baytı okur.

Döndürülen değer:

Seri bağlantı noktasından gelen verilerin ilk kullanılabilir baytı veya gelen veri yoksa -1.

incomingByte = Serial.read(); // bayt oku

Açıklama:

Seri bağlantı noktası giriş arabelleğini temizler. Arabellekteki veriler kaybolur ve Serial.read () veya Serial.available () öğesine yapılan aramalar, Serial.flush () çağrısından sonra alınan veriler için anlamlı olacaktır.

Seri.flush (); // Arabelleği temizle - sıfırdan veri almaya başla

Açıklama:

Seri porta veri çıkışı.

Seçenekler:

İşlev, çıktı verilerinin türüne ve biçimine bağlı olarak çeşitli arama biçimlerine sahiptir.

Serial.print (b, DEC) bir ASCII dizesi yazdırır - b'nin ondalık gösterimi.

int b = 79;

Serial.print (b, HEX) bir ASCII dizesi yazdırır - b'nin onaltılık gösterimi.

int b = 79;

Serial.print (b, OCT) bir ASCII dizesi yazdırır - b'nin sekizli gösterimi.

int b = 79;
Seri.baskı (b, Ekim); // "117" dizesini bağlantı noktasına gönderecek

Serial.print (b, BIN) bir ASCII dizesi yazdırır - b'nin ikili gösterimi.

int b = 79;
Seri.baskı (b, BIN); // "1001111" dizesini bağlantı noktasına gönderecek

Serial.print (b, BYTE), b'nin en az anlamlı baytını yazdırır.

int b = 79;
Serial.print (b, BYTE); // 79 sayısını (bir bayt) yazdıracak. monitörde
// seri port "O" karakterini alacak - onun
// kod 79

Serial.print (str) str bir dize veya karakter dizisiyse, str'yi COM bağlantı noktasına bayt olarak aktarır.

karakter baytları = (79, 80, 81); // 79,80,81 değerlerine sahip 3 baytlık dizi
Serial.print ("İşte baytlarımız:"); // "İşte baytlarımız:" dizesini görüntüler
Serial.print (bayt); // 79,80,81 kodlu 3 karakter görüntüler -
// bunlar "OPQ" karakterleridir

Serial.print (b) b, bayt veya karakter türündeyse, b numarasını bağlantı noktasına yazdırır.

karakter b = 79;
Seri.baskı (b); // "O" karakterini porta gönderecek

Serial.print (b), b bir tamsayı türündeyse, b'nin ondalık gösterimini bağlantı noktasına yazdırır.

int b = 79;
Seri.baskı (b); // "79" dizesini bağlantı noktasına gönderecek

Açıklama:

Serial.println işlevi Serial.print işlevine benzer ve aynı arama seçeneklerine sahiptir. Tek fark, verilerden sonra iki ek karakterin çıkmasıdır - bir satır başı (ASCII 13 veya "\ r") ve bir yeni satır karakteri (ASCII 10 veya "\ n").

Örnek 1 ve örnek 2, porta aynı çıktıyı verecektir:

int b = 79;
Seri.baskı (b, Aralık); // "79" dizesini bağlantı noktasına gönderecek
Seri.print ("\ r \ n"); // "\ r \ n" karakterlerini gösterecek - satır besleme
Seri.baskı (b, HEX); // "4F" dizesini bağlantı noktasına gönderecek
Serial.print ("\ r \ n"); // "\ r \ n" karakterlerini yazdıracak - satır besleme

int b = 79;
Seri.println (b, Aralık); // "79 \ r \ n" dizesini bağlantı noktasına gönderecek
Seri.println (b, HEX); // porta "4F \ r \ n" dizesini gönderecek

Seri port monitöründe alıyoruz.

Bu ders, Arduino sistemlerini C'de programlamak için gereken minimum bilgiyi sağlar. Bunu yalnızca görüntüleyebilir ve gelecekte referans olarak kullanabilirsiniz. Diğer sistemlerde C ile programlamış olanlar bu makaleyi atlayabilirler.

Bunun minimum bilgi olduğunu tekrarlıyorum. İşaretçilerin, sınıfların, dize değişkenlerinin vb. açıklaması sonraki derslerde verilecektir. Bir şey net değilse endişelenmeyin. İlerleyen derslerde birçok örnek ve açıklama olacaktır.

Arduino programının yapısı.

Arduino programının yapısı oldukça basittir ve minimal versiyonda setup() ve loop() olmak üzere iki kısımdan oluşmaktadır.

geçersiz kurulum () (

boşluk döngüsü () (

Kurulum () işlevi, denetleyiciye güç verildiğinde veya sıfırlandığında bir kez yürütülür. Genellikle, değişkenlerin ilk ayarları, kayıtlar içinde gerçekleşir. İşlev, içinde hiçbir şey olmasa bile programda bulunmalıdır.

Kurulum () tamamlandıktan sonra kontrol, döngü () işlevine geçer. Kendi gövdesine yazılan komutları (küme parantezler arasında) sonsuz bir döngü içinde yürütür. Aslında bu komutlar, denetleyicinin tüm algoritmik eylemlerini gerçekleştirir.

Orijinal C sözdizimi kuralları.

; noktalı virgülİfadeler istediğiniz kadar boşluk, satır sonu içerebilir. İfadenin sonlandırılması "noktalı virgül" karakteriyle belirtilir.

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

() küme parantezleri bir işlev veya ifade bloğu tanımlayın. Örneğin, setup() ve loop() fonksiyonlarında.

/ *… * / Yorum bloğu, mutlaka kapatın.

/ * bu bir yorum bloğudur * /

// tek satırlık yorum, kapatmaya gerek yok, satır sonuna kadar geçerlidir.

// bu bir satır yorumdur

Değişkenler ve veri türleri.

Değişken, bilgileri depolayan bir bellek hücresidir. Program, ara hesaplama verilerini depolamak için değişkenleri kullanır. Hesaplamalar için farklı formatlarda, farklı bit derinliklerinde veriler kullanılabilir, bu nedenle C dilindeki değişkenler aşağıdaki tiplere sahiptir.

Veri tipi Bit derinliği Sayı aralığı
boole 8 doğru yanlış
karakter 8 -128 … 127
imzasız karakter 8 0 … 255
bayt 8 0 … 255
int 16 -32768 … 32767
imzasız int 16 0 … 65535
kelime 16 0 … 65535
uzun 32 -2147483648 … 2147483647
imzasız uzun 32 0 … 4294967295
kısa boylu 16 -32768 … 32767
batmadan yüzmek 32 -3.4028235+38 … 3.4028235+38
çift 32 -3.4028235+38 … 3.4028235+38

Veri türleri, gerekli hesaplama doğruluğuna, veri biçimlerine vb. göre seçilir. Örneğin 100'e kadar sayan bir sayaç için uzun tip seçmemelisiniz. Çalışacaktır, ancak işlem daha fazla veri ve program belleği alacak ve daha fazla zaman alacaktır.

Değişken bildirimleri.

Veri tipi ve ardından değişkenin adı belirtilir.

int x; // int türünde x adlı bir değişkenin bildirimi
yüzer genişlikBox; // float tipinde widthBox adında bir değişken tanımla

Tüm değişkenler kullanılmadan önce bildirilmelidir.

Programın herhangi bir bölümünde bir değişken bildirilebilir, ancak hangi program bloklarının onu kullanabileceğine bağlıdır. Onlar. değişkenlerin kapsamları vardır.

  • Programın başında void setup() işlevinden önce bildirilen değişkenler genel kabul edilir ve programın herhangi bir yerinde kullanılabilir.
  • Yerel değişkenler, bir for döngüsü gibi işlevlerin veya blokların içinde bildirilir ve yalnızca bildirilen bloklarda kullanılabilir. Aynı ada sahip ancak farklı kapsamlara sahip birkaç değişken mümkündür.

int modu; // değişken tüm fonksiyonlar için kullanılabilir

geçersiz kurulum () (
// boş blok, başlangıç ​​ayarı gerekmez
}

boşluk döngüsü () (

uzun sayım; // sayma değişkeni yalnızca döngü () işlevinde kullanılabilir

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

Bir değişken bildirirken, başlangıç ​​değerini ayarlayabilirsiniz (başlat).

int x = 0; // başlangıç ​​değeri 0 olan bir x değişkeni tanımla
karakter d = 'a'; // d değişkeni, "a" karakter koduna eşit başlangıç ​​değeriyle bildirilir

Farklı veri türleri ile aritmetik işlemler sırasında veri türleri otomatik olarak dönüştürülür. Ancak her zaman açık bir dönüşüm kullanmak en iyisidir.

int x; // int değişken
karakter y; // karakter değişkeni
int z; // int değişken

z = x + (int) y; // y değişkeni açıkça int'ye dönüştürülür

Aritmetik işlemler.

İlişki işlemleri.

Mantıksal işlemler.

İşaretçiler üzerinde işlemler.

Bitsel işlemler.

& VE
| VEYA
^ ÖZEL VEYA
~ TERSİNE
<< SOLA KAY
>> SAĞA DEĞİŞTİR

Karma atama işlemleri.

Seçenek seçimi, program yönetimi.

EĞER ifadesi parantez içindeki koşulu test eder ve koşul doğruysa sonraki ifadeyi veya küme ayracı bloğunu değerlendirir.

if (x == 5) // x = 5 ise z = 0 yürütülür
z = 0;

if (x> 5) // eğer x>
(z = 0; y = 8;)

EĞER ... BAŞKA iki seçenek arasından seçim yapmanızı sağlar.

if (x> 5) // x> 5 ise, z = 0, y = 8 bloğu;
{
z = 0;
y = 8;
}

{
z = 0;
y = 0;
}

ELSE IF- birden fazla seçim yapmanızı sağlar

if (x> 5) // x> 5 ise, z = 0, y = 8 bloğu;
{
z = 0;
y = 8;
}

else if (x> 20) // eğer x> 20 ise bu blok yürütülür
{
}

else // yoksa bu blok yürütülür
{
z = 0;
y = 0;
}

YER DEĞİŞTİR- çoktan seçmeli. Bir değişkeni (örnekte x'tir) birkaç sabitle (örnek 5 ve 10'da) karşılaştırmanıza ve değişkenin bir sabite eşit olduğu bir blok yürütmenize izin verir.

anahtarı (x) (

durum 5:
// x = 5 ise kod çalıştırılır
kırmak;

durum 10:
// x = 10 ise kod çalıştırılır
kırmak;

varsayılan:
// önceki değerlerden hiçbiri eşleşmezse kod yürütülür
kırmak;
}

Döngü için... Tasarım, belirli sayıda yineleme ile döngüler düzenlemenize olanak tanır. Sözdizimi şöyle görünür:

for (döngünün başlangıcından önceki eylem;
döngünün devamı için koşul;
her yinelemenin sonunda eylem) (

// döngü gövde kodu

100 yinelemeli bir döngü örneği.

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

{
toplam = toplam + I;
}

WHILE döngüsü... Operatör, yapı ile döngüler düzenlemenize izin verir:

while (ifade)
{
// döngü gövde kodu
}

Döngü, parantez içindeki ifade doğru olduğu sürece yürütülür. 10 yineleme için bir döngü örneği.

x = 0;
süre (x< 10)
{
// döngü gövde kodu
x++;
}

YAPARKEN- çıkışta bir koşulla döngü.

yapmak
{
// döngü gövde kodu
) while (ifade);

Döngü, ifade doğru olduğu sürece çalışır.
KIRMAK- döngü çıkış operatörü. for, while, do while döngülerinin yürütülmesini kesmek için kullanılır.

x = 0;
süre (x< 10)
{
(z> 20) kırılırsa; // z> 20 ise döngüden çık
// döngü gövde kodu
x++;
}

GOTO Koşulsuz bir atlama operatörüdür.

metka1'e git; // metka1'e git
………………
metka1:

DEVAM ET- operatörleri döngü gövdesinin sonuna atlamak.

x = 0;
süre (x< 10)
{
// döngü gövde kodu
(z> 20) devam ederse; // z> 20 ise, döngü gövdesinin başına dön
// döngü gövde kodu
x++;
}

Diziler.

Dizi, birkaç değişkenin sırayla depolandığı bir bellek alanıdır.

Bir dizi bu şekilde bildirilir.

int yaş; // int türünde 10 değişkenlik dizi

yüzer ağırlık; // 100 kayan değişken dizisi

Bildirildiğinde, diziler başlatılabilir:

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

Dizi değişkenlerine şu şekilde erişilir:

x = yaş; // x'e 5 dizi öğesinden bir değer atanır.
yaş = 32; // 9 dizi öğesi 32'ye ayarlandı

Dizi öğeleri her zaman sıfırdan numaralandırılır.

Fonksiyonlar.

İşlevler, aynı eylemleri farklı veriler üzerinde gerçekleştirmenize olanak tanır. İşlev şunları içerir:

  • onun çağrıldığı isim;
  • argümanlar - işlevin hesaplamak için kullandığı veriler;
  • işlev tarafından döndürülen veri türü.

Kurulum () ve döngü () işlevlerinin dışında kullanıcı tanımlı bir işlev tanımlanır.

geçersiz kurulum () (
// program başladığında kod bir kez yürütülür
}

boşluk döngüsü () (
// ana kod, bir döngüde yürütülür
}

// functionName adlı özel bir işlevin bildirimi
tip fonksiyonAdı (tür argümanı1, tip argümanı1, ..., tip argümanı)
{
// fonksiyon gövdesi
dönüş ();
}

İki bağımsız değişkenin karelerinin toplamını hesaplayan bir fonksiyon örneği.

int toplamQwadr (int x, int y)
{
dönüş (x * x + y * y);
}

İşlev çağrısı şöyle gider:

d = 2; b = 3;
z = toplamQwadr (d, b); // z, d ve b değişkenlerinin karelerinin toplamı olacak

İşlevler yerleşik, özel, eklentidir.

Çok kısaca, ancak bu veriler Arduino sistemleri için C programları yazmaya başlamak için yeterli olmalıdır.

Bu derste anlatmak istediğim son şey, C'de program tasarlamanın nasıl bir gelenek olduğudur. Bu dersi ilk kez okuyorsanız, bu bölümü atlamalı ve daha sonra yapacak bir şeyiniz olduğunda geri dönmelisiniz. tasarım.

Programların dış tasarımının temel amacı, programların okunabilirliğini artırmak, biçimsel hataların sayısını azaltmaktır. Bu nedenle, bu hedefe ulaşmak için tüm önerileri güvenle ihlal edebilirsiniz.

C'deki isimler

Veri türlerini temsil eden adlar büyük/küçük harf karışık olmalıdır. İsmin ilk harfi büyük (büyük harf) yazılmalıdır.

Sinyal, Zaman Sayısı

Değişkenler karışık adlarla yazılmalıdır, ilk harf küçük harftir (küçük harf).

Kategori:. Yer imlerine ekleyebilirsiniz.

Arduino programlama dili, programlama dünyasında yaygın olarak kullanılan C/C++ diline dayanmaktadır.

Arduino'nun hedef kitlesi, robotik ve basit otomasyon sistemleri alanında profesyonel olmayan kullanıcılardır. Ana ürün, çok çeşitli görevleri yerine getirebilecek çeşitli cihazlar oluşturmanın mümkün olduğu bir dizi panodur.

Örnek olarak, bu şirket tarafından üretilen bir dizi tahtadan evcil hayvanlarınız için otomatik bir yemlik oluşturabilirsiniz. Ve bu en basit örneklerden sadece biri. Olası uygulamalarının kapsamı yalnızca kullanıcıların hayal gücü ile sınırlıdır.

Arduino markası altında üretilen baskılı devre kartlarına ek olarak, programcılar çemberinde yaygın olarak bilinen dile dayanan kendi programlama dili Arduino'ya sahiptirler. C / C++... Ne olduğuna daha yakından bakalım.

Arduino programlama dili, kullanımının ana hedef kitlesi amatörler olduğu için öğrenmesi oldukça kolaydır. Ancak, mikrodenetleyicileri programlamak için en iyi dillerden biri olarak kabul edilir.

Noktalı virgül;

Arduino programlama dilinde yazılan her ifadeyi noktalı virgül takip etmelidir. Örneğin:

Int LEDpin = 9;

Bu ifadede, bir değişkene bir değer atıyoruz ve sonunda noktalı virgülü görüyoruz. Bu, derleyiciye kod parçasını tamamladığınızı ve bir sonraki parçaya geçtiğinizi söyler. Arduino kodundaki noktalı virgül, tam bir ifadeyi diğerinden ayırır.

Tek satırlık yorumlar için çift ters eğik çizgi //

// Çift eğik çizgiden sonraki her şey gri olacak ve program tarafından okunmayacak

Yorumlar, kodunuzu yorumlamak için kullandığınız şeydir. İyi kod iyi yorumlanır. Yorumlar, size ve kodunuzu tesadüfen bulabilecek herkese, onu yazarken nasıl düşündüğünüzü anlatmak içindir. İyi bir yorum şöyle bir şey olurdu:

// LED'i Arduino'nun bu pinine bağlayın int LEDpin = 9;

Şimdi 3 ay sonra bile bu programa baktığımda LED'in nereye bağlandığını biliyorum.

Derleyici yorumları görmezden gelir, böylece istediğinizi yazabilirsiniz. Bir yorum için çok fazla metne ihtiyacınız varsa, aşağıda gösterilen çok satırlı yorumu kullanabilirsiniz:

/ * Tek bir ters eğik çizgi ve ardından bir yıldız işaretiyle birlikte çok satırlı bir yorum açılır. Siz yorumu önce bir yıldız, ardından bir ters eğik çizgi * / kullanarak kapatana kadar, aşağıdaki her şey grileşecek ve derleyici tarafından yok sayılacaktır.

Yorumlar, kod dipnotlarına benzer, ancak sayfaların altındaki kitaplarda bulunanlardan daha yaygındır.

Kıvrımlı parantezler ()

Kıvrımlı parantezler, bir fonksiyonun gerçekleştirdiği talimatları eklemek için kullanılır (fonksiyonları daha sonra tartışacağız). Her zaman bir açık küme ayracı ve bir kapanış küme ayracı vardır. Küme parantezini kapatmayı unutursanız, derleyici bir hata kodu yazdıracaktır.

Void döngüsü () (// bu küme ayracı açılır // burada harika program) // bu küme ayracı kapanır

Unutmayın - hiçbir kaşlı ayraç kapatılamaz!

Fonksiyonlar ()

Şimdi fonksiyonlar hakkında konuşma zamanı. İşlevler, onları daha kolay kullanabilmeniz için belirli anahtar kelimelerle kapsüllenmiş sık kullanılan kod parçacıklarıdır. Örneğin, köpeğinizi yıkamanız gerekebilir diye aşağıdaki talimat dizisi bir işlev olabilir:

  1. bir kova al
  2. Suyla doldurun
  3. sabun ekle
  4. bir köpek bul
  5. köpeği köpürt
  6. Köpeği yıka
  7. Köpeği durulayın
  8. kuru köpek
  9. Kovayı bir kenara koyun

Bu basit talimat seti, WashDog diyebileceğimiz bir fonksiyon içine alınabilir. Tüm bu talimatları her takip etmek istediğimizde, sadece WashDog ve voila yazarız - tüm talimatlar yürütülür.

Arduino, çevrede sıklıkla kullanılan belirli özelliklere sahiptir. Bunları girdiğinizde fonksiyon adı turuncu olacaktır. Örneğin pinMode () işlevi, bir Arduino'nun pin modunu belirtmek için kullanılan yaygın bir işlevdir.

pinMode işlevinden sonraki parantezler ne olacak? Birçok fonksiyon argüman gerektirir. Argüman, işlevin çalıştığında kullandığı bilgidir. WashDog işlevimiz için, argümanlar köpeğin adı ve sabun türünün yanı sıra kovanın sıcaklığı ve boyutu olabilir.

PinModu (13, ÇIKIŞ); // Arduino pin modunu ayarlar

Argüman 13, pim 13'e atıfta bulunur ve ÇIKIŞ, pimin çalışmasını istediğiniz moddur. Bu argümanları girdiğinizde terminolojide buna veri aktarma deniyor, fonksiyona gerekli bilgileri iletiyorsunuz. Tüm işlevler bağımsız değişken gerektirmez, ancak açma ve kapama parantezleri boş da olsa kalır.

Milli (); // Arduino'nun başlaması için geçen süreyi milisaniye cinsinden alır

ÇIKIŞ kelimesinin genellikle mavi olduğuna dikkat edin. Arduino programlama dili, sıklıkla kullanılan belirli anahtar kelimelere sahiptir ve mavi renk onları tanımlamaya yardımcı olur. Arduino IDE onları otomatik olarak maviye çevirir.

geçersiz kurulum ()

Kurulum () işlevi adından da anlaşılacağı gibi Arduino kartını yapılandırmak için kullanılır. Arduino, kurulumdan () sonra küme parantezleri arasındaki tüm kodu yalnızca bir kez yürütür. Kurulumda () gerçekleşen tipik şeyler, örneğin, kişi moduna göre ayarlamadır:

Void setup () (// küme parantezleri arasındaki kod yalnızca bir kez yürütülür)

Kurulumdan () önce boşluğun ne anlama geldiğini merak ediyor olabilirsiniz. Void, işlevin bilgi döndürmediği anlamına gelir.

Bazı işlevler değerleri döndürür - DogWash işlevimiz, köpeği boşaltmak için gereken kova sayısını döndürebilir. analogRead () işlevi, 0 ile 1023 arasında bir tamsayı değeri döndürür. Bu şu anda biraz garip görünüyorsa, endişelenmeyin, ilerledikçe tüm yaygın Arduino işlevlerini ele alacağız.

Kurulum () hakkında bilmeniz gereken birkaç şeye göz atalım:

  1. setup () yalnızca bir kez çalışır;
  2. setup (), Arduino çizimindeki ilk fonksiyon olmalıdır;
  3. setup () açılıp kapanan kaşlı ayraçlara sahip olmalıdır.

boşluk döngüsü ()

Arduino geliştiricilerini sevmelisiniz çünkü fonksiyon adlarını kendileri için konuşturmuşlardır. Adından da anlaşılacağı gibi, döngü ()'deki küme parantezleri arasındaki tüm kodlar defalarca tekrarlanır ve döngü kelimesi tam olarak "döngü" olarak çevrilir. Döngü () işlevi, programınızın gövdesinin gideceği yerdir.

setup() işlevinde olduğu gibi, loop() işlevi herhangi bir değer döndürmez, bu nedenle öncesinde void kelimesi gelir.

Void loop () (// burada belirttiğiniz kod ne olursa olsun tekrar tekrar çalıştırılır)

Kodun tek bir büyük döngüde çalışması size garip mi geliyor? Bu bariz varyasyon eksikliği bir yanılsamadır. Kodunuzun çoğu, yeni eylemleri tetikleyecek belirli bekleme koşullarına sahip olacaktır.

Arduino ile çalışan başka programlar var mı?

Resmi Arduino IDE'ye ek olarak, ürünlerini Arduino tabanlı mikrodenetleyicilerle çalışmak için sunan üçüncü taraf programlar vardır.

Benzer bir dizi işlev bize Processing adlı bir program tarafından sağlanabilir. Her ikisi de aynı motor üzerine inşa edildiğinden Arduino IDE'ye çok benzer. İşleme, orijinal programdan daha düşük olmayan kapsamlı bir işlev grubuna sahiptir. Seri yüklenebilir kitaplık ile kullanıcı, pano ile İşleme arasındaki veri aktarımları arasında bir bağlantı oluşturabilir ve panoyu programları doğrudan bilgisayarımızdan yürütmeye zorlayabiliriz.

Orijinal programın başka bir ilginç versiyonu var. Buna B4R denir ve temel farkı, temel olarak C dilinin değil, başka bir programlama dilinin kullanılmasıdır - Temel. Bu yazılım ürünü ücretsizdir. Bu ürünün yaratıcıları tarafından yazılanlar da dahil olmak üzere, onunla çalışmak için iyi eğitimler var.

Arduino IDE'nin ücretli sürümleri de vardır. Bunlardan biri PROGROMINO programıdır. Başlıca avantajı, kod tamamlama olasılığıdır. Bir programı derlerken, artık referans kitaplarında bilgi aramanıza gerek kalmayacak. Programın kendisi, belirli bir prosedürü kullanmak için size olası seçenekler sunacaktır. Seti, orijinal programda bulunmayan ve panolarla çalışmanızı kolaylaştırabilecek çok daha ilginç işlevler içerir.

Arduino yarışmacıları

Çeşitli elektronik devreler ve robotikler oluşturmak için mikrodenetleyicilerin üretimine yönelik bu pazar, dünya çapında birçok hayrana sahiptir. Bu durum, sadece benzer ürünler sunan rakiplerin değil, pazardaki görünümüne de katkıda bulunuyor. Bunlara ek olarak, çeşitli kalitede önemli sayıda sahte üretilir. Bazıları aynı kalitede oldukları için orijinallerinden ayırt etmek çok zordur, diğerleri ise çok kötü özelliklere sahiptir ve orijinal ürünlerle hiç çalışmayabilir.

Mikroişlemciler için JavaScript yorumlayıcılarını destekleyen Arduino kartları bile var. Her şeyden önce, C yerine Java dilini kullanmak isteyenler için uygundurlar. Sonuçta, daha basittir ve sonuçları daha yüksek bir hızda elde etmenizi sağlar. Ancak bu kartların arduinoya göre daha pahalı olması önemli bir dezavantaj.

Eğer bir hobi arıyorsanız ve elektrik mühendisliği gibi bir yöne ilgi duyuyorsanız bunun için Arduino'yu güvenle tercih edebilirsiniz. Bu hobinin birçok avantajı var. Bu ders farklı alanlarda bilgili olmanızı gerektireceğinden, entelektüel olarak gelişeceksiniz.

Eğlencenin ötesinde, hobiniz günlük hayatınızı kolaylaştırmak için kullanabileceğiniz tonlarca faydalı ürün yaratmanıza yardımcı olacaktır. Her seferinde hobinizi kullanmanın daha fazla yeni yolunu bulacaksınız.

Çok sayıda ders kitabı ve öğreticinin varlığı sayesinde bu derste ustalaşmak o kadar zor olmayacak. Gelecekte, bilgilerini sizinle paylaşacak ve sizi yeni deneyler yapmak için teşvik edecek, dünya çapında benzer düşünen birçok insan bulacaksınız!

Mikrodenetleyicileri incelemek karmaşık ve kafa karıştırıcı görünüyor mu? Arudino'nun ortaya çıkmasından önce, gerçekten kolay değildi ve belirli bir dizi programcı ve diğer ekipman gerektiriyordu.

Bu bir tür elektronik yapıcıdır. Projenin ilk amacı, elektronik kısımda minimum zaman harcayarak insanların elektronik cihazları nasıl programlayacaklarını kolayca öğrenmelerini sağlamaktır.

En karmaşık devrelerin montajı ve panoların bağlantısı, bir havya olmadan, ancak "erkek" ve "dişi" ayrılabilir bağlantılara sahip jumperların yardımıyla gerçekleştirilebilir. Bu, Arduino sözlüğünde basitçe "Kalkanlar" (kalkan) olarak adlandırılan hem menteşeli elemanları hem de genişletme kartlarını bağlamak için kullanılabilir.

Yeni başlayanlar için satın alınacak ilk Arduino kartı nedir?

Temel ve en popüler tahta olarak kabul edilir. Bu pano bir kredi kartı büyüklüğündedir. Oldukça büyük. Piyasadaki kalkanların çoğu onunla mükemmel uyum sağlar. Kart üzerinde harici cihazları bağlamak için prizler bulunmaktadır.

2017 yılı için yurt içi mağazalarda fiyatı 4-5 dolar civarında. Modern modellerde kalbi Atmega328'dir.

Arduino kartı görüntüsü ve her pinin fonksiyonlarını deşifre etme, Arduino UNO pin çıkışı

Bu kart üzerindeki mikrodenetleyici, DIP28 paketindeki mikro devrenin uzunluğudur, yani 28 bacağa sahiptir.

Bir sonraki en popüler tahta, bir öncekinin fiyatının neredeyse yarısına mal oluyor - 2-3 dolar. Bu bir ücrettir. Mevcut kartlar aynı Atmega328 tarafından inşa edilmiştir, işlevsel olarak UNO'ya benzerler, boyut ve USB ile eşleştirme çözümlerinde farklılıklar, daha sonra daha fazlası. Diğer bir fark, cihazları karta bağlamak için iğne şeklinde fişlerin sağlanmasıdır.

Bu kartın pin (bacak) sayısı aynı, ancak mikrodenetleyicinin daha kompakt bir TQFP32 paketinde yapıldığını, pakete ADC6 ve ADC7'nin eklendiğini, diğer iki "ekstra" bacağın güç yolunu kopyaladığını görebilirsiniz. . Boyutları oldukça kompakt - başparmağınızın boyutuyla ilgili.

En popüler üçüncü kart ise bilgisayara bağlanmak için bir USB portuna sahip olmaması, iletişimin nasıl yapıldığını biraz sonra anlatacağım.

Bu, gözden geçirilenlerin en küçük panosudur, aksi takdirde önceki ikisine benzer ve kalbi hala Atmega328'dir. Bu yeni başlayanlar için bir makale olduğu için diğer panoları dikkate almayacağız ve panoların karşılaştırılması ayrı bir makalenin konusu.

Üst kısımda, USB-UART bağlantı şeması, "GRN" pimi mikrodenetleyicinin sıfırlama devresine bağlanmıştır, daha sonra öğreneceğiniz farklı şekilde çağrılabilir.

UNO prototipleme için uygunsa, Nano ve Pro Mini projenizin son sürümleri için uygundur, çünkü az yer kaplarlar.

Arduino'yu bilgisayara nasıl bağlarım?

Arduino Uno ve Nano bilgisayarınıza USB üzerinden bağlanır. Aynı zamanda, USB bağlantı noktası için donanım desteği yoktur, burada genellikle USB-Seri veya USB-UART (rs-232) olarak adlandırılan bir seviye dönüştürme devresi çözümü kullanılır. Aynı zamanda mikrodenetleyicinin içine özel bir Arduino bootloader dikilerek bu buslar üzerinde flashing yapılmasına olanak sağlanmaktadır.

Arduino Uno, bu bağlantıyı USB destekli bir mikro denetleyicide uygular - ATmega16U2 (AT16U2). Ana mikrodenetleyiciyi flaş etmek için kartta ek bir mikrodenetleyiciye ihtiyaç olduğu ortaya çıktı.

Arduino Nano'da bu, FT232R çipi veya analog CH340 tarafından gerçekleştirilir. Bu bir mikrodenetleyici değil - bir seviye dönüştürücüdür, bu gerçek Arduino Nano'yu kendi ellerinizle sıfırdan monte etmeyi kolaylaştırır.

Sürücüler genellikle Arduino kartı bağlandığında otomatik olarak yüklenir. Ancak, Arduino Nano'nun Çince bir kopyasını aldığımda cihaz tanındı, ancak çalışmadı, dönüştürücünün üzerine çıkış tarihini içeren yuvarlak bir etiket yapıştırıldı, bu bilerek mi yapıldı bilmiyorum ama ne zaman Soydum ve CH340 işaretini gördüm.

Ondan önce buna rastlamadım ve tüm USB-UART dönüştürücülerin FT232 üzerine monte edildiğini düşündüm, sürücüleri indirmek zorunda kaldım, "Arduino ch340 sürücüleri" istendiğinde bulmak çok kolay. Basit bir kurulumdan sonra işe yaradı!

Mikrodenetleyici aynı USB portu üzerinden de çalıştırılabilir, yani. bir cep telefonu adaptörüne bağlarsanız, sisteminiz çalışacaktır.

Kartımda USB yoksa ne olur?

Arduino Pro Mini kartı daha küçüktür. Bu, bellenim için USB konektörünün ve aynı USB-UART dönüştürücünün çıkarılmasıyla sağlandı. Bu nedenle, ayrı olarak satın alınmalıdır. CH340 (en ucuz), CPL2102 ve FT232R için en basit dönüştürücü 1 dolara satılıyor.

Satın alırken, bu adaptörün hangi voltaj için tasarlandığına dikkat edin. Pro mini, 3.3 ve 5 V versiyonlarında gelir ve genellikle dönüştürücülerde besleme voltajını değiştirmek için bir jumper bulunur.

Pro Mini yanıp sönerken, başlatmadan hemen önce RESET'e basmanız gerekir, ancak DTR'li dönüştürücülerde buna gerek yoktur, bağlantı şeması aşağıdaki şekildedir.

Özel dişi-bayan terminalleri ile birleştirilirler.

Aslında, tüm bağlantılar bu tür terminaller (Dupont) kullanılarak yapılabilir, her iki tarafta soketli ve fişli, bir tarafta soketli, diğer tarafta fişli.

Arduino için programlar nasıl yazılır?

Eskizlerle çalışmak için (ürün yazılımının adı Arduino dilindedir), Arduino IDE için özel bir entegre geliştirme ortamı vardır, resmi web sitesinden veya herhangi bir tematik kaynaktan ücretsiz olarak indirebilirsiniz, genellikle sorun olmaz kurulum ile.

Programın arayüzü böyle görünüyor. Arduino için özel olarak geliştirilmiş basitleştirilmiş C AVR dilinde programlar yazabilirsiniz, aslında Wiring adı verilen bir dizi kütüphanenin yanı sıra saf C AVR'dir. Kullanımı kodu kolaylaştırır ve işini hızlandırır.

Pencerenin üst kısmında, bir dosyayı açabileceğiniz, ayarlar yapabileceğiniz, çalıştığınız panoyu seçebileceğiniz (Uno, Nano ve diğerleri) ve ayrıca hazır kod örnekleri ile projeleri açabileceğiniz tanıdık bir menü vardır. Aşağıda, ürün yazılımı ile çalışmak için bir dizi düğme bulunmaktadır, aşağıdaki şekilde tuşların amacını görebilirsiniz.

Pencerenin alt kısmında proje, kodun durumu, bellenim ve hataların varlığı hakkında bilgi görüntülemek için bir alan vardır.

Arduino IDE Programlama Temelleri

Kodun başında, değişkenleri bildirmeniz ve varsa ek kütüphaneleri bağlamanız gerekir, bu şu şekilde yapılır:

#include biblioteka.h; // "Biblioteka.h" adlı bir kitaplık ekleyin

#define peremennaya 1234; // 1234 değerine sahip bir değişken tanımla

Tanımla komutu, derleyicinin değişkenin türünü seçmesine izin verir, ancak bunu, örneğin bir tamsayı int veya kayan noktalı kayan nokta gibi manuel olarak ayarlayabilirsiniz.

int led = 13; // bir "led" değişkeni oluşturun ve ona "13" değerini atayın

Program pinin durumunu 1 veya 0 olarak belirleyebilir. 1 mantıksal bir birimdir, pin 13 1 ise, fiziksel bacağındaki voltaj mikrodenetleyicinin besleme voltajına eşit olacaktır (arduino UNO ve Nano için - 5V)

Dijital sinyal, digitalWrite komutu (pin, değer) tarafından yazılır, örneğin:

digitalWrite (led, yüksek); // pin 13 (yukarıda açıkladık) günlüğüne bir tane yaz. Birimler.

Anlayabileceğiniz gibi, bağlantı noktalarına erişim, karttaki ilgili rakam olan numaralandırma ile yapılır. İşte önceki koda benzer bir örnek:

digitalWrite (13, yüksek); // pin 13'ü bire ayarla

Değeri milisaniye olarak ayarlanan delay () komutu ile sıkça istenen bir zaman geciktirme fonksiyonu çağrılır, mikrosaniyeler kullanılarak elde edilir.

gecikmeMikrosaniye () Gecikme (1000); // mikrodenetleyici 1000ms (1 saniye) bekleyecek

Giriş ve çıkış için bağlantı noktası ayarları, geçersiz kurulum () işlevinde şu komut kullanılarak ayarlanır:

pinMode (NOMERPORTA, ÇIKIŞ / GİRİŞ); // argümanlar - değişken adı veya bağlantı noktası numarası, seçim için giriş veya çıkış

İlk Blink programını anlama

Mikrodenetleyiciler için bir tür "Merhaba, dünya" LED yanıp sönen program olduğundan, kodunu analiz edelim:

Başlangıçta pinMode komutu ile mikrodenetleyiciye çıkışa ledli bir port atamasını söyledik. Kodda “LED_BUILTIN” değişkeninin bir bildirimi olmadığını zaten fark ettiniz, gerçek şu ki Uno, Nano ve fabrikadan gelen diğer kartlarda, pim 13'e yerleşik bir LED bağlanır ve üzerine lehimlenir. yazı tahtası. Projelerinizde endikasyonlar için veya flasher programlarınızın en basit testi için tarafınızdan kullanılabilir.

Ardından, LED'in lehimlendiği çıkışı bir (5 V) olarak ayarlıyoruz, sonraki satır MK'yi 1 saniye beklemeye zorluyor ve ardından LED_BUILTIN pinini sıfıra ayarlıyor, bir saniye bekliyor ve program bir daire içinde tekrar ediyor, bu nedenle, LED_BUILTIN 1 olduğunda, LED (ve porta bağlı diğer herhangi bir yük) açık, 0 - kapalıyken.

Değeri analog porttan okuyoruz ve okunan verileri kullanıyoruz

AVR Atmega328 mikrodenetleyici, yerleşik bir 10-bit analogdan dijitale dönüştürücüye sahiptir. 10 bitlik bir ADC, tüm sinyal genlik salınımının (5 V) 1/1024'lük adımlarla 0 ila 5 volt arasındaki bir voltaj değerini okumanıza izin verir.

Daha açık hale getirmek için durumu ele alalım, diyelim ki analog girişteki voltaj değeri 2,5 V, yani voltaj 0 - "0" ise ve 5 V ise mikrodenetleyici "512" pininden değeri okuyacaktır. - (1023). 1023 - çünkü sayma 0'dan başlar, yani. 0, 1, 2, 3 vb. toplamda 1023 - 1024 değere kadar.

Standart bir "analogInput" çizimi örneğini kullanarak kodda bu şekilde görünür.

int sensörPin = A0;

int ledPin = 13;

int sensörDeğeri = 0;

pinMode (ledPin, OUTPUT);

sensorValue = analogRead (sensorPin);

digitalWrite (ledPin, YÜKSEK);

gecikme (sensorValue);

digitalWrite (ledPin, DÜŞÜK);

gecikme (sensorValue);

Değişkenleri bildiririz:

    Ledpin - bağımsız olarak çıkışa yerleşik LED'li bir pin atayın ve bireysel bir ad verin;

    sensörPin - kart üzerindeki işarete göre ayarlanmış analog giriş: A0, A1, A2, vb.;

    sensorValue, okunan tamsayı değerini depolamak ve onunla daha fazla çalışmak için bir değişkendir.

Kod şu şekilde çalışır: sensorValue sensorPin'den (analogRead komutu) okunan analog değeri saklar. - burada analog sinyalle çalışma biter, o zaman her şey önceki örnekteki gibidir.

ledPin'e bir tane yazıyoruz, led yanıyor ve sensorValue değerine eşit olan süreyi bekliyoruz yani. 0 ila 1023 milisaniye. LED'i kapatın ve bu süre boyunca tekrar bekleyin, ardından kod tekrarlanır.

Böylece potansiyometrenin konumuna göre LED'in yanıp sönme frekansını ayarlamış oluyoruz.

Arudino için harita işlevi

Aktüatörlerin tüm işlevleri (hiçbirini bilmiyorum) argüman olarak "1023"ü desteklemez, örneğin servo dönme açısıyla, yani yarım devir (180 derece) (yarım devir) ile sınırlıdır. servo motor, fonksiyonun maksimum argümanı "180"e eşittir

Şimdi sözdizimi hakkında: map (çevirdiğimiz değer, minimum girdi değeri, maksimum girdi değeri, minimum çıktı, maksimum çıktı değeri).

Kodda şöyle görünür:

(harita (analogOkuma (pot), 0, 1023, 0, 180));

Potansiyometreden (analogRead (pot)) 0'dan 1023'e kadar olan değeri okuyoruz ve çıktıda 0'dan 180'e kadar sayılar alıyoruz

Büyüklük haritasının değerleri:

Uygulamada bunu aynı servonun kodunun çalışmasına uyguluyoruz, Arduino IDE'den gelen koda bir göz atın, önceki bölümleri dikkatlice okursanız açıklama gerektirmez.

Ve bağlantı şeması.

Sonuçlar Arduino, mikrodenetleyicilerle nasıl çalışılacağını öğrenmek için çok uygun bir araçtır. Ve eğer saf bir C AVR kullanırsanız veya bazen "Pure C" olarak adlandırılırsa, kod ağırlığını önemli ölçüde azaltacak ve mikrodenetleyicinin belleğine daha fazla sığdıracaksınız, sonuç olarak fabrikada yapılmış mükemmel bir hata ayıklama kartına sahip olacaksınız. USB üzerinden flaş yeteneği.

arduinoyu severim. Deneyimli mikrodenetleyici programcılarının çoğunun, bunun çok basit olduğu için temelsizce eleştirmesi üzücü. Prensip olarak, sadece dil basitleştirilmiştir, ancak kimse sizi kullanmaya zorlamaz, ayrıca mikrodenetleyiciyi ICSP konektörü aracılığıyla flash edebilir ve gereksiz önyükleyiciler olmadan orada istediğiniz kodu doldurabilirsiniz.

Elektronik ile oynamak isteyenler için gelişmiş bir kurucu olarak mükemmeldir, ancak deneyimli programcılar için montaj gerektirmeyen bir tahta olarak da faydalı olacaktır!

Arduino ve çeşitli şemalarda kullanımının özellikleri hakkında daha fazla bilgi için e-kitaba bakın - .

Sadece çevredeki teknolojilere bakıldığında "demir" ilgiyi yazılımdan ayırmak imkansızsa, BT'de yolunuza başlamak çok zor olabilir. Bir yanda kusursuz bir görünüme, birçok sensöre ve sonsuz olanaklara sahip bir cihaz yaratma arzusu, diğer yanda veri işlemenin gizemi, işlevselliği ihmal etmeden performansı en üst düzeye çıkarma arzusu var. Arduino, ne derinlemesine devre bilgisi ne de programlama deneyimi gerektirmeyen büyük icatların ilk adımıdır.

Arduino Nedir?

Maça kürek derseniz, Arduino işe yaramaz görüntüler yaratmaktan bıkmış ve onlara en azından biraz hayat vermek isteyenler için bir kurucudur. En basit durumda Arduino, bir kontrolör, kristal osilatör, ADC / DAC, çeşitli konektörler, diyotlar ve düğmeler içeren bir baskılı devre kartıdır. Gerisi sahibinin işidir: İsterseniz - bir robot oluşturun, isterseniz - "akıllı" bir ev için bir yazılım ve donanım platformu, peki ya da pratik faydaları unutun ve eğlenin.

Tabii ki bağlı olarak. Deneylerinizde ne kadar ileri gitmek istiyorsanız, ister filtrelenmiş zevk almak, ister kendi kazancınız için Arduino'dan bir platform yapmak isteyin, hem donanım tasarımında hem de programlama dillerini öğrenmede gelişmeniz gerekecek. İkincisi hakkında bugün biraz daha ayrıntılı.

Arduino, özellikle Raspberry Pi ile karşılaştırıldığında, programlama olanakları açısından oldukça sınırlı bir platformdur. Giriş eşiğinin uygunsuz bir şekilde düşük olması nedeniyle (temel Eğitim 3 sayfa A4 formatında alır), ek modüller bağlamadan çok sayıda dile güvenemezsiniz. C / C ++ tabanlıdır, ancak çeşitli IDE'leri ve kitaplıkları kullanarak Python, C #, Go işletimine ve ayrıca Snap gibi çocuk eğlencelerine erişebileceksiniz! ve ArduBlock. Bunları nasıl, ne zaman ve kime kullanacağımızı konuşacağız.

C / C++

Bazı modifikasyonlar ve basitleştirmelerle standart yazılım kabuğunda kullanılan Arduino platformunun temel dili. "Yeni başlayanlar için" mevcut tüm komutları bulabilirsiniz, ancak kimse sizi C++ dilinin orijinal özelliklerini kullanmaktan rahatsız etmez, eklenti gerekmez. "Saf" C ile oynama arzusu varsa, hizmetinizde, adından da anlaşılacağı gibi, Arduino'da kullanılan Windows ve AVR serisi MK arasındaki etkileşim için tasarlanmış bir programdır. Daha ayrıntılı bir kılavuzu buradan okuyabilirsiniz.

ardublock

Geçici olarak yetişkinlerin dillerinden en sevdikleri dil Scratch'a veya daha doğrusu uyarlamasına - Ardublock'a geçeceğiz. Burada her şey aynı, ancak platformunuza uyarlama ile: renkli bloklar, bir kurucu, Rusça isimler, en basit mantık. Bu seçenek, programlamaya hiç aşina olmayanlar için bile harikadır. Tıpkı Logo dilinde sanal bir kaplumbağayı sanal bir düzlemde hareket ettirebildiğiniz gibi, burada basit işlemleri kullanarak bir çocuğun ilgisini programatik eylemlerinin gerçek bir yorumuna çekebilirsiniz.

Bu arada, kullanmak için standart Arduino IDE'nize yüklemeniz gerekir. En son sürümlerin kaçırılmaması daha iyidir, oldukça karmaşıktır, başlangıç ​​için 2013'ün sonundan itibaren uygundur. İndirilen dosyayı kurmak için "ardublock-all" olarak yeniden adlandırın ve "Belgelerim / Arduino / araçlar / ArduBlockTool / araç" klasörüne koyun. Eğer yoksa, onu yaratırız. Bir şey anlaşılmadıysa, o zaman burada daha ayrıntılı.

Patlatmak!

Ardublock ile karşılaştırıldığında, Snap! ek bloklar şeklinde gelişmiş yeteneklere, listeleri ve işlevleri kullanma yeteneğine sahiptir. Yani, Snap! genel olarak zaten bir yetişkin programlama dili gibi görünüyor, ancak yine de yapıcı kodunu oynamanız gerekiyor.

Bu dili kullanmak için snap4arduino.org adresine gitmeniz ve işletim sisteminiz için gerekli bileşenleri indirmeniz gerekecektir. Kurulum, kullanım ve video örnekleri ile ilgili talimatları burada bulabilirsiniz.

piton

Resmi olarak, Arduino üzerinde en azından Piet dilini kullanarak programlayabilirsiniz, çünkü uygun azim ile her şeyi makine kodunda derleyeceksiniz. Ancak Python'un neredeyse en uygun karmaşıklık / yetenek kombinasyonuna sahip en popüler dillerden biri olması nedeniyle, Arduino'daki uygulanabilirliğini atlamak saçma olur. Ücretsiz programımızla Python öğrenmeye başlayabilirsiniz.

Bu nedenle, bunun için PySerial kitaplıklarına (daha önce bilgisayar bağlantı noktalarıyla iletişim kurmak için kullanmış olabilirsiniz) ve vPython'a ihtiyacınız var. Her şeyi doğru bir şekilde nasıl yapılandıracağınızı ve nihayetinde çalışmasını sağlayabileceğinizi okuyabilir ve okuyabilirsiniz.

Git ve diğer diller.

Arduino'nun PySerial kitaplığı aracılığıyla Python ile nasıl etkileşime girdiğine benzer şekilde, Java, HTML ve istediğiniz her şeyle etkileşime girebilir. Arduino, uygun bir dil seçmek gibi önemsiz bir sorunun başka bir araştırmacıyı durdurmadığı kadar popüler bir platformdur. Bu küçük tahtanın sahibinden istenen tek şey şaşırtıcı derecede ilginç bir şey düşünmektir ve kaçınılmaz olarak uygun bir araç bulunacaktır.

gastroguru 2017