Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/PhysicalPixel

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Физический пиксель[1]

Этот пример демонстрирует использование платы Arduino для получения данных от компьютера. Подключенный к Arduino светодиод будет включаться при получении символа «H» и выключаться при получении символа «L». Данные можно отправлять через окно Serial Monitor или через другую программу вроде Processing (см. код ниже), Flash (через программу-посредник), PD или Max/MSP.

Необходимое оборудование

  • Плата Arduino;
  • Аналоговый датчик (потенциометр, фотоэлемент, силоизмерительный резистор и т.д.);

Необходимое ПО

Цепь

Подсоедините светодиод к Arduino. Анод (длинную ногу) – к 13-ому контакту, катод (короткую) – к «земле». Можно воспользоваться и встроенным светодиодом (по умолчанию установлен на многих Arduino).

ExampleCircuit bb.png

Схема

ExampleCircuit sch.png

Код для Arduino

  1. /*
  2.   Физический пиксель
  3.  
  4.  Пример использования Arduino в получении данных от компьютера. Подключенный к Arduino светодиод будет включаться при получении символа «H» и выключаться при получении символа «L».
  5.  Данные можно отправлять через окно Serial Monitor или через другую программу вроде Processing (см. код ниже), Flash (через программу-посредник), PD или Max/MSP.
  6.  Цепь:
  7.  * Светодиод, подключенный к 13-ому цифровому контакту и «земле»
  8.  Создан в 2006 году Дэвидом А. Меллисом (David A. Mellis),
  9.  модифицирован 30 августа 2011 Томом Иго (Tom Igoe)
  10.  и Скоттом Фитцджеральдом (Scott Fitzgerald).
  11.  
  12.  Этот код не защищен авторским правом.
  13.  
  14.  http://www.arduino.cc/en/Tutorial/PhysicalPixel
  15.  */
  16.  
  17. const int ledPin = 13; // контакт, к которому подсоединен светодиод
  18. int incomingByte;      // переменная, в которую будут записываться входящие данные
  19.  
  20. void setup() {
  21.   // инициализируем последовательную передачу данных:
  22.   Serial.begin(9600);
  23.   // задаем контакт светодиода как выходной контакт:
  24.   pinMode(ledPin, OUTPUT);
  25. }
  26.  
  27. void loop() {
  28.   // смотрим, появились ли входящие данные:
  29.   if (Serial.available() > 0) {
  30.     // считываем самый старый байт в буфере:
  31.     incomingByte = Serial.read();
  32.     // если это прописная «H» (в ASCII под номером 72), включаем светодиод:
  33.     if (incomingByte == 'H') {
  34.       digitalWrite(ledPin, HIGH);
  35.     }
  36.     // если это прописная «L» (в ASCII под номером 76), выключаем светодиод:
  37.     if (incomingByte == 'L') {
  38.       digitalWrite(ledPin, LOW);
  39.     }
  40.   }
  41. }

Код к Processing

  1. /* Код к Processing для этого примера */
  2.  
  3.  // Включение/выключение светодиода с помощью мышки (тип передачи данных – последовательная).
  4.  
  5.  // Демонстрирует, как передавать данные на цифровой контакт Arduino.
  6.  // Если курсор мышки будет над квадратом, светодиод включится, а если нет – выключится.
  7.  
  8.  // Создан в 2003 году,
  9.  // основан на примерах Кейси Риса (Casey Reas)
  10.  // и Хернандо Баррагана (Hernando Barragan),
  11.  // модифицирован 30 августа 2011 Томом Иго (Tom Igoe)
  12.  
  13.  // Этот код не защищен авторским правом.
  14.  
  15.  import processing.serial.*;
  16.  
  17.  float boxX;
  18.  float boxY;
  19.  int boxSize = 20;
  20.  boolean mouseOverBox = false;
  21.  
  22.  Serial port;
  23.  
  24.  void setup()  {
  25.  size(200, 200);
  26.  boxX = width/2.0;
  27.  boxY = height/2.0;
  28.  rectMode(RADIUS);
  29.  
  30.  // Выводит список всех доступных последовательных портов.
  31.  // Из этого списка нужно выбрать порт, к которому подключена Arduino.
  32.  // Самым первым портом в этом списке будет #0, а третьим – #2.
  33.  println(Serial.list());
  34.  
  35.  // Открываем порт, к которому подключена Arduino (в данном случае это #0).
  36.  // Делаем это с той же скоростью, которую использует Arduino (9600 бит в секунду).
  37.  port = new Serial(this, Serial.list()[0], 9600);
  38.  
  39.  }
  40.  
  41.  void draw()
  42.  {
  43.  background(0);
  44.  
  45.  // Проверяем, находится ли курсор над квадратом:
  46.  if (mouseX > boxX-boxSize && mouseX < boxX+boxSize &&
  47.  mouseY > boxY-boxSize && mouseY < boxY+boxSize) {
  48.  mouseOverBox = true;  
  49.  // рисуем линию вокруг квадрата и меняем его цвет:
  50.  stroke(255);
  51.  fill(153);
  52.  // отправляем 'H', чтобы обозначить, что курсор находится поверх квадрата:
  53.  port.write('H');      
  54.  }
  55.  else {
  56.  // возвращаем квадрат в неактивное состояние:
  57.  stroke(153);
  58.  fill(153);
  59.  // отправляем 'L' чтобы выключить светодиод:
  60.  port.write('L');      
  61.  mouseOverBox = false;
  62.  }
  63.  
  64.  // рисуем квадрат:
  65.  rect(boxX, boxY, boxSize, boxSize);
  66.  }

Скопируйте код к Processing, расположенный выше. Если курсор мыши будет над центральным квадратом, светодиод на 13-ом контакте должен включиться и выключиться. Программа к Processing выглядит следующим образом:

PhysicalPixel-output.png

Код к Max

  1. /*
  2. Патч к Max/MSP (версия 5) для запуска этого примера:
  3. */
  4. ----------begin_max5_patcher----------
  5. 1672.3oc2ZszaaiCD9ryuBBebQVCQRYao8xhf1cQCPVfBzh8RRQ.sDsM2HSZ
  6. HQmlzh9eu7gjsjsEk7y0oWjiHoHm4aluYHGlueUmtiDuPy5B9Cv8fNc99Uc5
  7. XZR2Pm726zcF4knDRlYXciDylQ4xtWa6SReQZZ+iSeMiEQR.ej8BM4A9C7OO
  8. kkAlSjQSAYTdbFfvA27o2c6sfO.Doqd6NfXgDHmRUCKkolg4hT06BfbQJGH3
  9. 5Qd2e8d.QJIQSow5tzebZ7BFW.FIHow8.2JAQpVIIYByxo9KIMkSjL9D0BRT
  10. sbGHZJIkDoZOSMuQT.8YZ5qpgGI3locF4IpQRzq2nDF+odZMIJkRjpEF44M3
  11. A9nWAum7LKFbSOv+PSRXYOvmIhYiYpg.8A2LOUOxPyH+TjPJA+MS9sIzTRRr
  12. QP9rXF31IBZAHpVHkHrfaPRHLuUCzoj9GSoQRqIB52y6Z.tu8o4EX+fddfuj
  13. +MrXiwPL5+9cXwrOVvkbxLpomazHbQO7EyX7DpzXYgkFdF6algCQpkX4XUlo
  14. hA6oa7GWck9w0Gnmy6RXQOoQeCfWwlzsdnHLTq8n9PCHLv7Cxa6PAN3RCKjh
  15. ISRVZ+sSl704Tqt0kocE9R8J+P+RJOZ4ysp6gN0vppBbOTEN8qp0YCq5bq47
  16. PUwfA5e766z7NbGMuncw7VgNRSyQhbnPMGrDsGaFSvKM5NcWoIVdZn44.eOi
  17. 9DTRUT.7jDQzSTiF4UzXLc7tLGh4T9pwaFQkGUGIiOOkpBSJUwGsBd40krHQ
  18. 9XEvwq2V6eLIhV6GuzP7uzzXBmzsXPSRYwBtVLp7s5lKVv6UN2VW7xRtYDbx
  19. 7s7wRgHYDI8YVFaTBshkP49R3rYpH3RlUhTQmK5jMadJyF3cYaTNQMGSyhRE
  20. IIUlJaOOukdhoOyhnekEKmZlqU3UkLrk7bpPrpztKBVUR1uorLddk6xIOqNt
  21. lBOroRrNVFJGLrDxudpET4kzkstNp2lzuUHVMgk5TDZx9GWumnoQTbhXsEtF
  22. tzCcM+z0QKXsngCUtTOEIN0SX2iHTTIIz968.Kf.uhfzUCUuAd3UKd.OKt.N
  23. HTynxTQyjpQD9jlwEXeKQxfHCBahUge6RprSa2V4m3aYOMyaP6gah2Yf1zbD
  24. jVwZVGFZHHxINFxpjr5CiTS9JiZn6e6nTlXQZTAFj6QCppQwzL0AxVtoi6WE
  25. QXsANkEGWMEuwNvhmKTnat7A9RqLq6pXuEwY6xM5xRraoTiurj51J1vKLzFs
  26. CvM7HI14Mpje6YRxHOSieTsJpvJORjxT1nERK6s7YTN7sr6rylNwf5zMiHI4
  27. meZ4rTYt2PpVettZERbjJ6PjfqN2loPSrUcusH01CegsGEE5467rnCdqT1ES
  28. QxtCvFq.cvGz+BaAHXKzRSfP+2Jf.KCvj5ZLJRAhwi+SWHvPyN3vXiaPn6JR
  29. 3eoA.0TkFhTvpsDMIrL20nAkCI4EoYfSHAuiPBdmJRyd.IynYYjIzMvjOTKf
  30. 3DLvnvRLDLpWeEOYXMfAZqfQ0.qsnlUdmA33t8CNJ7MZEb.u7fiZHLYzDkJp
  31. R7CqEVLGN75U+1JXxFUY.xEEBcRCqhOEkz2bENEWnh4pbh0wY25EefbD6EmW
  32. UA6Ip8wFLyuFXx+Wrp8m6iff1B86W7bqJO9+mx8er4E3.abCLrYdA16sBuHx
  33. vKT6BlpIGQIhL55W7oicf3ayv3ixQCm4aQuY1HZUPQWY+cASx2WZ3f1fICuz
  34. vj5R5ZbM1y8gXYN4dIXaYGq4NhQvS5MmcDADy+S.j8CQ78vk7Q7gtPDX3kFh
  35. 3NGaAsYBUAO.8N1U4WKycxbQdrWxJdXd10gNIO+hkUMmm.CZwknu7JbNUYUq
  36. 0sOsTsI1QudDtjw0t+xZ85wWZd80tMCiiMADNX4UzrcSeK23su87IANqmA7j
  37. tiRzoXi2YRh67ldAk79gPmTe3YKuoY0qdEDV3X8xylCJMTN45JIakB7uY8XW
  38. uVr3PO8wWwEoTW8lsfraX7ZqzZDDXCRqNkztHsGCYpIDDAOqxDpMVUMKcOrp
  39. 942acPvx2NPocMC1wQZ8glRn3myTykVaEUNLoEeJjVaAevA4EAZnsNgkeyO+
  40. 3rEZB7f0DTazDcQTNmdt8aACGi1QOWnMmd+.6YjMHH19OB5gKsMF877x8wsJ
  41. hN97JSnSfLUXGUoj6ujWXd6Pk1SAC+Pkogm.tZ.1lX1qL.pe6PE11DPeMMZ2
  42. .P0K+3peBt3NskC
  43. -----------end_max5_patcher-----------

Скетч к Max будет выглядеть как на картинке ниже. Скопируйте код патча (см. выше) и вставьте его в новое окно.


Max-physicalPixel.png

См.также

  1. Serial.read()
  2. Serial.available()
  3. If Statement
  4. Dimmer
  5. Graph
  6. Virtual Color Mixer
  7. Serial Call Response
  8. Serial Call Response ASCII
  9. Serial input (Switch (case) Statement)

Внешние ссылки

  1. Arduino - Physical Pixel