• arduino'yu hangi programda programlayacağız? Yeni başlayanlar için Arduino: adım adım talimatlar. Arduino Programlama ve Projeler: Başlarken

    Program nelerden oluşuyor?

    Başlangıç ​​olarak, bir programın bir kitap gibi okunamayacağını ve yazılamayacağını anlamakta fayda var: kapaktan kapağa, yukarıdan aşağıya, satır satır. Herhangi bir program ayrı bloklardan oluşur. C/C++'da bir kod bloğunun başlangıcı sol küme paranteziyle gösterilir (, sonu ise sağ küme paranteziyle gösterilir).

    Bloklar farklı şekiller ve hangisinin ne zaman yürütüleceği dış koşullara bağlıdır. Örnekte asgari program 2 blok görebilirsiniz. Bu örnekte bloklar çağrılıyor fonksiyon tanımı. Bir işlev, başka birisinin daha sonra dışarıdan kullanabileceği, belirli bir ada sahip bir kod bloğudur.

    İÇİNDE bu durum setup ve loop adında 2 fonksiyonumuz var. Arduino için herhangi bir C++ programında bunların varlığı zorunludur. Bizim durumumuzda olduğu gibi hiçbir şey yapmayabilirler ama yazılmaları gerekir. Aksi takdirde derleme aşamasında hata alırsınız.

    Tür klasik: yanıp sönen LED

    Şimdi programımızı tamamlayalım ki en azından bir şeyler olsun. Arduino'da 13. pin'e bir LED bağlanır. Kontrol edilebilirler, biz de bunu yapacağız.

    void setup() ( pinMode(13 , OUTPUT) ; ) void loop() ( digitalWrite(13 , YÜKSEK) ; gecikme(100 ); digitalWrite(13 , DÜŞÜK) ; gecikme(900 ) ; )

    Derleyin, programı indirin. Kart üzerindeki LED'in her saniye yanıp söndüğünü göreceksiniz. Bu kodun neden her saniye yanıp sönmeye yol açtığını bulalım.

    Her ifade, işlemciye bir şey yapması için verilen bir emirdir. Bir blok içindeki ifadeler, herhangi bir duraklama ve geçiş olmaksızın, kesinlikle sırayla, birbiri ardına yürütülür. Yani belirli bir kod bloğundan bahsediyorsak, ne yapıldığını anlamak için yukarıdan aşağıya doğru okunabilir.

    Şimdi blokların hangi sırayla yürütüldüğünü anlayalım, yani. Kurulum ve döngü fonksiyonları. Şimdilik belirli ifadelerin ne anlama geldiğini düşünmeyin, sadece sıraya uyun.

      Arduino açılır açılmaz yanıp sönüyor veya RESET düğmesine basılıyor, "bir şey" bir işlevi çağırır kurmak. Yani içindeki ifadeleri çalıştırılmaya zorlar.

      Kurulum tamamlanır tamamlanmaz, hemen "bir şey" döngü fonksiyonunu çağırır.

      Döngünün çalışması tamamlanır tamamlanmaz, "bir şey" hemen döngü fonksiyonunu tekrar çağırır ve bu böyle sonsuza kadar devam eder.

    İfadeleri yürütülme sırasına göre numaralandırırsak şunu elde ederiz:

    void setup() ( pinMode(13 , OUTPUT) ; ❶ ) void loop() ( digitalWrite(13 , YÜKSEK) ; ❷ ❻ ❿ gecikme(100 ) ; ❸ ❼ … digitalWrite(13 , LOW) ; ❹ ❽ gecikme(900 ) ; ❺ ❾ )

    Programın tamamını yukarıdan aşağıya okuyarak algılamaya çalışmamanız gerektiğini bir kez daha hatırlatırız. Yukarıdan aşağıya doğru sadece blokların içerikleri okunur. Genel olarak setup ve loop bildirimlerinin sırasını değiştirebiliriz.

    void loop() ( digitalWrite(13 , YÜKSEK) ; ❷ ❻ ❿ gecikme(100 ) ; ❸ ❼ … digitalWrite(13 , DÜŞÜK) ; ❹ ❽ gecikme(900 ) ; ❺ ❾ ) void setup() ( pinMode(13 , OUTPUT) ) ; ❶ )

    Bunun sonucu bir nebze bile değişmeyecek: derlemeden sonra kesinlikle eşdeğerini alacaksınız ikili dosya.

    İfadeler ne işe yarar?

    Şimdi yazılan programın neden LED'in yanıp sönmesine yol açtığını anlamaya çalışalım.

    Bildiğiniz gibi Arduino pinleri hem çıkış hem de giriş olarak çalışabiliyor. Bir şeyi kontrol etmek yani sinyal vermek istediğimizde kontrol pinini çıkış durumuna aktarmamız gerekir. Örneğimizde LED'i pin 13'e sürüyoruz, dolayısıyla kullanımdan önce pin 13'ün çıkış yapılması gerekiyor.

    Bu, kurulum işlevindeki bir ifadeyle yapılır:

    PinMode(13 , ÇIKIŞ) ;

    İfadeler farklıdır: aritmetik, bildirimler, tanımlar, koşullar vb. Bu durumda ifadede uygularız işlev çağrısı. Hatırlamak? Sahibiz onların"bir şey" dediğimiz bir şey tarafından çağrılan kurulum ve döngü işlevleri. Peki şimdi Biz zaten bir yerde yazılmış olan fonksiyonları çağırıyoruz.

    Özellikle kurulumumuzda pinMode adlı bir işlevi çağırıyoruz. Sayıyla belirtilen pini belirtilen moda ayarlar: giriş veya çıkış. Hangi pinden, hangi moddan bahsettiğimizi fonksiyon adından hemen sonra virgülle ayırarak parantez içinde belirtiyoruz. Bizim durumumuzda 13. pinin çıkış olarak çalışmasını istiyoruz. ÇIKIŞ, çıkış anlamına gelir, GİRİŞ ise giriş anlamına gelir.

    13 ve OUTPUT gibi niteleyici değerlere denir fonksiyon argümanları. Tüm fonksiyonların 2 argümana sahip olması gerekli değildir. Bir fonksiyonun kaç argümanı olacağı, fonksiyonun özüne ve yazarın onu nasıl yazdığına bağlıdır. Tek argümanlı, üç, yirmi; Fonksiyonların hiçbir argümanı olamaz. Daha sonra bunları çağırmak için parantez açılır ve hemen kapatılır:

    Kesinti Yok() ;

    Aslında kurulum ve döngü fonksiyonlarımızın da herhangi bir argüman almadığını fark etmişsinizdir. Ve gizemli "bir şey" onları doğru zamanda boş parantezlerle çağırıyor.

    Kodumuza geri dönelim. Yani LED'i sonsuza kadar yanıp sönmeyi planladığımız için kontrol pinine bir kez çıkış yapılması gerekiyor ve sonra bunu hatırlamak istemiyoruz. Kurulum işlevi ideolojik olarak bunun için tasarlanmıştır: daha sonra çalışmak üzere tahtayı gerektiği gibi ayarlayın.

    Döngü fonksiyonuna geçelim:

    void loop() ( digitalWrite(13 , YÜKSEK) ; gecikme(100 ); digitalWrite(13 , DÜŞÜK) ; gecikme(900 ) ; )

    Belirtildiği gibi kurulumdan hemen sonra çağrılır. Ve biter bitmez tekrar tekrar çağrılır. Döngü fonksiyonuna ana program döngüsü adı verilir ve ideolojik olarak faydalı işler yapmak üzere tasarlanmıştır. Bizim durumumuzda faydalı iş- yanıp sönen LED.

    İfadeleri sırasıyla inceleyelim. Yani ilk ifade, digitalWrite yerleşik işlevine yapılan bir çağrıdır. Belirli bir pin için mantıksal bir sıfır (DÜŞÜK, 0 volt) veya mantıksal bir sıfır (YÜKSEK, 5 volt) sağlamak üzere tasarlanmıştır. digitalWrite işlevine 2 argüman iletilir: pin numarası ve boolean. Sonuç olarak ilk yaptığımız şey 13. pindeki LED'e 5 volt uygulayarak yakmak oluyor.

    Bu yapılır yapılmaz işlemci hemen bir sonraki ifadeye geçer. Bizim için bu, geciktirme fonksiyonuna bir çağrıdır. Gecikme işlevi yine işlemcinin belirli bir süre uyku moduna geçmesine neden olan yerleşik bir işlevdir. Sadece tek bir argüman gerekiyor: Milisaniye cinsinden uyku süresi. Bizim durumumuzda bu 100 ms'dir.

    Biz uyurken her şey olduğu gibi kalır. LED yanmaya devam eder. 100 ms sona erdiğinde işlemci uyanır ve hemen bir sonraki ifadeye geçer. Örneğimizde bu yine tanıdık digitalWrite yerleşik işlevine yapılan bir çağrıdır. Doğru, bu sefer ikinci argüman olarak DÜŞÜK değerini geçiyoruz. Yani 13. pine mantıksal sıfır koyuyoruz yani 0 volt uyguluyoruz yani LED’i kapatıyoruz.

    LED söndükten sonra bir sonraki ifadeye geçiyoruz. Bu yine gecikme fonksiyonuna yapılan bir çağrıdır. Bu sefer 900ms uyuyoruz.

    Uyku bittiğinde döngü işlevi sona erer. Tamamlandığında, "bir şey" onu hemen tekrar çağırır ve her şey yeniden olur: LED yanar, yanar, söner, bekler vb.

    Yazılanları Rusçaya çevirirseniz aşağıdaki algoritmayı elde edersiniz:

      LED'i ateşe verdik

      100 milisaniye uyku

      LED'i söndürüyoruz

      900 milisaniye uyku

      1. noktaya git

    Böylece her 100 + 900ms = 1000ms = 1 saniyede bir yanıp sönen işarete sahip bir Arduino'muz var.

    Neler değiştirilebilir?

    Prensibi daha iyi anlamak amacıyla, programın çeşitli varyasyonlarını yapmak için yalnızca edinilen bilgileri kullanalım.

    Başka bir pime "yanıp sönmesi" gereken harici bir LED'i veya başka bir cihazı bağlayabilirsiniz. Örneğin, 5'inde. Bu durumda programın nasıl değişmesi gerekir? 13. pine döndüğümüz her yerde sayıyı 5. ile değiştirmeliyiz:

    Derleyin, indirin, test edin.

    LED'in saniyede 2 kez yanıp sönmesi için ne yapılması gerekiyor? Toplam 500 ms olacak şekilde uyku süresini azaltın:

    void setup() ( pinMode(5 , OUTPUT) ; ) void loop() ( digitalWrite(5 , YÜKSEK) ; gecikme(50 ); digitalWrite(5 , DÜŞÜK) ; gecikme(450 ) ; )

    LED'in her "göz kırpma" ile iki kez yanıp sönmesini nasıl sağlayabilirim? Eklemeler arasında kısa bir duraklama ile onu iki kez ateşe vermeniz gerekir:

    void setup() ( pinMode(5 , OUTPUT) ; ) void loop() ( digitalWrite(5 , YÜKSEK) ; gecikme(50 ); digitalWrite(5 , DÜŞÜK) ; gecikme(50 ) ; digitalWrite(5 , YÜKSEK) ; gecikme (50 ) ; digitalWrite(5 , DÜŞÜK) ; gecikme(350 ) ; )

    Cihazda her saniyede bir dönüşümlü olarak yanıp sönen 2 LED'in bulunması nasıl sağlanır? İki pin ile iletişim kurmanız ve biriyle veya diğeriyle döngü halinde çalışmanız gerekir:

    void setup() ( pinMode(5 , OUTPUT) ; pinMode(6 , OUTPUT) ; ) void loop() ( digitalWrite(5 , YÜKSEK) ; gecikme(100 ); digitalWrite(5 , DÜŞÜK) ; gecikme(900 ) ; digitalWrite (6, YÜKSEK) ; gecikme(100) ; digitalWrite(6, DÜŞÜK) ; gecikme(900) ; )

    Cihazın demiryolu trafik ışığı gibi geçiş yapacak 2 LED'i nasıl yapılır: biri veya diğeri yanar mı? Sadece yanan LED'i hemen kapatmanıza gerek yok, ancak geçiş anını beklemeniz gerekiyor:

    void setup() ( pinMode(5 , OUTPUT) ; pinMode(6 , OUTPUT) ; ) void loop() ( digitalWrite(5 , YÜKSEK) ; digitalWrite(6 , DÜŞÜK) ; gecikme(1000 ) ; digitalWrite(5 , DÜŞÜK) ; digitalWrite(6, YÜKSEK) ; gecikme(1000) ; )

    Diğer fikirleri kendiniz kontrol etmekten çekinmeyin. Gördüğünüz gibi her şey basit!

    Boş alan ve güzel kod hakkında

    C++'da boşluklar, satır sonları ve sekme karakterleri yoktur. büyük önem taşıyan derleyici için. Boşluk olan yerde satır sonu olabilir ve bunun tersi de geçerlidir. Aslında arka arkaya 10 boşluk, 2 satır sonu ve 5 boşluk daha bir boşluğa eşdeğerdir.

    Beyaz alan, programı anlaşılır ve görsel hale getirebileceğiniz veya tanınmayacak şekilde parçalayabileceğiniz bir programcı aracıdır. Örneğin, bir LED'in yanıp sönmesine yönelik programı düşünün:

    void setup() ( pinMode(5 , OUTPUT) ; ) void loop() ( digitalWrite(5 , YÜKSEK) ; gecikme(100 ); digitalWrite(5 , DÜŞÜK) ; gecikme(900 ) ; )

    Bunu şu şekilde değiştirebiliriz:

    void setup() ( pinMode(5 , OUTPUT) ; ) void loop () ( digitalWrite(5 , YÜKSEK) ; gecikme(100 ); digitalWrite(5 ,LOW) ; gecikme(900 ) ; )

    Yaptığımız tek şey biraz boş alanla "çalışmak". Artık iyi biçimlendirilmiş kod ile okunamayan kod arasındaki farkı açıkça görebilirsiniz.

    Forumlarda saygı duyulan, başkaları tarafından okunduğunda sizin tarafınızdan kolayca algılanabilen yazılım tasarımının söylenmemiş kanununa uymak için birkaç basit kurala uyun:

    1. Her zaman ( ve ) arasındaki yeni bloğun başında girintiyi artırın. Genellikle 2 veya 4 boşluk kullanılır. Değerlerden birini seçin ve baştan sona ona bağlı kalın.

    Kötü:

    void loop() ( digitalWrite(5 , YÜKSEK) ; gecikme(100 ); digitalWrite(5 , DÜŞÜK) ; gecikme(900 ) ; )

    İyi:

    void loop() ( digitalWrite(5 , YÜKSEK) ; gecikme(100 ); digitalWrite(5 , DÜŞÜK) ; gecikme(900 ) ; )

    2. Doğal dilde olduğu gibi: virgülden sonra boşluk koyun ve önüne koymayın.

    Kötü:

    DigitalWrite(5 ,YÜKSEK); digitalWrite(5, YÜKSEK); digitalWrite(5 ,YÜKSEK);

    İyi:

    DigitalWrite(5 , YÜKSEK);

    3. Bir blok başlangıcı karakteri ( Yeni hat geçerli girinti düzeyinde veya bir öncekinin sonunda. Ve blok sonu karakteri () geçerli girinti seviyesinde ayrı bir satırda:

    Kötü:

    void setup() ( pinMode(5 , OUTPUT) ; ) void setup() ( pinMode(5 , OUTPUT) ; ) void setup() ( pinMode(5 , OUTPUT) ; )

    İyi:

    void setup() ( pinMode(5 , OUTPUT) ; ) void setup() ( pinMode(5 , OUTPUT) ; )

    4. Anlamsal blokları ayırmak için boş satırlar kullanın:

    İyi:

    Daha iyi:

    void loop() ( digitalWrite(5, YÜKSEK) ; gecikme(100) ; digitalWrite(5, DÜŞÜK) ; gecikme(900) ; digitalWrite(6, YÜKSEK) ; gecikme(100) ; digitalWrite(6, DÜŞÜK) ; gecikme( 900)

    Noktalı virgül hakkında

    Merak ediyor olabilirsiniz: neden her ifadenin sonunda noktalı virgül var? Bunlar C++'ın kurallarıdır. Bu tür kurallara denir dil sözdizimi. Sembol olarak; derleyici ifadenin nerede bittiğini anlar.

    Daha önce de belirttiğimiz gibi satır sonları onun için boş bir ifade olduğundan bu noktalama işaretine odaklanıyor. Bu, tek bir satıra aynı anda birden fazla ifade yazmanıza olanak tanır:

    void loop() ( digitalWrite(5 , YÜKSEK) ; gecikme(100 ); digitalWrite(5 , DÜŞÜK) ; gecikme(900 ) ; )

    Program doğrudur ve daha önce gördüklerimize eşdeğerdir. Ancak bu şekilde yazmak kötü bir biçimdir. Kodun okunması çok daha zordur. Bu nedenle, aynı satıra birden fazla ifade yazmak için %100 iyi bir nedeniniz olmadığı sürece yazmayın.

    Yorumlar hakkında

    İyi programlamanın kurallarından biri şudur: "Kodu, açıklanmasına gerek kalmayacak kadar açık olacak şekilde yazın." Bu mümkündür, ancak her zaman değil. Koddaki bazı açık olmayan noktaları okuyucularına açıklamak için: meslektaşlarınıza veya kendinize bir ay içinde sözde yorumlar vardır.

    Bunlar, içindeki tasarımlar program kodu derleyici tarafından tamamen göz ardı edilir ve yalnızca okuyucuyla ilgilidir. Yorumlar çok satırlı veya tek satırlı olabilir:

    /* Arduino'ya enerji verildiğinde ilk olarak setup fonksiyonu çağrılır.Bu çok satırlı bir yorumdur */ geçersiz kurulum()( // pin 13'ü çıkış moduna ayarlayın pinMode(13, ÇIKIŞ) ; ) void loop() ( digitalWrite(13 , YÜKSEK) ; gecikme(100 ) ; // uyku 100ms digitalWrite(13 , DÜŞÜK) ; gecikme(900 ) ; )

    Gördüğünüz gibi /* ve */ karakterleri arasına dilediğiniz kadar yorum satırı yazabiliyorsunuz. Ve // dizisinden sonra satırın sonuna kadar gelen her şey yorum sayılıyor.

    Böylece program yazmanın en temel ilkelerinin netleştiğini umuyoruz. Kazanılan bilgi, Arduino pinlerine giden güç kaynağını belirli zamanlama şemalarına göre programlı olarak kontrol etmenizi sağlar. Bu çok fazla değil ama yine de ilk deneyler için yeterli.

    Ardublock, Arduino'ya yeni başlayanlar için tasarlanmış grafiksel bir programlama dilidir. Bu ortamın kullanımı oldukça kolaydır, kurulumu kolaydır, neredeyse tamamen Rusçaya çevrilmiştir. Bloklara benzeyen, görsel olarak oluşturulmuş bir program...

    Kesintiler, çeşitli olaylar meydana geldiğinde harici cihazların denetleyiciyle etkileşime girmesini sağlayan çok önemli bir Arduino mekanizmasıdır. Taslakta bir donanım kesme işleyicisi kurarak, bir düğmeyi açıp kapatmaya, klavyeye basmaya tepki verebiliriz.

    Serial.print() ve Serial.println(), Arduino kartından bilgisayara bilgi aktarmak için kullanılan ana Arduino işlevleridir. seri port. En popüler Arduino Uno, Mega, Nano kartlarında yerleşik bir ekran yoktur, bu nedenle...

    Arduino kurulu olmadan arduino projeleri yapmak mümkün mü? Oldukça çıkıyor. Çok sayıda sayesinde çevrimiçi hizmetler ve kendi adı olan programlar: Arduino emülatörü veya simülatörü. Bu tür programların en popüler temsilcileri ...

    Seri başlangıç ​​- son derece önemli talimat Arduino, denetleyicinin harici cihazlarla bağlantı kurmasını sağlar. Çoğu zaman böyle harici cihaz” Arduino'yu bağladığımız bilgisayar olduğu ortaya çıktı. Bu nedenle Seri başlangıç ​​daha yoğundur...

    Arduino'daki global değişken, kapsamı programın tamamına yayılan bir değişkendir, tüm modüllerde ve işlevlerde görülebilir. Bu yazıda global değişkenlerin kullanımına ilişkin birkaç örneğe bakacağız...

    Arduino dizileri, programcıların aynı türdeki veri kümeleriyle çalışmak için aktif olarak kullandığı bir dil öğesidir. Diziler hemen hemen tüm programlama dillerinde mevcuttur ve sözdizimi çok benzer olan Arduino da bir istisna değildir ...

    Yeni başlayanlar için Arduino programlama dili aşağıdaki tabloda ayrıntılı olarak açıklanmıştır. Arduino mikrodenetleyicisi ile programlanmıştır. özel dil C/C++ tabanlı programlama. Dil Arduino programlama C++'ın bir çeşididir, yani Arduino için ayrı bir programlama dili yoktur. İndirmek PDF kitabı sayfa sonunda mevcuttur.

    İÇİNDE Arduino IDE'si tüm yazılı eskizler minimum değişiklikle bir C/C++ programında derlenir. Arduino IDE derleyicisi bu platform için program yazmayı büyük ölçüde basitleştirir ve Arduino üzerinde cihaz oluşturmak, C/C++ dilinde fazla bilgisi olmayan kişiler için çok daha erişilebilir hale gelir. Arduino dilinin ana işlevlerini örneklerle açıklamaya biraz daha yardımcı olacağız.

    Ayrıntılı Arduino Dil Referansı

    Dil dört bölüme ayrılabilir: operatörler, veriler, işlevler ve kütüphaneler.

    Arduino dili Örnek Tanım

    Operatörler

    kurmak() geçersiz kurulum ()
    {
    pinMode(3, INPUT);
    }
    Fonksiyon değişkenleri başlatmak, kart üzerindeki pinlerin çalışma modlarını belirlemek vb. için kullanılır. İşlev, mikro denetleyiciye her güç verildiğinde yalnızca bir kez çalışır.
    döngü() geçersiz döngü ()
    {
    digitalWrite(3, YÜKSEK);
    gecikme(1000);
    digitalWrite(3, DÜŞÜK);
    gecikme(1000);
    }
    Döngü işlevi döngü yaparak programın hesaplamalar yapmasına ve bunlara tepki vermesine olanak tanır. setup() ve loop() fonksiyonları, bu ifadeler programda kullanılmasa bile her çizimde mevcut olmalıdır.

    Kontrol ifadeleri

    eğer
    eğer(x >
    eğer (x< 100) digitalWrite (3, LOW );
    if ifadesi karşılaştırma işleçleriyle (==, !=,<, >) ve koşulun doğru olup olmadığını kontrol eder. Örneğin x değişkeninin değeri 100'den büyükse çıkış 13'teki LED yanar, küçükse LED söner.
    eğer..else
    if (x > 100) digitalWrite (3, YÜKSEK);
    aksi takdirde digitalWrite(3, DÜŞÜK);
    else ifadesi, birbirini dışlayan birden fazla kontrol gerçekleştirmek için if'te belirtilenden farklı bir kontrol yapmanızı sağlar. Kontrollerden hiçbiri DOĞRU değilse, else'deki ifade bloğu yürütülür.
    yer değiştir
    anahtar(x)
    {


    durum 3: mola;

    }
    Mesela if, switch deyimi programı kontrol ederek, aşağıdaki durumlarda gerçekleştirilecek eylemleri belirtmenize izin verir: farklı koşullar. Break bir ifade çıkış komutudur; herhangi bir alternatif seçilmediği takdirde varsayılan yürütülür.
    için geçersiz kurulum ()
    {
    pinMode(3, ÇIKIŞ);
    }
    geçersiz döngü ()
    {
    for (int i=0; i<= 255; i++){
    analogWrite(3, i);
    gecikme(10);
    }
    }
    For yapısı süslü parantez içindeki ifadeleri tekrarlamak için kullanılır. Örneğin LED'in yumuşak karartılması. For döngüsü başlığı üç bölümden oluşur: for (başlatma; koşul; artış) - başlatma bir kez gerçekleştirilir, ardından koşul koşulu kontrol edilir, koşul doğruysa artış artırılır. Döngü, koşul koşulu yanlış olana kadar tekrarlanır.
    sırasında geçersiz döngü ()
    {
    iken (x< 10)
    {
    x = x + 1;
    Seri.println(x);
    gecikme(200);
    }
    }
    While ifadesi parantez içindeki koşul doğru olduğu sürece çalışacak bir döngü olarak kullanılır. Örnekte, while döngüsü ifadesi, x 10'dan küçük olduğu sürece parantez içindeki kodu süresiz olarak tekrarlayacaktır.
    yaparken geçersiz döngü ()
    {
    Yapmak
    {
    x = x + 1;
    gecikme(100);
    Seri.println(x);
    }
    iken (x< 10);
    gecikme(900);
    }
    do...while döngüsü ifadesi, while döngüsüyle aynı şekilde çalışır. Ancak parantez içindeki ifade doğruysa döngüden çıkmak yerine döngü devam eder. Yukarıdaki örnekte, 10'dan büyük x için toplama işlemi 1000 ms'lik bir duraklamayla devam edecektir.
    kırmak
    devam etmek
    anahtar(x)
    {
    durum 1: digitalWrite(3, YÜKSEK);
    durum 2: digitalWrite(3, DÜŞÜK);
    durum 3: mola;
    durum 4: devam et;
    varsayılan: digitalWrite(4, YÜKSEK);
    }
    Break, döngünün tamamlanmasını beklemeden switch, do, for ve while döngülerinden çıkmaya zorlamak için kullanılır.
    Continue ifadesi, geçerli döngü adımındaki kalan ifadeleri atlar.

    Sözdizimi

    ;
    (noktalı virgül)

    digitalWrite(3, YÜKSEK);
    Noktalı virgül bir ifadenin sonunu belirtmek için kullanılır. Satırın sonunda bırakılan noktalı virgül, derleme zamanı hatasına neden olur.
    {}
    (diş telleri)
    geçersiz kurulum ()
    {
    pinMode(3, INPUT);
    }
    Açma parantezi “(”, kapatma parantezi “)” tarafından takip edilmelidir. Eşleştirilmemiş braketler, bir çizimi derlerken gizli ve anlaşılmaz hatalara yol açabilir.
    //
    (bir yorum)
    x=5; // bir yorum

    Merhaba! Ben Alikin Alexander Sergeevich, ek eğitim öğretmeniyim, Labinsk Merkezi Çocuk ve Gençlik Tiyatrosu'nda "Robotik" ve "Radyo Mühendisliği" çevrelerine liderlik ediyorum. ArduBloсk programını kullanarak Arduino'yu programlamanın basitleştirilmiş bir yolundan biraz bahsetmek istiyorum.

    Bu programı eğitim sürecine dahil ettim ve sonuçtan çok memnunum, özellikle basit programlar yazarken veya karmaşık programların bazı başlangıç ​​aşamalarını oluştururken çocuklar arasında özel talep görüyor. ArduBloсk grafiksel bir programlama ortamıdır, yani tüm eylemler Rusça imzalı eylemlerle çizilmiş resimlerle gerçekleştirilir, bu da Arduino platformunu öğrenmeyi büyük ölçüde kolaylaştırır. 2.sınıftan itibaren çocuklar bu program sayesinde Arduino ile çalışmaya kolaylıkla hakim olabiliyorlar.

    Evet, bazıları Scratch'in hala var olduğunu ve aynı zamanda Arduino programlama için çok basit bir grafik ortamı olduğunu söyleyebilir. Ancak Scratch, Arduino'yu flaşlamıyor, yalnızca bir USB kablosu kullanarak kontrol ediyor. Arduino bilgisayara bağımlıdır ve otonom olarak çalışamaz. Kendi projelerinizi oluştururken, özellikle robotik cihazlar oluştururken Arduino için özerklik esastır.

    NXT veya EV3 gibi tanınmış LEGO robotları bile Arduino programlamada ArduBloсk programının ortaya çıkmasıyla artık öğrencilerimiz için o kadar ilgi çekici değil. Ayrıca Arduino, herhangi bir LEGO tasarımcısından çok daha ucuzdur ve birçok bileşen eski tüketici elektroniklerinden kolayca alınabilir. ArduBloсk programı sadece yeni başlayanlara değil aynı zamanda Arduino platformunun aktif kullanıcılarına da çalışmalarında yardımcı olacaktır.

    Peki ArduBlock nedir? Dediğim gibi bu bir grafiksel programlama ortamıdır. Neredeyse tamamen Rusçaya çevrildi. Ancak ArduBloсk'ta öne çıkan nokta sadece bu değil, aynı zamanda tarafımızdan yazılan ArduBloсk programının Arduino IDE koduna dönüştürülmesidir. Bu program Arduino IDE programlama ortamına yerleştirilmiştir, yani bir eklentidir.

    Aşağıda yanıp sönen bir LED'in ve Arduino IDE'de dönüştürülmüş bir programın bir örneği bulunmaktadır. Programla yapılan tüm çalışmalar çok basittir ve her öğrenci bunu anlayabilir.

    Program üzerinde çalışmanız sonucunda sadece Arduino'yu programlamakla kalmayıp, aynı zamanda bizim için anlaşılmayan komutları da öğrenebilirsiniz. Metin formatı Arduino IDE, ancak standart komutlar yazamayacak kadar tembelseniz, hızlı fare manipülasyonları ile ArduBlok'ta hızlı bir şekilde basit bir programın taslağını çıkarmalı ve Arduino IDE'de hatalarını ayıklamalısınız.

    ArduBlok'u kurmak için öncelikle Arduino IDE'yi resmi Arduino web sitesinden indirip kurmanız ve kartla çalışırken ayarlarla ilgilenmeniz gerekir. Arduino UNO'su. Bunun nasıl yapılacağı aynı sitede veya Amperk'te anlatılıyor veya YouTube'a bakılıyor. Peki tüm bunları anladığınızda ArduBlok'u buradaki resmi web sitesinden indirmeniz gerekiyor. En son sürümleri indirmenizi önermiyorum, yeni başlayanlar için çok zordur ama 2013-07-12 sürümü en önemlisidir, bu dosya orada en popüler olanıdır.

    Daha sonra indirilen dosyayı ardublock-all olarak yeniden adlandırıyoruz ve "belgeler" klasörüne koyuyoruz. Aşağıdaki klasörleri oluşturun: Arduino > araçlar > ArduBlockTool > araç ve ikincisinde indirilen ve yeniden adlandırılan dosyayı atıyoruz. ArduBlok herkes için çalışıyor işletim sistemleri Linux'ta bile bizzat XP, Win7, Win8'de test ettim, tüm örnekler Win7 içindir. Programın kurulumu tüm sistemler için aynıdır.

    Eğer daha kolaysa, Mail-disk 7z'de paketini açarak 2 klasör bulacağınız bir arşiv hazırladım. Biri zaten çalışıyor Arduino programı IDE ve başka bir klasördeki içeriklerin Belgeler klasörüne gönderilmesi gerekir.

    ArduBlok'ta çalışabilmek için Arduino IDE'yi çalıştırmanız gerekmektedir. Daha sonra Araçlar sekmesine gidiyoruz ve orada ArduBlok öğesini buluyoruz, üzerine tıklıyoruz - ve işte burada, hedefimiz.

    Şimdi programın arayüzüyle ilgilenelim. Zaten anladığınız gibi, içinde hiçbir ayar yok, ancak programlama için çok sayıda simge var ve bunların her biri Arduino IDE metin formatında bir komut taşıyor. Yeni sürümlerde daha da fazla simge var, o yüzden ArduBlok ile ilgilenin En son sürüm zor ve bazı simgeler Rusçaya çevrilmiyor.

    "Yönetim" bölümünde çeşitli döngüler bulacağız.

    "Ports" kısmında portların değerlerini ve bunlara bağlı ses yayıcıları, servoları veya ultrasonik yakınlık sensörlerini yönetebiliyoruz.

    "Sayılar / Sabitler" bölümünde dijital değerleri seçebiliriz veya bir değişken oluşturabiliriz ancak aşağıdakini kullanma ihtimaliniz yoktur.

    "Operatörler" bölümünde gerekli tüm karşılaştırma ve hesaplama operatörlerini bulacağız.

    Yardımcı Programlar bölümünde zaman içinde çoğunlukla simgeler kullanılır.

    "TinkerKit Bloks" satın alınan TinkerKit sensörlerinin bulunduğu bölümdür. Elbette böyle bir setimiz yok ama bu diğer setlerde simgelerin çalışmayacağı anlamına gelmiyor tam tersine LED'i veya düğmeyi açmak gibi simgeleri kullanmak beyler için çok uygun. . Bu işaretler hemen hemen tüm programlarda kullanılmaktadır. Ancak bunların bir özelliği var - seçildiklerinde bağlantı noktalarını gösteren yanlış simgeler var, bu nedenle bunların kaldırılması ve "sayılar / sabitler" bölümündeki simgenin listenin en üstünde değiştirilmesi gerekiyor.

    "DF Robot" - bu bölüm, içinde belirtilen sensörler varsa kullanılır, bazen bulunurlar. Bugünkü örneğimiz de bir istisna değil; "Ayarlanabilir IR Anahtarı" ve "Hat Sensörü" var. "Çizgi sensörü" Amperka'da olduğu gibi resimdekinden farklıdır. Eylemleri aynıdır, ancak Amperka'nın sensörü bir hassasiyet regülatörüne sahip olduğu için çok daha iyidir.

    Seeedstudio Grove - Sadece joystick olmasına rağmen bu bölümün sensörlerini hiç kullanmadım. Bu bölüm yeni versiyonlarda genişletilmiştir.

    VE son bölüm bu bir Bağlayıcı Kit. İçinde sunulan sensörler bana rastlamadı.

    Şerit boyunca hareket eden bir robot üzerindeki program örneğini göstermek istiyorum. Robot hem montaj hem de satın alma açısından çok basittir, ancak her şeyden önce. Onun satın alınması ve montajı ile başlayalım.

    İşte parça setinin kendisi, her şey Amperka web sitesinden satın alındı.

    1. AMP-B001 Motor Kalkanı (2 kanal, 2 A) 1 890 ruble
    2. AMP-B017 Troyka Kalkanı 1.690 RUB
    3. AMP-X053 Pil bölmesi 3×2 AA 1 60 RUB
    4. AMP-B018 Çizgi sensörü dijital 2 580 RUB
    5. ROB0049 İki tekerlekli platform miniQ 1 1890 RUB
    6. SEN0019 Kızılötesi engel sensörü 1 390 RUB
    7. FIT0032 Kızılötesi engel sensörü montajı 1 90 RUB
    8. A000066 Arduino Uno 1 1150 RUB

    Başlamak için tekerlekli platformu birleştireceğiz ve telleri motorlara lehimleyeceğiz.

    Daha sonra eskisinden alınan Arduino UNO kartını takmak için rafları kuracağız. anakart veya diğer benzer ekler.

    Daha sonra Arduino UNO kartını bu raflara takıyoruz, ancak tek bir cıvatayı sıkamıyoruz - konektörler yolumuza çıkıyor. Elbette onları lehimleyebilirsiniz, ancak bu size kalmış.

    Daha sonra kızılötesi engel sensörünü özel yuvasına takıyoruz. Lütfen hassasiyet kontrolünün üstte olduğunu unutmayın, bu ayar kolaylığı içindir.

    Şimdi dijital hat sensörlerini takıyoruz, burada onlar için birkaç cıvata ve 4 somun aramamız gerekiyor.Platformun kendisi ile hat sensörü arasına iki somun takıyoruz ve sensörleri geri kalanıyla sabitliyoruz.

    Bir sonraki kurulumda Motor Shield'i veya başka bir şekilde motor sürücüsünü arayabilirsiniz. Bizim durumumuzda jumper'a dikkat edin. Motorlar için ayrı bir güç kaynağı kullanmayacağımız için bu konumda monte edeceğiz. Alt kısım elektrik bandı ile kapatılmıştır, böylece her ihtimale karşı Arduino UNO'nun USB konektöründe kazara kısa devre oluşmaz.

    Troyka Shield'ı Motor Shield'in üstüne takın. Sensörleri bağlamanın rahatlığı için gereklidir. Kullandığımız sensörlerin tamamı dijital olduğundan hat sensörleri pin olarak da adlandırıldığı için 8 ve 9 numaralı portlara, kızılötesi engel sensörü ise 12 numaralı porta bağlanır. Motorları kontrol etmek için Motor Kalkanı tarafından kullanıldıkları için 4, 5, 6, 7 numaralı bağlantı noktalarını kullanamayacağınızı unutmayın. Hatta öğrencilerin anlayabilmesi için bu portların üzerini kırmızı kalemle özel olarak boyadım.

    Zaten fark ettiyseniz, taktığımız pil bölmesinin dışarı fırlamaması için her ihtimale karşı siyah bir kılıf ekledim. Ve son olarak tüm yapıyı sıradan bir lastik bantla sabitliyoruz.

    Pil bölmesi bağlantıları 2 tip olabilir. Troyka Shield'a ilk kablolu bağlantı. Elektrik fişini lehimleyip elektrik prizine bağlamak da mümkündür. Arduino kurulu UNO.

    İşte robotumuz hazır. Programlamaya başlamadan önce her şeyin nasıl çalıştığını öğrenmeniz gerekir:
    - Motorlar:
    Bağlantı noktası 4 ve 5 bir motoru, 6 ve 7 ise diğerini kontrol etmek için kullanılır;
    Motorların dönüş hızını 5 ve 6 numaralı bağlantı noktalarında PWM ile ayarlıyoruz;
    4 ve 7 numaralı bağlantı noktalarına sinyal göndererek ileri veya geri.
    - Sensörler:
    Hepimiz dijitaliz, dolayısıyla 1 veya 0 şeklinde mantıksal sinyaller veriyorlar;
    Bunları ayarlamak için özel regülatörleri vardır ve uygun bir tornavida yardımıyla kalibre edilebilirler.

    Ayrıntıları Amperka'da bulabilirsiniz. Neden burada? Çünkü Arduino ile çalışmaya dair pek çok bilgi var.

    Belki de her şeye yüzeysel olarak baktık, inceledik ve elbette robotu monte ettik. Şimdi programlanması gerekiyor, işte burada - uzun zamandır beklenen program!

    Ve program Arduino IDE'ye dönüştürüldü:

    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 , YÜKSEK); analogWrite(5, 255); analogWrite( 6, 255); digitalWrite(7 , YÜKSEK); ) else ( digitalWrite(4 , YÜKSEK); analogWrite(5, 255); analogWrite(6, 50); digitalWrite(7 , DÜŞÜK); ) ) else ( if (digitalRead) (9)) ( digitalWrite(4, DÜŞÜK); analogWrite(5, 50); analogWrite(6, 255); digitalWrite(7, YÜKSEK); ) else ( digitalWrite(4, YÜKSEK); analogWrite(5, 255); analogWrite(6, 255); digitalWrite(7 , YÜKSEK); ) ) ) else ( digitalWrite(4 , YÜKSEK); analogWrite(5, 0); analogWrite(6, 0); digitalWrite(7 , YÜKSEK); ) )

    Sonuç olarak, bu programın eğitim için sadece bir nimet olduğunu, hatta kendi kendine çalışma için bile çalışmaya yardımcı olacağını söylemek istiyorum. Arduino komutları IDE. En önemli vurgu, 50'den fazla kurulum simgesiyle "başarısız olmaya" başlamasıdır. Evet, aslında bu önemli bir nokta çünkü yalnızca ArduBlok'ta sürekli programlama size Arduino IDE'de nasıl programlanacağını öğretmeyecek. Sözde "aksaklık", programlarda hassas hata ayıklama için komutları düşünmeyi ve hatırlamaya çalışmayı mümkün kılar.

    Sana başarılar diliyorum.

    Yani bir işlemciniz var. Muhtemelen işlemcinin bir şekilde istediğinizi yapacak şekilde programlanabileceğini anlıyorsunuzdur. Yararlı bir çalışmanın yapılabilmesi için (a) yazılmalıdır. faydalı program ve (b) yürütülmesi için işlemciye verin.

    Genel olarak, ne tür bir işlemciye sahip olursanız olun: en yeni Intel pentium Dizüstü bilgisayarınızda veya Arduino kartındaki bir mikro denetleyicide. Program yazma ilkeleri, ör. programlama her iki durumda da aynıdır. Tek fark, diğer cihazlarla çalışma fırsatlarının hızı ve kapsamıdır.

    Program nedir ve nereye yazılır?

    İşlemci, üretimin karmaşıklığına rağmen özünde oldukça basit ve anlaşılır bir şeydir. Nasıl düşüneceğini bilmiyor. Kendisine iletilen talimatları ancak körü körüne, bayt bayt yerine getirebilir. İşte bir talimat dizisinin kaba bir örneği:

    Talimat baytıİşlemci için ne anlama geliyor?
    00001001 şu anlama gelir: bir sonraki baytı alın ve 1 numaralı hücrede saklayın
    00000110 ... bu sadece 1 numaralı hücrede hatırladığımız bir sonraki bayt: 5 sayısı
    00011001 şu anlama gelir: hücre 1'deki değerden bir çıkarın ve güncellenen sonucu orada bırakın
    00101001 şu anlama gelir: 1 numaralı hücredeki değeri sıfırla karşılaştırın ve eğer sıfırsa, bir sonraki baytta belirtilen sayıda baytın üzerinden atlayın
    00000100 …eğer sonuç sıfırsa, sondan bir önceki talimata 4 bayt atlamak istiyoruz
    10000011
    01000001 ... "A" harfi bu koda karşılık gelir
    00101000 sonraki bayt kadar bayta geri atlamak istediğimiz anlamına gelir
    00000110 ...6 bayt geriye, 3 numaralı talimata atlayacağız
    10000011 bir sonraki baytta kodu yazılan karakteri görüntülemek istediğimiz anlamına gelir
    00100001 ... imza "!" sadece bu kodla eşleşiyor

    Böyle bir talimat dizisinin yürütülmesi sonucunda ekranda “AAAA!” panik ifadesi görüntülenecektir.

    Bu kadar basit bir amaç için oldukça fazla kod var! Eğer tüm programlar doğrudan bu şekilde yazılsaydı, karmaşık ürünlerin geliştirilmesinin yüzyıllar alacağı açıktır.

    Programlama dillerine neden ihtiyaç duyulur?

    Görevi milyonlarca kez basitleştirmek için programlama dilleri icat edildi. Birçoğu var ve sürekli duyanlardan bile bir veya iki düzineyi hızlı bir şekilde hatırlayabilirsiniz: Assembler, C, C ++, C #, Java, Python, Ruby, PHP, Scala, JavaScript.

    Bu dillerdeki programlar insanın doğal diline çok daha yakındır. Bu nedenle yazmaları daha kolay, daha hızlı ve daha keyifli ve en önemlisi çok daha kolay Okumak: Yazdıktan hemen sonra size, bir yıl sonra size veya meslektaşınıza.

    Sorun şu ki, bu tür diller işlemci tarafından anlaşılamıyor ve ona bu programı vermeden önce, derlemek: Doğal dilden sıfırlar ve birler biçimindeki aynı talimatlara tercüme edin. Bu, adı verilen programlar tarafından yapılır. derleyiciler. Fantezi düzeyinde kalmadığı sürece her dilin kendi derleyicisi vardır. Popüler diller için genellikle aralarından seçim yapabileceğiniz birkaç dil vardır. farklı üreticiler ve için farklı platformlar. Bunların çoğu internette ücretsiz olarak mevcuttur.

    Dolayısıyla, kişinin oldukça anlayabileceği bir dilde programlar vardır: bunlara "kaynak kodu", kısaca "kod" veya "kaynak kodları" da denir. Basit bir dille yazılmışlar metin dosyaları kullanarak herhangi not defteriyle bile metin editörü. Daha sonra derleyicinin yardımıyla sıfırlardan ve işlemcinin anlayabileceği kümelere dönüştürülürler: derleyici girdi olarak alır kaynak ve çıktıda oluşturur ikili çalıştırılabilir dosya , işlemcinin anladığı.

    İkili dosyalar okunamaz ve genel olarak yalnızca işlemci tarafından yürütülmek üzere tasarlanmıştır. Sahip olabilirler farklı tip ne için alındığına bağlı olarak: .exe - bunlar Windows için programlardır, .hex - Arduino vb. gibi bir mikrodenetleyici tarafından yürütülecek programlardır.

    Neden bu kadar çok programlama dili var ve aralarındaki fark nedir?

      Neden? Çünkü Dünya'da çok sayıda insan ve şirket var ve birçoğu bunu herkesten daha iyi yapabileceklerine inanıyor: daha kullanışlı, daha net, daha hızlı, daha ince.

      Fark nedir: farklı diller yazma hızı, okunabilirlik ve yürütme hızı arasında farklı bir denge oluşturur.

    Ekranda 99 şişe birayla ilgili bir şarkıyı görüntüleyen aynı programa bakalım. farklı diller programlama.

    Örneğin Perl dili. Hızlı yazılmış; programcının ne demek istediğini anlamak imkansızdır; yavaş yürütüldü:

    sub b( $n = 99 - @_ - $_ || Hayır; "$n şişe" . "s" x!!-- $n . " bira" ) ; $w = "duvarda"; harita ( b. "$w, \N". B. ", \n Birini indirin, dağıtın,\n ". b(0) . "$w. \n\n"} 0 .. 98

    Java dili. Nispeten uzun yazılmıştır; okuması kolay; oldukça hızlı çalışır, ancak çok fazla bellek kaplar:

    sınıf şişeleri ( public static void main( Sicim args) ( Sicim s = "s"; for (int biralar= 99 ; biralar>- 1 ; ) ( Sistem.out .print (biralar + "şişe" + s + " duvardaki bira, " ); Sistem.out .println (biralar + "şişe" + s + " bira, " ); if (biralar== 0 ) ( Sistem.çıkış .baskı( "Mağazaya git, biraz daha al") ; Sistem.out .println( "Duvarda 99 şişe bira var.\n ") ; Sistem.çıkış(0); ) başka Sistem.çıkış .baskı( "Birini indirin, dağıtın") ); s = (-- biralar == 1 ) ? "" : "S" ; Sistem.out .println(biralar + "şişe" + s + " duvardaki bira.\n ") ; } } }

    montaj dili. Uzun zamandır yazılıyor; okuması zor; çok hızlı koşuyor:

    kod bölümü cs'yi varsayar: kod, ds: kod org 100h başlangıç:; Ana döngü mov cx, 99; loopstart ile başlayacak şişeler: printcx'i çağırın; mov dx sayısını yazdır, satır1 ofsetini yazdır ; ilk satırın geri kalanını yazdır hareket ah, 9; MS-DOS yazdırma dizesi yordamı int 21h çağrısı printcx ; mov dx sayısını yazdır, satır2_3'ü kaydır ; 2. ve 3. satırların geri kalanı mov ah, 9 int 21h dec cx; bir çağrıyı kabul etme printcx ; mov dx sayısını yazdır, satır4'ü kaydır ; dördüncü satırın geri kalanını yazdır mov ah, 9 int 21h cmp cx, 0; Bira bitti mi? jne döngü başlangıcı; değilse int 20h'ye devam edin; MS-DOS'tan çık ; CX kaydını ondalık sayıyla yazdırmak için alt yordam printcx: mov di, ofset numbufferend ; arabelleği sondan doldurun hareket baltası, cx ; sayıyı AX'e yaz ki bölebilelim printcxloop: mov dx, 0 ; payın yüksek dereceli kelimesi - her zaman 0 mov bx, 10 böl bx ; DX:AX'i 10'a bölün. AX=bölüm, DX=kalan dl'yi ekle, "0" ; kalanı ASCII karakterine dönüştür mov [ds : di] , dl ; yazdırma arabelleğine koyun cmp ax, 0; Hesaplanacak başka rakam var mı? je printcxend ; değilse aralık sonu ; sonraki rakamı mevcut rakamın önüne koy jmp printcxloop; döngü printcxend: mov dx , di ; hesaplanan son rakamdan başlayarak yazdır hareket ah, 9 int 21h ret; Veri hattı1 ​​db "duvardaki bira şişeleri", 13 , 10 , "$" line2_3 db " bira şişeleri" , 13 , 10 , "Birini indirin, dağıtın", 13 , 10 , "$" satır4 db "duvardaki bira şişeleri.", 13 , 10 , 13 , 10 , "$" numbuffer db 0 , 0 , 0 , 0 , 0 numbufferend db 0 , "$" kodu biter end start

    Arduino nasıl programlanır?

    Arduino ya da Atmel mikrodenetleyicilerden bahsetmişken, bunlar için hangi dilde programlar yazılabilir? Teorik cevap: herhangi birinde. Ancak pratikte seçim Assembler, C ve C++ ile sınırlıdır. Bunun nedeni, karşılaştırıldığında masaüstü bilgisayarçok sınırlı kaynaklara sahipler. Kilobaytlarca bellek, gigabaytlarca değil. İşlemcide gigahertz değil megahertz var. Bu, ucuzluğun ve enerji verimliliğinin bedelidir.

    Bu yüzden verimli bir şekilde derlenebilen ve çalışabilen bir dile ihtiyacınız var. Yani, değerli talimatları ve boş hafızayı harcamadan, talimatlardaki sıfırları ve birleri mümkün olduğunca optimum şekilde tercüme etmek. Bu diller de aynı derecede etkilidir. Bunları kullanarak, mikrodenetleyici kaynaklarının dar sınırları dahilinde bile hızlı çalışan, zengin özelliklere sahip programlar yazabilirsiniz.

    Assembler, gördüğünüz gibi, en basit ve zarif dil değildir ve sonuç olarak C/C++, Arduino'nun amiral gemisi dilidir.

    Birçok kaynak Arduino'nun programlandığını söylüyor Arduino dili, İşleme, Kablolama. Bu tamamen doğru bir ifade değildir. Arduino, C/C++ dilinde programlanmıştır ve bu kelimelerle anılan şey, her seferinde tekerleği yeniden icat etmeden birçok tipik görevi çözmenize olanak tanıyan kullanışlı bir "gövde kitidir".

    Neden C ve C++ aynı cümlede geçiyor? C++, C'ye bir eklentidir. Her C programı doğru program C++ için, ancak tersi geçerli değildir. Her ikisini de kullanabilirsiniz. Çoğu zaman mevcut sorunu çözerken ne kullandığınızı düşünmezsiniz bile.

    Konuya gelin: ilk program

    İlk Arduino programını yazalım ve panoya çalıştıralım. Kaynak kodunu içeren bir metin dosyası oluşturmanız, onu derlemeniz ve elde edilen ikili dosyayı karttaki mikro denetleyiciye yerleştirmeniz gerekir.

    Sırayla gidelim. Kaynak kodunu yazalım. Bunu not defterine veya başka bir düzenleyiciye yazabilirsiniz. Ancak işi kolaylaştırmak için geliştirme ortamları (IDE: Integrated Development Environment) vardır. Tek bir araç şeklinde sağlarlar ve Metin düzeltici vurgulama ve ipuçlarıyla, bir düğmeyle başlatılan bir derleyiciyle ve diğer birçok keyifle. Arduino için bu ortama Arduino IDE adı verilmektedir. Resmi web sitesinden ücretsiz olarak indirilebilir.

    Ortamı yükleyin ve çalıştırın. Görünen pencerede şunu göreceksiniz: alanın çoğu metin düzenleyiciye verilmiştir. Kodun yazıldığı yerdir. Arduino dünyasında koda da denir kroki.

    O halde hiçbir şey yapmayan bir taslak yazalım. Yani mümkün olan minimum doğru program C++'da, bu sadece zaman kazandırır.

    void setup() ( ) void loop() ( )

    Henüz yazılı kodun anlamına odaklanmayacağız. Hadi derleyelim. Bunu yapmak için Arduino IDE'de araç çubuğunda bir "Doğrula" düğmesi vardır. Tıklayın ve birkaç saniye içinde ikili dosya hazır olacaktır. Bu, metin editörünün altındaki "Derleme tamamlandı" yazısıyla duyurulacaktır.

    Sonuç olarak, mikrodenetleyici tarafından çalıştırılabilen .hex uzantılı bir ikili dosyamız var.

    Şimdi onu Arduino'ya kaydırmanız gerekiyor. Bu işleme önyükleme, yanıp sönme veya yanıp sönme denir. Arduino IDE'ye yükleme yapmak için araç çubuğunda bir "Yükle" düğmesi vardır. Arduino'yu USB kablosuyla bilgisayara bağlayın, "Yükle"ye tıklayın; birkaç dakika içinde program Arduino'ya yüklenecektir. Bu durumda daha önce orada bulunan program silinecektir.

    Hakkında başarılı ürün yazılımı"Yükleme Tamamlandı" yazısını duyuracak.

    İndirmeye çalışırken bir hatayla karşılaşırsanız şunlardan emin olun:

      Araçlar → Board menüsünde Arduino'nun gerçekte bağlı olduğu port seçilir. Hangi bağlantı noktasının görünüp kaybolduğunu görmek için USB kablosunu takıp çıkarabilirsiniz: bu Arduino'dur.

      yükledin gerekli sürücüler Arduino için. Bu, Windows için gereklidir, Linux için gerekli değildir ve yalnızca MacOS'ta Arduino Duemilanove'den önceki eski kartlar için gereklidir.

    Tebrikler! O kadar yolu gittin temiz sayfa Arduino'da çalışan bir programa. Hiçbir şey yapmasına izin vermeyin ama bu zaten bir başarı.