Fizikai pixel

LED be- és kikapcsolása Processingből vagy Max/MSP-ből az Arduino-ra küldött adatokkal.


Utolsó felülvizsgálat: 2022.02.04 16:50


Ez a példa az Arduino kártyát használja adatok fogadására a számítógépről. A kártya bekapcsol egy LED-et, ha megkapja a "H" karaktert, és kikapcsolja a LED-et, ha az "L" karaktert kapja.

Az adatok elküldhetők az Arduino Software (IDE) soros monitorjáról vagy más programból, például a Processing (lásd a kódot lent), a Flash (soros hálózati proxyn keresztül), a PD vagy a Max/MSP programból.

Hardver szükséglet

  • Arduino kártya

  • LED (opcionális)

  • 220 ohmos ellenállás (opcionális)

Szoftver szükséglet

Az áramkör

Sok Arduino kártya beépített LED-del rendelkezik a 13-as kivezetéshez csatlakoztatva; ha a kártyán nincs beépített LED, csatlakoztasson egy külső LED-et a 13-as kivezetéshez. A hosszú láb vagy anód egy 220-as ellenálláson keresztül megy a 13-as kivezetéshez. A rövid láb vagy a katód a földre kerül.

Vázlat

A kód

/*
  Physical Pixel

  Példa számítógépről az Arduino kártyára küldött adatok fogadásának használatára.
  Ebben az esetben az Arduino kártyák bekapcsolnak egy LED-et, amikor megkapják a
  "H" karaktert, és kikapcsolják a LED-et, amikor az "L" karaktert kapják.

  Az adatok elküldhetők az Arduino Serial Monitorból vagy más programból,
  például a Processing (lásd a kódot lent), a Flash (soros hálózati proxyn keresztül),
  a PD vagy a Max/MSP programból.

  Az áramkör:
  - LED 220 ohmos ellenálláson keresztül a 13-as digitális kivezetésről a földre csatlakozik

  created 2006
  by David A. Mellis
  modified 30 Aug 2011
  by Tom Igoe and Scott Fitzgerald

  Ez a kód nyilvános.

  https://docs.arduino.cc/built-in-examples/communication/PhysicalPixel
*/

const int ledPin = 13; // a kivezetés, amelyhez a LED csatlakozik
int incomingByte;      // egy változó a bejövő soros adatok beolvasásához

void setup() {
  // soros kommunikáció inicializálása:
  Serial.begin(9600);
  // inicializálja a LED kivezetését kimenetként:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // nézd meg, hogy vannak-e bejövő soros adatok:
  if (Serial.available() > 0) {
    // olvassa be a soros puffer legrégebbi bájtját:
    incomingByte = Serial.read();
    // ha nagy H (ASCII 72), kapcsolja be a LED-et:
    if (incomingByte == 'H') {
      digitalWrite(ledPin, HIGH);
    }
    // ha L (ASCII 76), kapcsolja ki a LED-et:
    if (incomingByte == 'L') {
      digitalWrite(ledPin, LOW);
    }
  }
}

/* Processing kód a példához

  // Vigye az egeret a sorozat fölé

  // Bemutatja, hogyan kell adatokat küldeni az Arduino I/O kártyára annak érdekében,
  // hogy bekapcsolja a lámpát, ha az egér egy négyzet felett van, és kikapcsolja,
  // ha az egér nem ott van.

  // created 2003-4
  // based on examples by Casey Reas and Hernando Barragan
  // modified 30 Aug 2011
  // by Tom Igoe
  // Ez a kód nyilvános.

  import processing.serial.*;

  float boxX;
  float boxY;
  int boxSize = 20;
  boolean mouseOverBox = false;

  Serial port;

  void setup() {
    size(200, 200);
    boxX = width / 2.0;
    boxY = height / 2.0;
    rectMode(RADIUS);

    // Sorolja fel az összes elérhető soros portot a kimeneti ablakban.
    // Ebből a listából ki kell választania azt a portot, amelyhez az
    // Arduino kártya csatlakozik. A lista első portja a 0-s port,
    // a harmadik pedig a 2-es port.
    // ha a Processing 2.1 vagy újabb verzióját használja, használja a Serial.printArray()
    println(Serial.list());

    // Nyissa meg azt a portot, amelyhez az Arduino kártya csatlakozik (ebben az esetben #0)
    // Ügyeljen arra, hogy a portot az Arduino által használt sebességgel (9600 bps) nyissa meg.
    port = new Serial(this, Serial.list()[0], 9600);
  }

  void draw() {
    background(0);

    // Tesztelje, hogy a kurzor a doboz fölött van-e
    if (mouseX > boxX - boxSize && mouseX < boxX + boxSize &&
        mouseY > boxY - boxSize && mouseY < boxY + boxSize) {
      mouseOverBox = true;
      // rajzoljon egy vonalat a doboz köré, és változtassa meg a színét:
      stroke(255);
      fill(153);
      // küldjön "H"-t, hogy jelezze, hogy az egér a négyzet fölött van:
      port.write('H');
    }
    else {
      // állítsa vissza a dobozt inaktív állapotába:
      stroke(153);
      fill(153);
      // küldjön "L"-t a LED kikapcsolásához:
      port.write('L');
      mouseOverBox = false;
    }

    // Rajzold le a dobozt
    rect(boxX, boxY, boxSize, boxSize);
  }

*/

/* Max/MSP 5-ös verziójú patch a példával való futtatáshoz:

  ----------begin_max5_patcher----------
  1672.3oc2ZszaaiCD9ryuBBebQVCQRYao8xhf1cQCPVfBzh8RRQ.sDsM2HSZ
  HQmlzh9eu7gjsjsEk7y0oWjiHoHm4aluYHGlueUmtiDuPy5B9Cv8fNc99Uc5
  XZR2Pm726zcF4knDRlYXciDylQ4xtWa6SReQZZ+iSeMiEQR.ej8BM4A9C7OO
  kkAlSjQSAYTdbFfvA27o2c6sfO.Doqd6NfXgDHmRUCKkolg4hT06BfbQJGH3
  5Qd2e8d.QJIQSow5tzebZ7BFW.FIHow8.2JAQpVIIYByxo9KIMkSjL9D0BRT
  sbGHZJIkDoZOSMuQT.8YZ5qpgGI3locF4IpQRzq2nDF+odZMIJkRjpEF44M3
  A9nWAum7LKFbSOv+PSRXYOvmIhYiYpg.8A2LOUOxPyH+TjPJA+MS9sIzTRRr
  QP9rXF31IBZAHpVHkHrfaPRHLuUCzoj9GSoQRqIB52y6Z.tu8o4EX+fddfuj
  +MrXiwPL5+9cXwrOVvkbxLpomazHbQO7EyX7DpzXYgkFdF6algCQpkX4XUlo
  hA6oa7GWck9w0Gnmy6RXQOoQeCfWwlzsdnHLTq8n9PCHLv7Cxa6PAN3RCKjh
  ISRVZ+sSl704Tqt0kocE9R8J+P+RJOZ4ysp6gN0vppBbOTEN8qp0YCq5bq47
  PUwfA5e766z7NbGMuncw7VgNRSyQhbnPMGrDsGaFSvKM5NcWoIVdZn44.eOi
  9DTRUT.7jDQzSTiF4UzXLc7tLGh4T9pwaFQkGUGIiOOkpBSJUwGsBd40krHQ
  9XEvwq2V6eLIhV6GuzP7uzzXBmzsXPSRYwBtVLp7s5lKVv6UN2VW7xRtYDbx
  7s7wRgHYDI8YVFaTBshkP49R3rYpH3RlUhTQmK5jMadJyF3cYaTNQMGSyhRE
  IIUlJaOOukdhoOyhnekEKmZlqU3UkLrk7bpPrpztKBVUR1uorLddk6xIOqNt
  lBOroRrNVFJGLrDxudpET4kzkstNp2lzuUHVMgk5TDZx9GWumnoQTbhXsEtF
  tzCcM+z0QKXsngCUtTOEIN0SX2iHTTIIz968.Kf.uhfzUCUuAd3UKd.OKt.N
  HTynxTQyjpQD9jlwEXeKQxfHCBahUge6RprSa2V4m3aYOMyaP6gah2Yf1zbD
  jVwZVGFZHHxINFxpjr5CiTS9JiZn6e6nTlXQZTAFj6QCppQwzL0AxVtoi6WE
  QXsANkEGWMEuwNvhmKTnat7A9RqLq6pXuEwY6xM5xRraoTiurj51J1vKLzFs
  CvM7HI14Mpje6YRxHOSieTsJpvJORjxT1nERK6s7YTN7sr6rylNwf5zMiHI4
  meZ4rTYt2PpVettZERbjJ6PjfqN2loPSrUcusH01CegsGEE5467rnCdqT1ES
  QxtCvFq.cvGz+BaAHXKzRSfP+2Jf.KCvj5ZLJRAhwi+SWHvPyN3vXiaPn6JR
  3eoA.0TkFhTvpsDMIrL20nAkCI4EoYfSHAuiPBdmJRyd.IynYYjIzMvjOTKf
  3DLvnvRLDLpWeEOYXMfAZqfQ0.qsnlUdmA33t8CNJ7MZEb.u7fiZHLYzDkJp
  R7CqEVLGN75U+1JXxFUY.xEEBcRCqhOEkz2bENEWnh4pbh0wY25EefbD6EmW
  UA6Ip8wFLyuFXx+Wrp8m6iff1B86W7bqJO9+mx8er4E3.abCLrYdA16sBuHx
  vKT6BlpIGQIhL55W7oicf3ayv3ixQCm4aQuY1HZUPQWY+cASx2WZ3f1fICuz
  vj5R5ZbM1y8gXYN4dIXaYGq4NhQvS5MmcDADy+S.j8CQ78vk7Q7gtPDX3kFh
  3NGaAsYBUAO.8N1U4WKycxbQdrWxJdXd10gNIO+hkUMmm.CZwknu7JbNUYUq
  0sOsTsI1QudDtjw0t+xZ85wWZd80tMCiiMADNX4UzrcSeK23su87IANqmA7j
  tiRzoXi2YRh67ldAk79gPmTe3YKuoY0qdEDV3X8xylCJMTN45JIakB7uY8XW
  uVr3PO8wWwEoTW8lsfraX7ZqzZDDXCRqNkztHsGCYpIDDAOqxDpMVUMKcOrp
  942acPvx2NPocMC1wQZ8glRn3myTykVaEUNLoEeJjVaAevA4EAZnsNgkeyO+
  3rEZB7f0DTazDcQTNmdt8aACGi1QOWnMmd+.6YjMHH19OB5gKsMF877x8wsJ
  hN97JSnSfLUXGUoj6ujWXd6Pk1SAC+Pkogm.tZ.1lX1qL.pe6PE11DPeMMZ2
  .P0K+3peBt3NskC
  -----------end_max5_patcher-----------

*/

Processing kód

Másolja ki a Processing kódot a fenti kódmintából. Amikor az egeret a középső négyzet fölé viszi, a 13-as kivezetésen lévő LED-nek be kell kapcsolnia, ha elviszi onnan akkor ki kell kapcsolnia. A Processing applet így néz ki:

Max patch

A Max/MSP patch úgy néz ki, mint az alábbi képen. Másolja ki a fenti kódmintából, és illessze be egy "New patcher" ablakba.

Tudj meg többet

További alapvető oktatóanyagokat a beépített példák részben talál.

Felfedezheti a nyelvi referenciát is, az Arduino programozási nyelv részletes gyűjteményét.