Arduino Seri İletişim Çağrı ve Yanıt (Seri Konuşma)
Seri İletişim Çağrı ve Yanıt. Bu örnek, Arduino ya da Genuino kartından bir arama-cevap (el sıkışma) yöntemi kullanılarak bilgisayara çok baytlı iletişim göstermektedir.
Bu çizim başlangıçta bir ASCII A (65 değeri bayt) gönderir ve bilgisayardan seri yanıt alıncaya kadar tekrar eder. Daha sonra üç sensör değerini tek bayt olarak gönderir ve bilgisayardan başka bir yanıt bekler.
Gönderilen verileri görüntülemek için Arduino Yazılımı (IDE) seri monitörünü kullanabilir veya İşleme (aşağıdaki kod), Flash, PD, Max / MSP (aşağıdaki örneğe bakınız), vb. Tarafından okunabilir.
Donanım
- Arduino veya Genuino
- 2 adet analog sensör (potansiyometre, fotosel, FSR vb.)
- buton
- 3 adet 10K ohm dirençler
- bağlantı telleri
- breadboard
“Arduino Uno, ATmega328P tabanlı bir mikro denetleyici karttır. 14 adet dijital giriş / çıkış pini (6’sı PWM çıkışı olarak kullanılabilir), 6 analog giriş, 16 MHz kristali, bir USB bağlantısı, bir güç girişi, bir ICSP başlığı ve bir sıfırlama düğmesi vardır. Mikrodenetleyiciyi desteklemek için gereken her şeyi içerir; Başlamak için bir USB kablosuyla bir bilgisayara bağlayın ya da AC-DC adaptörü ya da pille çalıştırın. UNO’yu, yanlış bir şey yapmadan çok fazla endişe etmeden tamir edebilir, en kötü durum senaryosunu değiştirebilirsiniz. Birkaç dolara çip alır ve tekrar kullanabilirsiniz.”
Gerekli Yazılım
- Processing veya
- Max / MSP sürüm 5
Devre
Analog sensörleri, gerilim bölücüler olarak kullanılan 10K ohm dirençlerle 0 ve 1 analog giriş pinlerine bağlayın. Bir buton bağlayın veya şasiye referans olarak 10K ohm dirençli dijital I / O pin 2’ye geçin.
Kod
/* Seri Çağrı ve Yanıt Dil: Kablolama / Arduino Bu program, başlangıçta ASCII A (65 değeri bayt) gönderir ve bunu tekrarlar. Bazı veriler girinceye kadar. Sonra seri portunda bir bayt bekler ve bir bayt aldığında her üç sensör değerini gönderir. Devre: - 0 ve 1 analog girişlerine bağlı potansiyometreler - dijital I / O 2'ye bağlı buton oluşturuldu 26 Eyl 2005 Tom Igoe tarafından 24 Nis 2012 Tom Igoe ve Scott Fitzgerald tarafından İyileştirmeler için Greg Shakar ve Scott Fitzgerald'a teşekkürler Bu örnek kod kamu malıdır. http://www.arduino.cc/en/Tutorial/SerialCallResponse */ int firstSensor = 0; // ilk analog sensör int secondSensor = 0; // ikinci analog sensör int thirdSensor = 0; // dijital sensör int inByte = 0; // gelen seri bayt void setup() { // 9600 bps'de seri bağlantı noktasını başlat: Serial.begin(9600); while (!Serial) { ; // bağlanmak için seri portu bekleyin. Sadece yerel USB bağlantı noktası için gerekli } pinMode(2, INPUT); /// dijital sensör 2 dijital pim üzerinde establishContact(); // alıcı yanıt verene kadar iletişim kurmak için bir bayt gönder } void loop() { // geçerli bir bayt alırsak: if (Serial.available() > 0) { // gelen baytı al: inByte = Serial.read(); // ilk analog girişi oku, 0-255 aralığını yapmak için 4'e bölün: firstSensor = analogRead(A0) / 4; // ADC'nin kurtarılmasına izin vermek için 10 ms gecikme: delay(10); // ikinci analog girişi oku, 0-255 aralığını yapmak için 4'e bölün: secondSensor = analogRead(1) / 4; // okuma anahtarı, 0 veya 255L ile eşleştirin thirdSensor = map(digitalRead(2), 0, 1, 0, 255); // sensör değerleri gönder: Serial.write(firstSensor); Serial.write(secondSensor); Serial.write(thirdSensor); } } void establishContact() { while (Serial.available() <= 0) { Serial.print('A'); // Büyük A gönder delay(300); } } /* Bu örnekle çalışacak Processing taslağı: // Bu örnek kod genel etki alanında. import processing.serial.*; int bgcolor; // Arkapan rengi int fgcolor; // Rengi doldur Serial myPort; // seri port int[] serialInArray = new int[3]; // Ne aldığımızı nereye koyacağız int serialCount = 0; // Kaç bayt aldığımızın bir sayısı int xpos, ypos; // Topun başlangıç pozisyonu boolean firstContact = false; // Mikrodenetleyiciden haber alsak da void setup() { size(256, 256); // Sahne boyutu noStroke(); // Çizilen bir sonraki sınır yok // Topun başlangıç pozisyonunu ayarlayın (sahnenin ortası) xpos = width / 2; ypos = height / 2; // Hata ayıklama amaçları için seri bağlantı noktalarının bir listesini yazdırın // İşlem 2.1 veya daha yenisini kullanıyorsanız, Serial.printArray () öğesini kullanın. println(Serial.list()); // Mac'indeki seri listesindeki ilk portun her zaman FTDI olduğumu biliyorum // bağdaştırıcı, bu yüzden Serial.list () [0] 'ı açtım. // Windows makinelerinde, bu genellikle COM1'i açar. // Kullandığınız port ne olursa olsun açın. String portName = Serial.list()[0]; myPort = new Serial(this, portName, 9600); } void draw() { background(bgcolor); fill(fgcolor); // Şekli çiz ellipse(xpos, ypos, 20, 20); } void serialEvent(Serial myPort) { // seri bağlantı noktasından bir bayt okuyun: int inByte = myPort.read(); // bu ilk bayt aldıysa ve bu bir A ise, seriyi temizleyin // arabellek ve mikrodenetleyiciden ilk kez bağlantı kurduğunuzu not edin. // Aksi takdirde, gelen baytı diziye ekleyin: if (firstContact == false) { if (inByte == 'A') { myPort.clear(); // seri bağlantı noktası arabelleğini temizle firstContact = true; // mikrodenetleyiciden ilk irtibatınız oldu myPort.write('A'); // daha fazlasını iste } } else { // Dizisel seriden son baytı diziye ekle: serialInArray[serialCount] = inByte; serialCount++; // 3 baytımız varsa: if (serialCount > 2 ) { xpos = serialInArray[0]; ypos = serialInArray[1]; fgcolor = serialInArray[2]; // değerleri yazdır (yalnızca hata ayıklama amacıyla): println(xpos + "\t" + ypos + "\t" + fgcolor); // Yeni sensör okumaları istemek için A sermayesi gönderin: myPort.write('A'); // serialCount'u sıfırla: serialCount = 0; } } } */ /* Max / MSP sürüm 5 düzeltme eki şu örnekle çalıştırılacak: ----------begin_max5_patcher---------- 3908.3oc6ckziiaiE9b0+J3XjCIXpp.WzZNMURv.jCInQ5fYNjNngrDssRKK 4nkp6JA4+973hrkrsjncKu0SRiXasQ83G+dKj7QV+4qtaxzrOxKlf9Zzuft6 t+7U2cm7ThSbm936lrL3igIAExaaRJ+CYS+sI2qtTI+ikxSuBMKNojm+N3D4 Aua5KkPwpuoUAkgKhSm+tbdXo5cQXVOhuGwrohuHD4WT7iXzupen3HY4BuqG rH0kzrrzxzfkb4kdJONHo9JoUKiSS3kRgjt4jYUk0mkznPJh+CYgHewpSqty xWVwUh3jIqkEYEfmqQEMr.ETbB+YddQbVZix+tIAqV03z203QDX4ukIKHm6W ep3T0ovqOUN+435m2Rcx+5U0E+FTzVBh9xOsHXIh5YuADg1x4IYgumG0r3mj shmFmtJmWvSKCJ0um0WNhOKnJo7c6GmZe8YAg7Ne381Rc2j44wQYoBgn0SJN c8qCHH1RhQqJi7NRCVsmGt.pGUESCxE31zDdCV.PRyxRZeo0MU.WOHMdYPIu LVIrT75BMd4p73zxVuHdZ.TFKJByyRRZUTpq77dtRDzZFx+PbT4BYY0DJgaO dUcSvj0XTT7bdQY6yUFLun8YZo71jl0TIt042RYNLa4RfCTWfsznKWDWfJpl tJHrbgV6t.AZInfzWP.4INpJHA8za91u+6QN1nk7hh.PpQwonxEbTAWzpilV MimilkmsDtPbo3TPiUdY0pGa9ZShS4gYUJz1pwE1iwCpxbAgJI9DGGwWNzFT ksLf3z7M0MybG6Hj1WngsD7VEXS8j5q7Wu5U0+39ir8QJJS5GMHdtRimL4m1 0e1EVX0YsE2YssINriYRoFRyWVMoRRUGQvnkmms3pnXDYHbBKMPpIOL5i1s8 3rMPwFcRCsGRyPH780.8HBnpWz.vlEQBWJ+0CSunehJSmJxiIZRtNGhhDYrU jt3ZQyA2fHJhZDifXIQHUHH8oGYgOREI5nqHIzhFWUndPyBdB3VzHJGwUhkV rgvRl2UCVNMHcd234lf1DN16HFEIdHt99A5hrp7v5WWMSBQZgMP.Tkwoqig8 W1.Sn1f3h3nn1wLpBypPDzlJ7XinEGkLiMPloWOhrgR7dpZWJQV1faDy35Qj MThMFkWFGsJChQPqrQp8iorV6Q28HBVF4nMVDJj7f1xyYACFScisg.ruLHOW uMUS4Am4pI4PTnHi.6bi02HNzSYnDBe4cgAgKzRk1jc8PJLoH3Ydz6.Q.7K8 tfxx73oUkJq1MGuCy5TpAi.POWZ3AenidLOOIaZPhdjZVW3sdk6LXEGzHb7p Mfr7SEy3SXHyBSxJ3J2ncNNYVJsXG6Me10nj4cfCRFdTFjLo7q3SiCpjjEDM .nvra.GN39.E2CDTHWXPo8.xzfqrHCHKnf5QUYUVdoZPUjCSC7LU8.XtTUXl X8vr51GjwFGLC2AlMdLkU4RiaRrnmJuiudnDk0ZW+9p6TuKBe433JUCzp6fU iOF0SUk2UQYUPNTEkiZubvKa1tsmgL5SCTXGHnnG0CceLpkpR9Rs28IUESWl EwWNKfHlg.zj6Ee7S+nE8A+m9F7Cu40u9gMm+aRp3kYYkKd3GDOz5y+c7b96 K9gfvuIK68uNO6g2vUUL80WxihCVFD9vlB30e2SOrmxUb527RZ3nZNrljGrR 70vs1J9suWuZ3zaHVdG3RIJLgGj2Gfn6TcGcstEfvtH.hpFLlnBndjOLGQAI z98BXc6yQxghmOn6gZqj0ShPOXhynLOjzCESt+XwE8TxrCvrdXo16rqnLgvb HaFmbh29QD+K0DyNdjDwvzQL.NXpoMvoOBxkger0HwMRQbpbCh91fjjG9Idw prTH9SzaSea5a.GQEPnnh43WNefMlsOgx18n.vgUNO.tKl7tDyI3iHzafJHZ VVNedVEbGgYIY42i93prB0i7B7KT1LnnCiyAiinpBnsPV7OG.tYKfBsrJOkG UG5aq26iJw6GyJ4eM5mEgEKaNQPMEBUp.t8.krplOVTlZdJAW27bjvGK7p2p HQPgLOSJDYv4E9gQBYBjMUselRxDy+4WplIzm9JQAWOEmfb.E364B43CAwp5 uRRDEv8hWXprjADMUOYpOg9.bVQpEfhKgGCnAnk.rghBJCdTVICA3sDvAhE5 oU4hf67ea5zWPuILqrD8uiK+i477fjHIt9y.V88yy3uMsZUj7wnxGKNAdPx5 fAZMErDZOcJU4M01WFQokix.pKa+JE1WacmnKFeYd7b.0PeIzB8Kk+5WIZpB Ejt34KJeHgOCh4HK8Y3QiAkAfs8TRhhOkG7AAGQf0qxyfmQxa+PLb8Ex.2PS 4BdO5GB9Hvg+cfJCMofAIMu9Qz+UPCjckqVJlEmyA8Bf.rC6.3hAEuG8TdTU bZljQ0nr1ayIqmTwQYfyRGafZhur5vfuyMSqYNWmtAPwWHalDSuUgT0Bosh. JpAR89Y6Ez5QEfPTQO4J0DHLInIliz8BZV2JfV3Bd36qsQwAVVXbr1BGXp6s Sd5sSDruo74wofx.HxUgxQwTnMLqTXvRmiGh2PUZr5pBynKChjl6feNUjSRn hEUfRPT1GfG9Ik4TQBm.hEZZ.bc38HjAMKGzDRijEm1ifx1dbgzQyKh6FZc3 wOCkRJH+KUh0daWs6wzltWx1puXxlWW6NZWY2JiTBzzILRIANku02NourySM VI1VJTvQZff32AJr+dS9e34QAoA6EGXlGFH9yk7yyQAlVd3SR94g+TxOu1sU Flgd6ICI96LzazyPu1cgqsZ8r74SgF.65+efbMf4pGHT7lgHh30Sha3N5Ia. oqjMf7nsuMwycf7iYDybiAAVr3eC.oTMjpzEr8GDRc9bFRGHYXDrzg.Tlx+q NW8TY1IkzCfZ2IftkQstbB08HUezoDS+oFyI.cWIhWBaDiUo7qIrDO7f.L6n AXqCmyNT9act.z+Iv.GR0uES0ZXfjdz.IczAxQOUR+zvRsUTigRxmyPYeNlj yXv8Peef2ZFzuLzWPPeAE8ELzWXYlhe8WzAcUg+b1UkIoCLzIH60zwASGXau a1Dq2nUY.sox4vng+m0nACePngC9lEMLZMBPodOxf+yx5d4uMCTHm3kJvIIG jcLMedEQldkjpoBkQyjY1Hk.hmSY95Iwos8NDb9VSlIWOIntqgxryUjL6bCJ y1lli5tWWxrQ7YmqGYlc6shK1iY2dr0wtNjYxgHyzaq0OznY235awCr8zSz6 EGd1QNUKf.74dADTBbTbeotjpW95IolY0WpKYONY8M83Rx2MChx3fL+iG5Mm tXpdmvXj8uTvaAL1WjbbarQD4Z6kXBpnm6a69oKV2PY9WY174IbC3CaRQ9iK Q4sYGQpwdtZ5wFrc7n569.M83OOR5ydSB1ZcAWCxdbKuavz9LILxfD.wWO.W Nq+Zu4Es+AP6s5p9jDWH8ET+c85+XbW0.N1nDCTD7U4DGc6ohnU019fS7kQ0 o43luuOGjv5agHp0DT.CysOfgLR3xXlXTUKm16RivRsn3z0O6cl3YScAvtrb hwekGB7BZuqESUzBJWmCvK7t9HF8Ts6cUAPoFWso3aP8ApWyJ3wqOPo2pJDC BQ0NI0Pj8QCQ2r1L5vKaU5lDRYX7yRur1UYYZmJQ9iDHwN9dndB5n5ejflmm UsBwLHnDkKXWRuAkb3NeuzqRstiQGP.fCQFdHNzaE.8u58Nz9svFE9SGIE1X kv9Iwfl1BdNWjA7xcThsWCS847loyFD8pZq2E2F04lYULzBTDYhrFSDDJdjo fisN2NUN26e4xRu51zD5ZseJ4HC63WyIX6jRqsp0jangBnK.Qlo58PCpWevt ahzqK7fbKsdX6R64aao8LmWhBPh9jKVAPMzb5a2cV6opdWHneMmqMEmAGsPh ieigIjV+4gF1GgbMNXg+NH44YaRYyd..S1ThHzKhFwwGRaWVITqyj9FvPqMT d0pDuSqDrOGF.Uogf.juCFi9WAUkYR+rFPanDcPG8SbrtjyG03ZQ8m3AqC5H NcUUoXSwVrqXKVcZu.5ZnkwIfIVdXVZTwAuTTUiYuxwjZDK6ZgnRtYV8tJmP hEcuXgz2Goxyaiw35UkaWbpqtfzD02oUkkYqi.YQbZqIIWrIljFolsdmMKFR wCJ2+DTn.9QlkOld+d9Qy9IJdpLfy05Ik2b8GsG9h8rdm1ZFx1FrmmlA2snw qI9Mcdi2nr6q3Gc87nLawurbw1dda+tMyGJ9HaQmlkGwy6davisMgrkM65oz eulfYCzG46am8tSDK144xV4cEvVMTRXq9CIX8+ALNWb6sttKNkiZetnbz+lx cQnb1Nds2C0tvLNe14hwQtxYbxhqc17qHfamUcZZ3NYSWqjJuiDoizZ+ud2j naRK4k3346IIVdR1kKiQjM39adMamvc6n+Xp36Yf3SIGh3uKbquqs1JksTII kuJ7RrZSFb2Cn9j5a6DT8cMo0iczU+lsYaU8YNVh5k5uzJLU26ZcfuJE6XLY 0mcRp9NTCp+L+Ap+in7Xf3b9jFQBLtIY06PbrGhcrU6N00Qlaf9N0+QPo9nS P6qsI7aYNLSNOHpsAxis0ggnZLjYqyyFkdSqinVsPaqSDZaYBZ6c93uLCjGm iCroJVLzU45iNE.pIUfs3TWb.0FejHp9uANr0GcJPTroFDNOHpkIweLnI1QT dHl3P7LhOF3Ahd9rnvLwAMy5JSdNezGlsIsW9mW44r26js+alhxjlkdhN0YE YqiH5MTeWo6D4Qm.ieLS7OynmuVGSbmbFUlnWWhiQlhOeN+Yl35bq.tGo9JR cj8AVqdz7nSgVB9zNj.FTOU68o5d9KO5TUOGxVMw+jTO8T6wqD0hEiHsOJO5 TTOMoS.zlqN0SpZjz6GcH05ylVM0jwuidlkmAif374ih5M5QPfccr8Hqifff otN8pt3hUcaWu8nosBhwmD0Epw5KmoF.poxy4YHbnjqfPJqcM3Y2vun7nS.i f3eETiqcRX2LR.4QmhZrkoCSGwzZrqKHrVR8caari+55d2caPqmq5n.ywe8Q WrZL9fpwVXeaogMByE6y1SMdjk+gbavbN7fYvVtt1C2XwHJSzpk+tidUO25H UB9onw9mlFQ10fhpZBaDatcMTTEGcJpwzqg92qqiVtM6Cu0IRQ0ndEdfCAqV l0qYAUmPrctbxO4XCuPMa1asYzKDks1D52ZCne6Mednz9qW8+.vfqkDA -----------end_max5_patcher----------- */
Processing Kodu
İşleme çizimini yukarıdaki kod örneğinden kopyalayın. Analog sensörün değerini değiştirdiğinizde, ekranda böyle bir şey hareket eden bir top alırsınız. Top sadece düğmeye bastığınızda görünecektir:
Max Kodu
Maksimum yama böyle görünüyor. Yukarıdaki kod örneğinden metni kopyalayın.
Kaynak:arduino.cc