Site icon elektromanyetix

Arduino Seri İletişim Çağrı ve Yanıt (Processing)

Seri İletişim Çağrı ve Yanıt

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

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

Exit mobile version