• arduino ide komutları. Arduino ve uyumlu programlama dilleri. Arduino denetleyicisi kullanan projeler. Petin V.A.

    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 monte edebilirsiniz. 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 çevresinde yaygın olarak bilinen dile dayanan kendi Arduino programlama dillerine sahiptirler. C/C++. Ne olduğuna daha yakından bakalım.

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

    Noktalı virgül;

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

    int LEDpin = 9;

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

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

    // Çift eğik çizgiden sonraki herhangi bir şey gri olacak ve program tarafından okunmayacaktır.

    Yorumlar, kodunuzu yorumlamak için kullandığınız şeydir. İyi kod iyi yorumlanmıştır. Yorumlar, size ve kodunuza rastlayabilecek herkese, onu yazarken ne düşündüğünüzü söylemek için vardır. İyi bir yorum şöyle bir şey olurdu:

    // LED'i bu Arduino 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 ne istersen yazabilirsin. Bir yorum için çok fazla metne ihtiyacınız varsa, aşağıda gösterilen çok satırlı yorumu kullanabilirsiniz:

    /* Çok satırlı bir yorum tek bir ters eğik çizgi ve ardından bir yıldız işaretiyle açılır. Bundan sonraki herhangi bir şey, önce bir yıldız işareti ve ardından bir ters eğik çizgi kullanarak yorumu kapatana kadar derleyici tarafından grileştirilir ve yoksayılır */

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

    Kıvrımlı parantez ( )

    Kıvrımlı parantezler, bir işlevin yürüttüğü yönergeleri eklemek için kullanılır (işlevleri daha sonra ele alacağız). Her zaman bir açık kaşlı ayraç ve bir kapanış kaşlı ayraç vardır. Kaşlı ayracı kapatmayı unutursanız, derleyici bir hata kodu yazdırır.

    Void loop() ( //bu kaşlı ayraç açılır //program burada harika )//bu kaşlı ayraç kapanır

    Unutmayın - hiçbir süslü parantez kapatılamaz!

    işlevler ()

    Şimdi fonksiyonlar hakkında konuşma zamanı. İşlevler, daha kolay kullanabilmeniz için belirli anahtar sözcüklerle kapsanacak kadar sık ​​kullanılan kod parçalarıdır. Örneğin, bir köpeği yıkamanız gerekmesi durumunda aşağıdaki talimat dizisi bir fonksiyon olabilir:

    1. bir kova al
    2. su ile 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 bırak

    Bu basit talimatlar dizisi, WashDog olarak adlandırabileceğimiz bir işlev içinde özetlenebilir. Tüm bu talimatları her yürütmek istediğimizde, sadece WashDog yazıyoruz ve işte - tüm talimatlar yürütülüyor.

    Arduino, . Bunları girdiğinizde, işlev adı turuncu olacaktır. Örneğin, pinMode() işlevi, Arduino'nun pin modunu belirtmek için kullanılan genel bir işlevdir.

    PinMode işlevinden sonraki parantezler ne olacak? Birçok işlev bağımsız değişken gerektirir. Bağımsız değişken, işlevin çalıştığında kullandığı bilgidir. WashDog işlevimiz için bağımsız değişkenler, köpeğin adı ve sabun türü ile kovanın sıcaklığı ve boyutu olabilir.

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

    Argüman 13, pim 13'ü ifade eder ve ÇIKIŞ, pimin çalışmasını istediğiniz moddur. Bu argümanları girdiğiniz terminolojide buna data pass denir, gerekli bilgileri fonksiyonlara iletirsiniz. Tüm işlevler bağımsız değişken gerektirmez, ancak açılış ve kapanış parantezleri boş olsa da kalır.

    milis(); //Arduino'nun başlaması için gereken süreyi milisaniye cinsinden alın

    OUTPUT kelimesinin genellikle mavi olduğuna dikkat edin. Arduino programlama dilinde sıkça kullanılan belirli anahtar kelimeler vardır ve mavi renk bunların tanımlanmasına yardımcı olur. Arduino IDE bunları otomatik olarak maviye çevirir.

    geçersiz kurulum()

    Setup() fonksiyonu, adından da anlaşılacağı gibi, Arduino kartını kurmak için kullanılır. Arduino, kurulumdan () sonra kaşlı ayraçlar arasındaki tüm kodu yalnızca bir kez yürütür. setup() içinde meydana gelen tipik şeyler, örneğin, iletişim modunun ayarlanmasıdır:

    Void setup() ( // kaşlı ayraçlar arasındaki kod yalnızca bir kez yürütülür )

    setup() işlevinden önce void'in ne anlama geldiğini merak ediyor olabilirsiniz. Void, işlevin hiçbir bilgi döndürmediği anlamına gelir.

    Bazı işlevler değer döndürür - DogWash işlevimiz, köpeği temizlemek 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 tuhaf görünüyorsa, merak etmeyin, kurs devam ederken her yaygın Arduino işlevini ele alacağız.

    Kurulum() hakkında bilmeniz gereken birkaç şeye bakalım:

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

    boşluk döngüsü()

    Arduino geliştiricilerini sevmelisiniz çünkü fonksiyon isimlerinin kendileri için konuşmasını sağladılar. Adından da anlaşılacağı gibi, loop() içindeki kaşlı ayraçlar arasındaki tüm kod tekrar tekrar tekrarlanır ve loop kelimesi tam olarak "loop" olarak çevrilir. loop() işlevi, programınızın gövdesinin olacağı yerdir.

    setup() işlevinde olduğu gibi, loop() işlevi herhangi bir değer döndürmez, bu nedenle ondan önce boşluk sözcüğü gelir.

    Void loop() ( //buraya koyduğunuz herhangi bir kod tekrar tekrar çalıştırılır )

    Kodun tek bir büyük döngüde çalışması size garip geliyor mu? 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, İşleme adlı bir program tarafından bize sağlanabilir. Her ikisi de aynı motorda yapıldığı için Arduino IDE'ye çok benzer. İşleme, orijinal programdan daha düşük olmayan kapsamlı bir özellik setine sahiptir. İndirilebilir Serial kütüphanesi sayesinde kullanıcı, board ile Processing'in birbirlerine gönderdikleri veriler arasında iletişim kurabiliyor ve bu sayede board'un kendi PC'mizden program çalıştırmasını sağlayabiliyoruz.

    Orijinal programın başka bir ilginç versiyonu daha var. Buna B4R denir ve temel farkı, temel olarak C dilini değil, başka bir programlama dili olan Basic'i kullanmasıdır. Bu yazılım ürünü ücretsizdir. Bununla çalışmak için, bu ürünün yaratıcıları tarafından yazılanlar da dahil olmak üzere iyi öğreticiler var.

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

    Arduino rakipleri

    Çeşitli elektronik devreler ve robotikler oluşturmak için mikrodenetleyicilerin üretimine yönelik bu pazarın dünya çapında birçok hayranı var. Bu durum, sadece benzer ürünleri sunan rakiplerin piyasada ortaya çıkmasına katkıda bulunur. Bunlara ek olarak, farklı kalitede önemli sayıda sahte üretilir. Bazıları aynı kalitede oldukları için orijinallerinden ayırt etmek çok zordur, bazıları ise çok düşük performansa sahiptir ve orijinal ürünlerle hiç çalışmayabilir.

    JavaScript yorumlayıcılı mikroişlemcileri destekleyen Arduino kartları bile var. Her şeyden önce, C yerine Java dilini kullanmak isteyenler için önemlidirler. Sonuçta, daha basittir ve sonuçları daha hızlı elde etmenizi sağlar. Ancak bu kartlar arduino'dan daha pahalıdır ve bu da önemli bir dezavantajdır.

    Eğer bir hobi arıyorsanız ve elektrik mühendisliği gibi bir alana ilgi duyuyorsanız bunun için Arduino'yu güvenle tercih edebilirsiniz. Bu hobinin birçok faydası var. Bu aktivite farklı alanlarda bilgi sahibi olmanızı gerektireceğinden entelektüel olarak gelişeceksiniz.

    Eğlencenin yanı sıra hobiniz, günlük hayatınızı kolaylaştırmak için kullanabileceğiniz tonlarca faydalı eşya 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 da zor olmayacak. Gelecekte, bilgilerini sizinle paylaşacak ve sizi yeni deneyler yapmanız için teşvik edecek, dünyanın her yerinde sizinle aynı fikirde olan birçok insan bulacaksınız!

    Arduino modülünün programlama dilinin temeli C dilidir (daha çok C++). Daha doğrusu, dilin bu lehçesine Processing/Wiring denir. Dile ilişkin iyi bir genel bakış ekte bulunabilir. Ve daha çok dil hakkında değil, programlama hakkında konuşmak istiyorum.

    Bir program, işlemcinin anladığı bir dizi komuttur, bilgisayarınızın işlemcisi veya Arduino modülünün mikrodenetleyicisinin işlemcisi, fark etmez. İşlemci talimatları okur ve yürütür. İşlemcinin anladığı tüm komutlar ikili sayılardır. Bunlar yalnızca ikili sayılardır ve başka bir şey değildir. İşlemcinin bir zamanlar amaçlandığı aritmetik işlemleri gerçekleştirirken, işlemci sayılarla çalışır. İkili sayılar. Ve komutların ve atıfta bulundukları şeyin yalnızca ikili sayılar olduğu ortaya çıktı. Bunun gibi. Ancak işlemci, ikili sayıların bu "yığını" nı nasıl anlıyor?

    İlk olarak, tüm bu ikili sayılar, adresleri olan ardışık RAM hücrelerine yazılır. Bir programı yüklediğinizde ve program çalışmaya başladığında, işlemci programın talimatın yazılması gereken ilk adresini alır. İşlemciden sayılarla işlem yapılmasını gerektiren bu talimatlarda "tanımlama işaretleri" bulunur, örneğin sonraki iki bellek hücresinde eklenmesi gereken iki sayı vardır. Ve sayaç, hadi buna komut sayacı diyelim, bir sonraki komutun adresinin yazıldığı yerde, bu durumda programın bir sonraki komutu bu adreste alması için adresi artırır. Program düzgün çalışmazsa veya çökerse, işlemci bir hata yapabilir ve ardından komut yerine bir sayı okuduktan sonra işlemci yapması gerekeni hiç yapmaz ve program "donar".

    Bu nedenle, herhangi bir program bir ikili sayılar dizisidir. Ve programlama, doğru ikili sayı dizilerini doğru bir şekilde yazma yeteneğidir. Uzun zaman önce programlama dilleri adı verilen özel araçlar program yazmak için kullanılmaya başlandı.

    Bununla birlikte, herhangi bir program, her şeyden önce, programın ne yapması gerektiği ve ne için olduğu konusunda net bir anlayışa sahip olmanızı gerektirir. Bunu ne kadar net anlarsanız, bir program oluşturmak o kadar kolay olur. Küçük programlar, hangi programların küçük hangilerinin küçük olduğunu söylemek zor olsa da bir bütün olarak düşünülebilir. Daha karmaşık programlar en iyi şekilde, bağımsız programlar olarak ele alınabilecek parçalara bölünür. Böylece daha iyi oluşturulurlar, hata ayıklamaları ve test edilmeleri daha kolaydır.

    Tartışmaya hazır değilim ama programa günlük dilde bir açıklamayla başlamanın daha uygun olacağını düşünüyorum. Ve bu anlamda programlamanın program kodu yazmakla karıştırılmaması gerektiğine inanıyorum. Bir program sıradan terimlerle tanımlandığında, örneğin program kodu oluşturmak için hangi programlama dilini seçeceğinizi belirlemeniz daha kolaydır.

    İkili sayılar kullanarak program yazmaya en yakın şey, montaj dilidir. Dil komutlarının işlemci tarafından anlaşılabilen ikili komutlara karşılık gelmesiyle karakterize edilir. Ancak bir araya getiricideki programları kodlamak daha fazla çaba gerektirir ve biçimsel işlemlerden çok sanata daha yakındır. Basic veya C gibi üst düzey diller daha çok yönlüdür ve kullanımı daha kolaydır. Ve uzun zamandır, genel bir biçimde program yazmak için bir grafik dili kullanılmış ve son zamanlarda bu dilden işlemcilerin diline "çevirmenler" ortaya çıkmıştır.

    Genel amaçlı programlama dillerine ek olarak, her zaman programlama dillerinde bazı uzmanlıklar olmuştur ve uzmanlaşmış diller olmuştur. İkincisine, Arduino modülünün programlama dilini de dahil ederdim.

    Modüle ihtiyacımız olan bir şeyi yapmasını söylemek için ihtiyacınız olan her şey, uygun bir komutlar dizisi halinde organize edilmiştir. Ama önce, Arduino'dan neye ihtiyacımız var?

    Modül farklı kapasitelerde kullanılabilir - robotun kalbidir (veya kafasıdır), cihazın temelidir, ayrıca mikrodenetleyicilerle vb.

    Yukarıda, modülün bilgisayara bağlantısını kontrol etmek için basit programlar kullandık. Bazıları için çok basit görünebilir ve bu nedenle ilginç olmayabilirler, ancak herhangi bir karmaşık program, daha önce tanıştığımıza benzer daha basit parçalardan oluşur.

    Bakalım en basit LED Blink programı bize neler anlatabilecek.

    int ledPin = 13;

    pinMode(ledPin, ÇIKIŞ);

    digitalWrite(ledPin, YÜKSEK);

    digitalWrite(ledPin, DÜŞÜK);

    Öncelikle LED'in ne olduğunu hatırlayalım. Temelde bu, tasarımı nedeniyle akım ileri yönde aktığında bağlantı noktasının parlamaya başladığı sıradan bir diyottur. Yani LED'in yanabilmesi için içinden akım geçmesi gerekir, bu da LED'e voltaj uygulanması gerektiği anlamına gelir. Ve akımın izin verilen değeri aşmaması için, akım sınırlama adı verilen LED'e seri olarak bir direnç bağlanmalıdır (bkz. Ek A, dijital çıkış). Arduino modülünün temelini oluşturan mikrodenetleyici, LED'e voltaj uygular. Mikrodenetleyici, komutlarımızı yürüten işlemciye ek olarak bir veya daha fazla G / Ç bağlantı noktasına sahiptir. Belirli bir bağlantı noktası cihazını dikkate almadan, şunu söyleyelim - bir bağlantı noktası pimi bir çıkış olarak çalıştığında, açık ve kapalı olmak üzere iki duruma sahip bir dijital mikro devrenin çıkışı olarak temsil edilebilir (çıkışta voltaj vardır, orada çıkışta voltaj yok).

    Ancak aynı port pini giriş olarak da çalışabilir. Bu durumda, örneğin, bir dijital mikro devrenin girişi olarak temsil edilebilir - girişe yüksek veya düşük bir mantık seviyesi uygulanır (bkz. Ek A, dijital giriş).

    LED'i nasıl yanıp sönüyoruz:

    Bağlantı noktası çıkış pimini etkinleştirin. Bağlantı noktası çıkışını devre dışı bırakın.

    Ama işlemci çok hızlı. Göz kırpmayı fark edecek vaktimiz olmayacak. Bu yanıp sönmeyi fark etmek için duraklamalar eklememiz gerekir. Yani:

    Bağlantı noktası çıkış pimini etkinleştirin. 1 saniye duraklatın.

    Bağlantı noktası çıkışını devre dışı bırakın.

    1 saniye duraklatın.

    Bu bizim programımız. İşlemci ilk komutu okuyacak ve çıkışı açacaktır, LED yanacaktır. Daha sonra işlemci duracak ve çıkışı kapatacak, LED sönecektir. Ama sadece bir kez gözlerini kırpıştırdı.

    Bir işlemin veya komut dizisinin tekrarına programlamada döngü denir. Farklı döngü türleri vardır. Belirli sayıda yürütülen bir döngü vardır. Bu bir for döngüsüdür. Döngü dili yapısının bir parçası olan bazı koşullar karşılanana kadar çalışan döngüler vardır. Ve koşul hiçbir zaman karşılanmazsa, döngü sonsuz sayıda yürütülür. Bu sonsuz bir döngü.

    Mikrodenetleyicilerin yukarıda gösterilen türden programlarla kullanıldığını düşünmüyorum. Yani, birkaç komut bir kez yürütülür ve denetleyici artık çalışmaz. Kural olarak, ona besleme voltajı uygulanır uygulanmaz sürekli çalışır. Ve bu nedenle, mikrodenetleyici sonsuz bir döngüde çalışmalıdır.

    Void loop() işlevi bunu söylüyor, döngü bir döngüdür, kapalı bir döngüdür. Döngüyü sonlandırmak için hiçbir koşul yoktur ve bu nedenle sonlandırmak için hiçbir koşul yoktur.

    Ayrıca Arduino modülüne portun hangi pinini ve nasıl kullanmak istediğimizi çıkış için mi (OUTPUT) yoksa giriş için mi (INPUT) söylemeliyiz. Arduino dili için kullanılmasa bile zorunlu olan void setup() fonksiyonu ve pinin çalışma modunu ayarlamak için pinMode() komutu bu amaca hizmet eder.

    pinMode(ledPin, ÇIKIŞ);

    Yine de, dil yapısı çıktı numarasını belirlemek için değişkenleri kullanır:

    int ledPin = 13;

    Değişkenleri kullanmak uygundur. Çıkış 12 yerine çıkış 13'ü kullanmaya karar verirseniz sadece bir satırda değişiklik yapmış olursunuz. Bu özellikle büyük programlar için geçerlidir. Değişkenin adı istediğiniz gibi seçilebilir, ancak kural olarak yalnızca karakterlerden oluşmalıdır ve çoğu zaman karakter sayısı sınırlıdır. Değişken adını yanlış ayarlarsanız derleyicinin sizi düzelteceğini düşünüyorum.

    digitalWrite(ledPin, HIGH) işlevi, verilen pimi yüksek duruma ayarlar, yani pimi açık konuma getirir.

    Gecikme (1000), zaten anladığınız gibi, 1000 milisaniye veya 1 saniyelik bir duraklama anlamına gelir.

    Geriye int, void gibi öneklerin ne anlama geldiğini anlamak kalır. Herhangi bir değer, herhangi bir değişken, program komutlarının yanı sıra belleğe yerleştirilir. Sayılar genellikle 8 bitlik bellek hücrelerine yazılır. Bu bir bayt. Ancak baytlar, 0 ile 255 arasındaki sayılardır. Büyük sayıları yazmak için iki bayt veya daha fazlasına, yani iki veya daha fazla bellek hücresine ihtiyacınız vardır. İşlemciye numarayı nasıl bulacağını açıklığa kavuşturmak için, farklı tipteki numaraların farklı adları vardır. Yani bayt denilen bir sayı bir hücre alır, int (integer, integer) daha büyüktür. Ayrıca programlama dillerinde kullanılan fonksiyonlar da sayı döndürmektedir. Bir işlevin ne tür bir sayı döndürmesi gerektiğini belirlemek için, işlevden önce o tür döndürülen sayıyı yazın. Ancak bazı işlevler sayı döndürmeyebilir, bu tür işlevlerden önce geçersiz gelir (bakınız Ek A, değişkenler).

    En basit programın bile söyleyebileceği bu kadar ilginç.

    Bütün bunları ekte okuyacağınızı umuyorum. Şimdi sadece dilin olanaklarından bildiklerimizi kullanarak basit deneyler yapalım. İlk olarak, çok fazla bellek alanı kaplayan bir int değişkenini bir byte ile değiştirelim - bir yer, bir bellek hücresi. Ne yapabileceğimize bir bakalım.

    bayt ledPin = 13;

    pinMode(ledPin, ÇIKIŞ);

    digitalWrite(ledPin, YÜKSEK);

    digitalWrite(ledPin, DÜŞÜK);

    Programı derleyip modüle yükledikten sonra programın işleyişinde herhangi bir değişiklik fark etmeyeceğiz. İyi. Ardından, çalışmasındaki değişiklikleri fark etmek için programı değiştireceğiz.

    Bunu yapmak için, gecikme (1000) işlevindeki sayıyı my_del olarak adlandıran bir değişkenle değiştireceğiz. Bu değişken bir tam sayı, yani bir int olmalıdır.

    int my_del = 5000;

    Her komutu noktalı virgülle bitirmeyi unutmayın. Programda değişiklikler yapın, derleyin ve modüle yükleyin. Ardından değişkeni değiştirin ve yeniden derleyin ve yükleyin:

    bayt my_del = 5000;

    Fark, eminim, göze çarpacak.

    Duraklamaların süresini değiştirerek başka bir deney yapalım. Duraklamaların süresinin kısaltılması, diyelim ki beş kat. 2 saniye duralım, sonra da beş kat artıracağız. Tekrar 2 saniye duralım. Belirli sayıda çalışan bir döngüye for döngüsü denir ve şöyle yazılır:

    için (int ben = 0; ben<5; i++)

    for döngüsünde yürütülen bir şey

    Döngüyü yürütmek için bir değişkene ihtiyacı var, elimizde i var, değişkene ona atadığımız bir başlangıç ​​değeri verilmesi gerekiyor. Ardından döngünün sonlandırma koşulunu takip eder, i'nin 5'ten küçük olduğunu görürüz. Ve i++ gösterimi, C dili için tipik olan, değişkeni bir artırma gösterimidir. Küme parantezler, bir for döngüsünde yürütülecek komut dizisini kısıtlar. Diğer programlama dilleri, bir işlev kodu bloğunu sınırlandırmak için başka sınırlayıcılara sahip olabilir.

    Döngünün içinde, birkaç değişiklikle öncekiyle aynı şeyi yapıyoruz:

    için (int ben = 0; ben<5; i++)

    digitalWrite(ledPin, YÜKSEK);

    digitalWrite(ledPin, DÜŞÜK);

    benim_del = benim_del - 100;

    Yukarıda duraklama kaydını değiştirmekten bahsetmiştik ve duraklamanın kendisini değiştirmek, değişkeni 100 azaltarak elde edilir.

    İkinci döngü için aynı kod bloğunu yazacağız ancak duraklama süresi değişkenini 100 artıracağız.

    için (int ben = 0; ben<5; i++)

    digitalWrite(ledPin, YÜKSEK);

    digitalWrite(ledPin, DÜŞÜK);

    Duraklamada bir azalma ve bir artış kaydının farklı göründüğünü fark ettiniz. Bu aynı zamanda C dilinin bir özelliğidir. Netlik için, bu girişin yalnızca eksi işaretini artı olarak değiştirerek tekrarlanması gerekirdi. Böylece bu programı elde ederiz:

    int ledPin = 13;

    int my_del = 1000;

    pinMode(ledPin, ÇIKIŞ);

    için (int ben = 0; ben<5; i++)

    digitalWrite(ledPin, YÜKSEK);

    digitalWrite(ledPin, DÜŞÜK);

    için (int ben = 0; ben<5; i++)

    digitalWrite(ledPin, YÜKSEK);

    digitalWrite(ledPin, DÜŞÜK);

    Programımızın kodunu Arduin programına kopyalayıp derleyelim ve modüle yükleyelim. Duraklamaların süresindeki değişiklik dikkat çekicidir. Ve daha da dikkat çekici olacak, for döngüsünün örneğin 8 kez çalıştırılıp çalıştırılmadığını deneyin.

    Az önce yaptığımız şey profesyonel programcılar tarafından yapıldı - hazır bir programa sahip olduğumuz için, ihtiyaçlarınıza veya isteklerinize uyacak şekilde kolayca değiştirilebilir. Bu nedenle, tüm programlarını saklarlar. Sana yapmanı tavsiye ettiğim şey bu.

    Deneyimizde neyi kaçırdık? İşimiz hakkında yorum yapmadık. Bir yorum eklemek için, ya çift "ileri" eğik çizgi ya da tek bir eğik çizgi, ancak yıldız işaretleri kullanılır (bakınız Ek A). Bunu kendi başınıza yapmanızı tavsiye ederim, çünkü bir süre sonra programa döndüğünüzde, programda şu veya bu yerde ne yaptığınıza dair açıklamalar varsa daha kolay anlayacaksınız. Ayrıca, açıklamasını herhangi bir metin düzenleyicide yapılan normal dilde saklamak için her programın bulunduğu klasörde tavsiye ederim.

    En basit program "bir LED'i yanıp söner", bir düzine daha fazla deney yapabilir (bir LED ile bile). Bana öyle geliyor ki işin bu kısmı, başka ilginç yapılabilecek şeyleri icat etmek en ilginç olanı. Programlama dilinin açıklandığı ekteki "program kontrolü" bölümüne bakarsanız, for döngüsünü farklı türde bir döngüyle değiştirebilirsiniz. Ve diğer döngü türlerinin nasıl çalıştığını deneyin.

    Mikrodenetleyicinin işlemcisi, diğerleri gibi hesaplamalar yapabilse de (bu yüzden icat edilmiştir) ve bu, örneğin cihazlarda kullanılsa da, mikrodenetleyicinin en karakteristik işlemi, port çıkışını yüksek veya yüksek bir değere ayarlamaktır. düşük durum, yani harici olaylara tepki olarak "LED yanıp söner".

    Mikrodenetleyici, dış olayları esas olarak girdilerin durumuna göre öğrenir. Port pinlerini bir dijital girişe ayarlayarak onu izleyebiliriz. Girdinin başlangıç ​​durumu yüksekse ve bir olay girdinin düşmesine neden oluyorsa, o olaya yanıt olarak bir şeyler yapabiliriz.

    En basit örnek, giriş üzerindeki bir düğmedir. Düğmeye basılmadığında, giriş yüksektir. Düğmeye basarsanız, giriş azalır ve çıkıştaki LED'i "yakabiliriz". Düğmeye bir sonraki basışınızda, LED kapatılabilir.

    Bu yine basit bir program örneğidir. Yeni başlayanlar için bile ilgisiz görünebilir. Ancak, bu basit program bile oldukça faydalı olabilir. Sadece bir örnek vereceğim: düğmeye bastıktan sonra LED'i yakmayacağız, yanıp söneceğiz (belirli bir şekilde). Kızılötesi radyasyona sahip bir LED alalım. Sonuç olarak, bir kontrol paneli alıyoruz. İşte böyle basit bir program.

    Programın farklı sürümlerinde örnek listesinde farklılıklar vardır. Ancak, girişle çalışmak için bir örneğin ve bir program şemasının ("uygulama" adlı örnekler bölümünde) bulunduğu uygulamadaki dil kılavuzuna başvurabilirsiniz. Programı kopyalayacağım:

    int ledPin = 13;

    pinMode(ledPin, ÇIKIŞ);

    pinMode(inPin, GİRİŞ);

    eğer (digitalRead(inPin) == YÜKSEK)

    digitalWrite(ledPin, YÜKSEK);

    digitalWrite(ledPin, DÜŞÜK);

    Ve gördüğünüz gibi, eskisini değiştirerek tamamen yeni bir program elde ediyoruz. Şimdi LED, yalnızca pim 2'ye bağlı olan düğmeye basıldığında yanıp sönecektir. Pim 2, 10 kΩ'luk bir direnç aracılığıyla ortak kabloya (toprak, GND) bağlıdır. Düğmenin bir ucu + 5V besleme voltajına, diğer ucu ise pim 2'ye bağlanır.

    Programda, program kontrol bölümünden ise yeni bir dil yapısı ile karşılaşıyoruz. Şöyle okur: koşul (parantez içindeki) karşılanırsa, süslü parantez içindeki program bloğu yürütülür. (digitalRead(inPin) == HIGH) koşulunda, girişin iki eşit işaret kullanılarak yüksek duruma eşit olduğuna dikkat edin! Çoğu zaman aceleyle bu unutulur ve durumun yanlış olduğu ortaya çıkar.

    Program Arduino modülüne kopyalanıp yüklenebilir. Ancak programın çalışmasını test etmek için modülün tasarımında bazı değişiklikler yapmanız gerekiyor. Ancak, modülün türüne bağlıdır. Orijinal modül, genişletme kartlarına bağlantı için soketlere sahiptir. Bu durumda, istenen konektör konumlarına uygun katı teller yerleştirebilirsiniz. Modülüm, genişletme kartlarına bağlanmak için kanat kontaklarına sahiptir. Uygun bir konektör arayabilir veya daha ucuz olan bir DIP paketindeki çip için uygun bir soket kullanabilirim.

    İkinci soru ise programda kullanılan modülün çıktıları nasıl bulunur?

    Siteden çektiğim resim bu soruyu anlamanıza yardımcı olacaktır: http://robocraft.ru/.

    Pirinç. 4.1. Kontrolör pinlerinin ve Arduino modülünün yeri ve amacı

    CraftDuino modülümdeki tüm pimler etiketlenmiştir, bu nedenle doğru pimi bulmak kolaydır. Bir düğme ve bir direnç bağlayabilir ve programın çalışmasını kontrol edebilirsiniz. Bu arada, yukarıda belirtilen RoboCraft web sitesinde, tüm süreç resimlerde gösteriliyor (ancak program tam olarak bu tür sonuçları kullanmıyor!). bakmanı tavsiye ederim

    Birçok mikrodenetleyicinin bileşiminde ek donanım aygıtları bulunur. Bu nedenle, Arduino modülünün üzerine inşa edildiği Atmega168, seri veri alışverişi kullanan diğer cihazlarla iletişim kurmak için yerleşik bir blok olan bir UART'a sahiptir. Örneğin, COM bağlantı noktası üzerinden bir bilgisayarla. Veya yerleşik UART bloğunu kullanan başka bir mikrodenetleyici ile. Analogdan dijitale dönüştürücü de vardır. Ve bir darbe genişliği modülasyon sürücüsü.

    İkincisinin kullanımı, RoboCraft web sitesinden de kopyalayacağım bir programla gösterilmiştir. Ancak program uygulamadan alınabilir. Ve belki de Arduino programının örneklerindedir.

    // BARRAGAN tarafından sönümlenen LED

    int değeri = 0; // istenen değeri saklamak için değişken

    dahili pin = 9; // LED, dijital pin 9'a bağlı

    // pinMode işlevini çağırmaya gerek yok

    for(değer = 0 ; değer<= 255; value+=5) // постепенно зажигаем светодиод

    analogWrite(ledpin, değer); // çıkış değeri (0'dan 255'e)

    gecikme(30); // bekle 🙂

    for(değer = 255; değer >=0; değer-=5) // LED'i yavaş yavaş söndür

    analogWrite(ledpin, değer);

    Önceki programda dijital girişi okuyan digitalRead(inPin) işlevi bizim için yeniyse, bu programda analogWrite(ledpin, value) işlevi bizim için yenidir, ancak bu işlevin parametreleri zaten tanıdık değişkenlerdir. Analog giriş kullanma, ADC (analogdan dijitale dönüştürücü) kullanma hakkında daha sonra konuşacağız. Ve şimdi programlamanın genel sorularına geri döneceğiz.

    Programlama herkesin erişebileceği bir şeydir, ancak hem programlamada hem de herhangi bir programlama dilinde ustalaşmak zaman alacaktır. Bugün, programlamada ustalaşmaya yardımcı olan bir dizi program var. Ve bunlardan biri doğrudan Arduino modülü ile ilgilidir. Buna Arduino için Scratch veya kısaca S4A denir. Bu programı şu adreste bulabilir ve indirebilirsiniz: http://seaside.citilab.eu/scratch/arduino. Programın adının tam olarak nasıl çevrildiğini bilmiyorum ama "sıfırdan başlamak", "sıfırdan başlamak" olarak tercüme edilir.

    S4A proje sitesinin Windows ve Linux sürümleri vardır, ancak sonraki işletim sistemi için program Debian dağıtım sürümünde kurulmaya hazırdır. Diğer Linux dağıtımları ile kullanılamaz demek istemiyorum ama önce Windows üzerinde Arduino modülü ile programda nasıl çalışılır onu görelim.

    Programı olağan şekilde kurduktan sonra, dil değiştiriciyi kullanarak arayüzü Rusça olarak ayarlayabilirsiniz.

    Pirinç. 4.2. Program arayüzü dil değiştirici

    İlk araç çubuğu simgesi tıklanırsa, program arayüzünün olası tüm dillerini görüntüler. Rus dili bölümünde bulunabilir ...

    Pirinç. 4.3. Program arayüzünde kullanılacak dillerin listesi

    …“daha…” olarak işaretlendi.

    Hiçbir şey yapılmazsa, sağ penceredeki "Pano aranıyor ..." yazısı kalır, ancak modül bulunmaz. Arduino modülünü S4A programına bağlamak için proje web sitesinden başka bir şey indirmeniz gerekiyor.

    Pirinç. 4.4. S4A için Arduino modülüne yüklenecek dosya

    Bu dosya Arduino (Sketch) için bir programdan başka bir şey değildir. Yani Arduino editörüne kopyalanabilen, derlenebilen ve modüle yüklenebilen bir metin dosyasıdır. Arduino programından çıktıktan sonra S4A programını çalıştırabilirsiniz ve artık modül yerini almıştır.

    Pirinç. 4.5. Modülün programa bağlanması

    Modülün analog girişleri, dijital girişler gibi bağlı değildir, bu nedenle modül için görüntülenen değerler sürekli rastgele değişir.

    Her programlama dili, aynı kodun (döngü) birden fazla yürütülmesini, uygun kod parçasının (koşulların) seçilmesini ve mevcut kod parçasından çıkmak için yönergeleri sağlayan bir dizi kontrol yönergesine sahiptir.

    Arduino IDE, gerekli kontrollerin çoğunu C/C++'dan ödünç almıştır. Sözdizimleri C ile aynıdır. Aşağıda sözdizimlerini kısaca açıklıyoruz.

    if ifadesi

    if ifadesi, belirli bir koşulu kontrol etmenin sonucuna bağlı olarak belirli bir program parçasını yürütmenize izin verir. Koşul sağlanırsa program kodu yürütülür, koşul sağlanmazsa program kodu atlanır. if komutunun sözdizimi aşağıdaki gibidir:

    If(koşul) ( ifade1; ifade2; )

    Koşul, bir işlev tarafından döndürülen bir değişkenin veya değerin herhangi bir karşılaştırması olabilir. if koşulunun ana kriteri, cevabın her zaman doğru (doğru) veya yanlış (yanlış) olması gerektiğidir. Bir if ifadesi için koşul örnekleri:

    if(a!=2) ( ) if(x<10) { } if(znak==’B’) { }

    Koşulun içine yazılan parantezlerin içinde kodu çalıştırabilirsiniz.

    Programlamayı öğrenmeye başlayan kişiler, genellikle belirli bir değişkenin değerini tek bir "=" işaretiyle eşitleme hatasına düşerler. Böyle bir kayıt, bir değişkene bir değer atandığını açık bir şekilde gösterir ve bu nedenle koşul her zaman "doğru" olacaktır, yani yerine getirilecektir. Bir değişkenin belirli bir değere eşit olup olmadığını kontrol etmek her zaman çift eşittir işaretiyle (==) gösterilir.

    Bir fonksiyonun durumunu koşul olarak kullanabilirsiniz, örneğin:

    If(init()) ( Serial.print("ok"); )

    Yukarıdaki örnek şu şekilde yürütülür: ilk adım init() işlevini çağırmaktır. Bu işlev, "doğru" veya "yanlış" olarak yorumlanacak bir değer döndürür. Karşılaştırma sonucuna göre "tamam" yazısı gönderilecek veya hiçbir şey gönderilmeyecektir.

    if...else ifadesi

    Genişletilmiş if ifadesi, if….else ifadesidir. Koşul doğru olduğunda (doğru) bir kod parçasının, koşul doğru olmadığında (yanlış) ikinci kod parçasının yürütülmesini sağlar. if….else ifadesinin sözdizimi aşağıdaki gibidir:

    If (koşul) ( // komut A ) else ( // komut B )

    "A" komutları yalnızca koşul sağlandığında, "B" komutu koşul sağlanmadığında yürütülür. "A" ve "B" komutunun aynı anda yürütülmesi mümkün değildir. Aşağıdaki örnek, if...else sözdiziminin nasıl kullanılacağını gösterir:

    If (init()) ( Serial.print("ok"); ) else ( Serial.print("error"); )

    Bu şekilde, işlevin doğru yürütülmesini kontrol edebilir ve kullanıcıyı bu konuda bilgilendirebilirsiniz.

    Olağan uygulama, koşulu reddetmektir. Bunun nedeni, doğru çalışan bir işlevin 0 döndürmesi, herhangi bir nedenle başarısız olan bir işlevin sıfırdan farklı bir değer döndürmesidir.

    Bu “hayatın karmaşıklığının” açıklaması basittir. İşlev doğru yürütülürse, ihtiyacımız olan tek bilgi budur. Bir hata durumunda, bazen neyin yanlış gittiğini, işlevin neden doğru yürütülmediğini anlamaya değer. Ve burada sıfırdan farklı sayılar kurtarmaya geliyor yani dijital kodlar yardımıyla hatanın türünü belirleyebiliyoruz. Örneğin, 1 - bazı değerleri okumada sorun, 2 - bellekte veya diskte yer yok, vb.

    Son değiştirilen örnek, doğru yürütüldüğünde sıfır döndüren bir işlevin nasıl çağrılacağını gösterir:

    If (!init()) ( Serial.print("ok"); ) else ( Serial.print("error"); )

    büyük/küçük harf değiştirme bildirimi

    if ifadesi, yalnızca bir koşulu kontrol etmenizi sağlar. Bazen döndürülen veya okunan değere bağlı olarak işlemlerden birini gerçekleştirmek gerekir. Çoktan seçmeli geçiş ifadesi bunun için idealdir. Switch komutunun sözdizimi aşağıda gösterilmiştir:

    Switch (var) ( durum 1: // komut var=1 için kesme; durum 2: // var=2 için komut kesme; varsayılan: // komut varsayılan olarak (var 1 ve 2'den farklıysa) )

    Var değişkeninin değerine bağlı olarak, komutlar belirli bloklarda yürütülür. Durum etiketi, belirtilen değer için bloğun başlangıcı anlamına gelir. Örneğin, durum 1: verilen bloğun var değişkeninin bire eşit değeri için yürütüleceği anlamına gelir.

    Her blok break komutu ile sonlandırılmalıdır. Switch ifadesinin daha fazla yürütülmesini kesintiye uğratır. Break komutu atlanırsa, komutlar break komutuna kadar sonraki bloklarda yürütülecektir. Varsayılan etiket, if ifadesindeki else gibi isteğe bağlıdır. Varsayılan bloktaki talimatlar yalnızca var değişkeninin değeri herhangi bir modelle eşleşmediğinde yürütülür.

    Çoğu zaman, birkaç değerden biri için aynı talimatların yürütülmesi gerekir. Bu şu şekilde elde edilebilir:

    Anahtar (x) ( durum 1: // x=1 için ifade; durum 2: durum 3: durum 5: // x=2 veya 3 veya 4 için ifade; durum 4: // x=4 için ifade ; durum 6: // x=6 kesme komutu; varsayılan: // varsayılan komut (x, 1,2,3,4,5,6'dan farklıysa) )

    x değişkeninin değerine bağlı olarak, karşılık gelen komut bloğu yürütülür. Durum 2: durum 3: durum 5:'in tekrarı, derleyiciye x değişkeninin 2 veya 3 veya 5 değerine sahip olması durumunda aynı kod parçasının yürütüleceğini bildirir.

    açıklama için

    For ifadesi, aynı kodu tekrar tekrar çalıştırmak için kullanılır. Çoğu zaman, yalnızca bazı değişkenlerin değerini değiştirerek aynı talimatları uygulamak gerekir. For döngüsü bunun için mükemmeldir. Komut sözdizimi aşağıdaki gibidir:

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

    for ifadesinde verilen ilk parametre, değişkenin başlangıç ​​değeridir. Başka bir öğe, döngünün yürütülmesine devam etme koşulunu kontrol etmektir. Koşul sağlandığı sürece döngü yürütülür. Son öğe, değişkenin değerindeki değişikliktir. Çoğu zaman, değerini (gerektiği gibi) artırır veya azaltırız. Bu örnekte, döngüde yer alan komutlar i=0…9'da yürütülecektir.

    Genellikle bir döngüde kullanılan bir değişken aynı yerde bildirilir:

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

    Sonraki döngü adımlarını saymak için kullanılan bir değişken, içinde uygun parametrelerle bir işlevi çağırmak için kullanılabilir.

    For(int i=10;i>0;i—) ( Serial.print(i); // 10,9,8,7,6,5,4,3,2,1 sayıları gönderilecektir)

    while ifadesi

    For döngüsü saymayı yapmak istediğimiz yer için mükemmeldir. Öngörülemeyen bazı olayların sonucu olarak belirli eylemleri gerçekleştirmenin gerekli olduğu bir durumda (örneğin, bir düğmeye basılmasını bekliyoruz), o zaman ifade bloğunu yürüten while ifadesini kullanabiliriz. koşul sağlandığı sürece. While ifadesinin sözdizimi aşağıdaki gibidir:

    While(koşul) ( // yürütülecek deyim bloğu )

    Durum kontrolünün döngünün başında gerçekleşmesi önemlidir. While döngüsü içindeki ifadeler hiçbir zaman yürütülmeyebilir. Sonsuz bir döngü oluşturmak da mümkündür. İki örnek görelim:

    intx=2; while(x>5) ( Serial.print(x); ) —————————————- int y=5; while(y>0) ( Serial.print(y); )

    While içindeki ilk ifade bloğu hiçbir zaman çalıştırılmayacaktır. x değişkeninin değeri ikidir ve 5'ten büyük olmayacaktır. İkinci örnekte sonsuz bir döngü ile uğraşıyoruz. "y" değişkeninin değeri 5'tir, yani sıfırdan büyüktür. Döngünün içinde 'y' değişkeninde bir değişiklik olmadığı için döngü hiç bitmeyecek.

    Döngünün sona ermesine neden olan parametreyi değiştirmeyi unuttuğumuz zaman bu yaygın bir hatadır. Aşağıda, bir while döngüsü kullanmanın iki geçerli örneği verilmiştir:

    intx=0; iken(x<10) { //блок инструкций x++; } —————————————- while(true) { if(условие) break; // блок инструкций }

    İlk örnekte koşulda kontrol edilen değişkenin değerini değiştirmeyi hallettik. Sonuç olarak, döngü sonunda sona erecektir. İkinci örnekte, kasıtlı olarak sonsuz bir döngü oluşturulmuştur. Bu döngü, Arduino IDE'deki loop() işlevine eşdeğerdir. Ek olarak, döngü içinde bir durum kontrolü başlatılır, ardından döngü break komutuyla sona erer.

    do...while deyimi

    While döngüsünün bir varyasyonu do...while döngüsüdür. Sözdizimine ek olarak, koşulun kontrol edildiği yerde farklılık gösterir. do...while durumunda, ifade bloğu yürütüldükten sonra koşul kontrol edilir. Bu, döngü gövdesindeki ifade bloğunun en az bir kez yürütüleceği anlamına gelir. do...while komutunun sözdizimi aşağıdadır:

    Do ( // ifade bloğu ) while(koşul)

    while deyimi hakkında yazılan her şey do...while için de geçerlidir. Aşağıda bir do...while döngüsü kullanımına bir örnek verilmiştir:

    intx=10; do ( // ifade bloğu x—; ) while(x>0); —————————————- do ( // komut bloğu if(koşul) break; ) while(true);

    ifadeyi kırmak

    Break ifadesi, döngüden çıkmanıza (do...while, for, while) ve switch seçeneğinden çıkmanıza olanak tanır. Aşağıdaki örnekte, break komutunun yürütülmesini düşünün:

    için(i=0;i<10;i++) { if(i==5) break; Serial.print(i); }

    Döngü, 0'dan 9'a kadar olan sayılar için yürütülmelidir, ancak 5 sayısı için, break deyimini tetikleyen koşul karşılanır. Bu döngüden çıkacaktır. Sonuç olarak, seri bağlantı noktasına (Serial.print) yalnızca 0,1,2,3,4 sayıları gönderilecektir.

    ifadeye devam et

    Devam operatörü, döngü komutlarının (do...while, for, while) mevcut değer için yürütmeyi durdurmasına ve döngünün bir sonraki adımına geçmesine neden olur. Aşağıdaki örnek, devam deyiminin nasıl çalıştığını gösterir:

    için(i=0;i<10;i++) { if(i==5) continue; Serial.print(i); }

    Gördüğünüz gibi, döngü 0 ile 9 arasında bir değer için yürütülecektir. 5 değeri için, devam komutu yürütülecek ve bunun sonucunda bu komuttan sonraki komutlar yürütülmeyecektir. Sonuç olarak seri porta (Serial.print) 0,1,2,3,4,6,7,8,9 numaraları gönderilecektir.

    iade beyanı

    Return ifadesi, çağrılan işlevin yürütülmesini sonlandırır ve belirli bir türde bir değer döndürür. Bir komut parametresi olarak, belirli bir türde bir sayı, karakter veya değişken belirtebilirsiniz. Dönen değerin, bildirilen işlevin türüyle eşleşmesi önemlidir. Aşağıdaki örnek, dönüş ifadesinin nasıl kullanılacağını gösterir:

    Int checkSensor()( if (analogRead(0) > 400) ( // analog girişi okuyarak 1 döndürür; // 400'den büyük değerler için 1 döndürülür, aksi takdirde( 0 döndürür; // diğerleri için 0 döndürülür) )

    Gördüğünüz gibi, tek bir işlevde birden çok dönüş ifadesi kullanabilirsiniz, ancak bunlardan yalnızca biri her zaman çalışır. Dönüş ifadesinin parametresiz olarak kullanılmasına izin verilir. Bu, herhangi bir değer döndürmeyen bir işlevi zamanından önce sonlandırmanıza olanak tanır.

    Geçersiz işlev_adı() ( ifade1; if(x==0) dönüş; ifade2; ifade3; )

    Yukarıdaki örnekte, fonksiyon her çağrıldığında deyim1 çalışacaktır. Talimat2 ve talimat3'ün yürütülmesi, if komutunun sonucuna bağlıdır. Koşul karşılanırsa (doğru), dönüş komutu yürütülecek ve işlevden çıkılacaktır.

    Koşulun sağlanmaması durumunda, dönüş komutu da yürütülmez, ancak talimat2 ve talimat3 komutları yürütülür ve bundan sonra fonksiyon işini bitirir.

    ifadeye git

    İdeolojik nedenlerle bu açıklama atlanmalıdır... Goto deyimi normal programlamada kullanılmaması gereken bir komuttur. Kod karmaşıklığına neden olur ve kötü bir programlama alışkanlığıdır. Bu komutu programlarınızda kullanmamanızı şiddetle tavsiye ederiz. arduino.cc sitesindeki resmi dökümantasyonda goto olduğu için kısaca anlatacağız. Goto komutunun sözdizimi şöyledir:

    …. etikete git; // 'metka' etiketli satıra atla ….. …. …. metka: // programın çalışmaya devam edeceği etiket...

    Komut, belirlenen etikete, yani programdaki konuma atlamayı sağlar.

    Mikrodenetleyicileri öğrenmek karmaşık ve anlaşılmaz bir şey gibi mi görünüyor? Arudino'nun gelişinden önce, bu gerçekten kolay değildi ve belirli bir dizi programcı ve diğer ekipman gerektiriyordu.

    Bu bir tür elektronik tasarımcı. Projenin ilk hedefi, insanların elektronik parçalara minimum zaman ayırarak elektronik cihazların nasıl programlanacağını kolayca öğrenmelerini sağlamaktır.

    En karmaşık devrelerin montajı ve panoların bağlantısı, bir havya olmadan, ancak ayrılabilir erkek ve dişi bağlantıları olan jumper'ların yardımıyla gerçekleştirilebilir. Bu şekilde, arduinoschikov sözlüğünde basitçe "Kalkanlar" (kalkan) olarak adlandırılan hem ekler hem de genişletme kartları bağlanabilir.

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

    Temel ve en popüler yönetim kurulu olarak kabul edilir. Bu ücret yaklaşık bir kredi kartı büyüklüğündedir. Oldukça büyük. Satışta olan çoğu kalkan, onunla mükemmel uyum sağlar. Kart üzerinde harici cihazların bağlanması için soketler bulunmaktadır.

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

    Arduino kartının görüntüsü ve her pinin işlevinin kodunun çözülmesi, Arduino UNO pin çıkışı

    Bu karttaki mikrodenetleyici, DIP28 paketindeki uzun bir yongadır, yani 28 pime sahiptir.

    Bir sonraki en popüler tahta, öncekinden neredeyse iki kat daha ucuza mal oluyor - 2-3 dolar. Bu bir ücret. Mevcut kartlar aynı Atmega328 üzerine inşa edilmiştir, işlevsel olarak UNO'ya benzerler, farklar boyut ve USB eşleştirme çözümüdür, daha sonra buna değineceğiz. Diğer bir fark ise, cihazları karta bağlamak için iğne şeklindeki fişlerin sağlanmasıdır.

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

    Üçüncü en popüler anakart ise bilgisayara bağlanmak için USB portu yok, bağlantının nasıl yapıldığını biraz sonra anlatacağım.

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

    Üst kısımda USB-UART bağlantı şeması, “GRN” pini mikrodenetleyicinin reset devresine kablolanmıştır, farklı bir şekilde çağrılabilir, buna neden ihtiyaç duyulduğunu daha sonra öğreneceksiniz.

    UNO, breadboarding için kullanışlıysa, Nano ve Pro Mini projenizin son sürümleri için iyidir çünkü çok az yer kaplarlar.

    Arduino bilgisayara nasıl bağlanır?

    Arduino Uno ve Nano bilgisayara USB üzerinden bağlıdır. Aynı zamanda USB portu için donanım desteği yoktur, burada genellikle USB-to-Serial veya USB-UART (rs-232) olarak adlandırılan bir seviye dönüştürme devresi çözümü kullanılır. Aynı zamanda, mikrodenetleyiciye, bu veri yollarından geçiş yapmanızı sağlayan özel bir Arduino önyükleyici flaşlanır.

    Arduino Uno, bu bağlantıyı USB destekli bir mikrodenetleyicide uygular - ATmega16U2 (AT16U2). Ana mikrodenetleyiciyi flaşlamak için kart üzerinde ek bir mikrodenetleyiciye ihtiyaç duyulduğu ortaya çıktı.

    Arduino Nano'da bu, FT232R yongası veya onun CH340 muadili tarafından uygulanır. Bu bir mikrodenetleyici değil - bir seviye dönüştürücü, bu gerçek kendi ellerinizle sıfırdan bir Arduino Nano oluşturmayı kolaylaştırıyor.

    Arduino kartını bağladığınızda genellikle sürücüler otomatik olarak yüklenir. Ancak Arduino Nano'nun Çince bir kopyasını satın aldığımda cihaz tanındı ama çalışmadı, dönüştürücünün üzerine çıkış tarihini içeren yuvarlak bir etiket yapıştırıldı, bunun bilerek mi yapıldığını bilmiyorum ama onu soyduğumda CH340 işaretini gördüm.

    Ondan önce bununla karşılaşmadım ve tüm USB-UART dönüştürücülerin FT232'de toplandığını düşündüm, sürücüleri indirmem gerekiyordu, "Arduino ch340 sürücüleri" isteği üzerine bunları bulmak çok kolay. Basit bir kurulumdan sonra - her şey çalıştı!

    Mikrodenetleyici aynı USB bağlantı noktasından da güç alabilir, yani. cep telefonu adaptörüne bağlarsanız sisteminiz çalışacaktır.

    Anakartımda USB yoksa ne yapmalıyım?

    Arduino Pro Mini kartı daha küçüktür. Bu, üretici yazılımı için USB konektörünü ve aynı USB-UART dönüştürücüyü çıkararak sağlandı. Bu nedenle, ayrıca satın alınması gerekir. CH340 (en ucuz), CPL2102 ve FT232R'deki 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'nin 3.3 ve 5 V versiyonları vardır, genellikle dönüştürücülerde besleme voltajını değiştirmek için bir jumper bulunur.

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

    "Anne-Anne" (kadın-kadın) özel 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şlidir ve bir tarafta soket, diğer tarafta fiş vardır.

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

    Eskizlerle çalışmak için (arduino dilinde ürün yazılımının adı), Arduino IDE'nin geliştirilmesi için özel bir entegre ortam vardır, bunu resmi web sitesinden veya herhangi bir tematik kaynaktan ücretsiz olarak indirebilirsiniz, genellikle kurulumda sorun yok.

    Program arayüzü böyle görünüyor. Arduino için özel olarak geliştirilmiş basitleştirilmiş bir C AVR dilinde programlar yazabilirsiniz, aslında bu, saf C AVR'de olduğu gibi, Kablolama adı verilen bir dizi kitaplıktır. Kullanımı kodu kolaylaştırır ve çalışmasını hızlandırır.

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

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

    Arduino IDE'de programlamanın temelleri

    Kodun başında, değişkenleri bildirmeniz ve varsa ek kitaplıkları bağlamanız gerekir, bu aşağıdaki gibi yapılır:

    #include biblioteka.h; // "Biblioteka.h" isimli kütüphaneyi ekleyin

    #define değişken 1234; // 1234 değeri ile bir değişken bildirin

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

    int led = 13; // bir "led" değişkeni yarattı ve ona "13" değerini atadı

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

    Bir dijital sinyal digitalWrite(pin, value) komutu kullanılarak yazılır, örneğin:

    digitalWrite(led, yüksek); //pin 13 (yukarıda belirtmiştik) günlüğündeki birimi kaydedin. Birimler.

    Anlayabileceğiniz gibi, bağlantı noktalarına yapılan itiraz, panodaki numaralandırmaya, karşılık gelen numaraya göre gider. İşte önceki koda benzer bir örnek:

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

    Delay() komutu ile sıklıkla talep edilen bir zaman geciktirme fonksiyonu çağrılır, değeri milisaniye cinsinden verilir, mikrosaniye ile ulaşılır.

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

    Giriş ve çıkış için bağlantı noktası ayarları, aşağıdaki komutla, void setup() işlevinde ayarlanır:

    pinMode(NOMERPORTA, ÇIKIŞ/GİRİŞ); // bağımsız değişkenler - değişken adı veya bağlantı noktası numarası, aralarından seçim yapabileceğiniz giriş veya çıkış

    İlk Blink programını anlama

    Mikrodenetleyiciler için bir tür "Merhaba dünya" olarak, bir LED'i yanıp sönmek için bir program var, koduna bakalım:

    Başlangıçta pinMode komutu ile mikrodenetleyiciye LED'li portu çıkışa atamasını söyledik. Kodun "LED_BUILTIN" değişkenini bildirmediğini zaten fark ettiniz, gerçek şu ki Uno, Nano ve diğer fabrika kartlarında yerleşik bir LED pin 13'e bağlı ve kart üzerine lehimlenmiştir. Sizin tarafınızdan projelerinizde gösterge olarak veya flaşör programlarınızın basit bir şekilde test edilmesi için kullanılabilir.

    Ardından, LED'in lehimlendiği pimi bir (5 V) olarak ayarlıyoruz, sonraki satır MK'yi 1 saniye bekletiyor ve ardından LED_BUILTIN pimini sıfıra ayarlıyor, bir saniye bekliyor ve program bir daire içinde tekrar ediyor, yani LED_BUILTIN 1 olduğunda - LED (ve bağlantı noktasına bağlı diğer yükler) etkinleştirilir, 0 olarak ayarlandığında devre dışı bırakılır.

    Analog porttan değeri okuyun ve okunan verileri kullanın

    AVR Atmega328 mikrodenetleyici, yerleşik bir 10 bit analogdan dijitale dönüştürücüye sahiptir. 10 bit ADC, tüm sinyal genliğinin (5 V) 1/1024'lük adımlarıyla 0 ila 5 volt arasındaki voltaj değerini okumanızı sağlar.

    Daha açık hale getirmek için durumu göz önünde bulundurun, analog girişteki voltaj değeri 2,5 V diyelim, yani voltaj 0 - "0" ise mikrodenetleyici "512" piminden değeri okuyacak ve 5 V ise - (1023). 1023 - çünkü sayım 0'dan başlar, yani 0, 1, 2, 3, vb. toplamda 1023 - 1024 değere kadar.

    Örnek olarak standart "analogInput" taslağını kullanarak kodda nasıl göründüğünü burada bulabilirsiniz.

    int sensörPin = A0;

    int ledPin = 13;

    int sensörDeğeri = 0;

    pinMode(ledPin, ÇIKIŞ);

    sensorValue = analogRead(sensorPin);

    digitalWrite(ledPin, YÜKSEK);

    gecikme(sensörDeğeri);

    digitalWrite(ledPin, DÜŞÜK);

    gecikme(sensörDeğeri);

    Değişkenleri bildiriyoruz:

      Ledpin - çıkışa bağımsız olarak dahili LED'li bir pim atayın ve ayrı bir ad verin;

      sensorPin - analog giriş, kart üzerindeki işarete göre ayarlanır: A0, A1, A2, vb.;

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

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

    ledPin'e bir birim yazıyoruz, LED yanıyor ve sensorValue'nin değerine eşit bir süre yani yani. 0 ila 1023 milisaniye. LED'i kapatıyoruz ve bu süre boyunca tekrar bekliyoruz, ardından kod tekrar ediyor.

    Böylece potansiyometrenin konumuna göre LED'in yanıp sönme frekansını ayarlıyoruz.

    Arudino için harita işlevi

    Aktüatörler için tüm işlevler (hiçbirini bilmiyorum) argüman olarak "1023"ü desteklemez, örneğin, servo dönme açısıyla sınırlıdır, yani servo motorun yarım dönüşü (180 derece) (yarım dönüşü) için , işlevin maksimum argümanı "180"

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

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

    (map(analogRead(pot), 0, 1023, 0, 180));

    Potansiyometreden (analogRead (pot)) değeri 0'dan 1023'e kadar okuyoruz ve çıkışta 0'dan 180'e kadar sayılar alıyoruz

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

    Uygulamada bunu aynı servonun koduna uyguluyoruz, Arduino IDE'deki koda bir bakın, önceki bölümleri dikkatlice okursanız açıklama gerektirmez.

    Ve bir bağlantı şeması.

    Arduino, mikrodenetleyicilerle nasıl çalışılacağını öğrenmek için çok kullanışlı bir araçtır. Ve saf C AVR kullanırsanız veya bazen "Saf C" olarak adlandırılırsa - kodun ağırlığını önemli ölçüde azaltacaksınız ve mikrodenetleyicinin belleğine daha fazla sığacak, sonuç olarak mükemmel bir fabrika yapımı elde edeceksiniz. USB üzerinden yanıp sönme özelliğine sahip hata ayıklama kartı.

    arduino'yu severim. Birçok deneyimli mikrodenetleyici programcısının onu çok basitleştirdiği için sebepsiz yere azarlaması üzücü. Prensip olarak, yalnızca dil basitleştirilmiştir, ancak kimse sizi onu kullanmaya zorlamaz, ayrıca mikrodenetleyiciyi ICSP konektörü aracılığıyla flash edebilir ve gereksiz önyükleyici olmadan istediğiniz kodu oraya yükleyebilirsiniz.

    Elektronik ile oynamak isteyenler için ileri düzey bir tasarımcı olarak mükemmel olacak ve deneyimli programcılar için montaj gerektirmeyen bir kart olarak da kullanışlı olacak!

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

    Ardublock, Arduino için yeni başlayanlar için tasarlanmış bir grafik 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 kontrolör ile etkileşime girmesini sağlayan çok önemli bir Arduino mekanizmasıdır. Taslağa bir donanım kesme işleyicisi kurarak, bir düğmeyi açıp kapatmaya, klavyeye basmaya, ...

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

    Arduino kartı olmadan arduino projeleri yapmak mümkün müdür? Oldukça çıkıyor. Kendi adına sahip çok sayıda çevrimiçi hizmet ve program sayesinde: Arduino emülatörü veya simülatörü. Bu tür programların en popüler temsilcileri ...

    Seri başlatma son derece önemli bir Arduino talimatıdır, kontrolörün harici cihazlarla bağlantı kurmasını sağlar. Çoğu zaman, böyle bir "harici cihaz", Arduino'yu bağladığımız bir bilgisayardır. Bu nedenle, Seri başlatma daha yoğundur...

    Arduino'daki global bir değişken, kapsamı tüm programa uzanan bir değişkendir, tüm modüllerde ve işlevlerde görünür. Bu yazıda, global değişkenleri kullanmanın birkaç örneğine bakacağız,...

    Arduino dizileri, programcılar tarafından aynı tür veri kümeleriyle çalışmak için aktif olarak kullanılan bir dil öğesidir. Diziler neredeyse tüm programlama dillerinde bulunur ve sözdizimi çok benzer olan Arduino bir istisna değildir ...