Arduino:Примеры/PhysicalPixel

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

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


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

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

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

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

Цепь

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

Рис. 1. Подключение светодиода к плате Arduino.
Рис. 1. Подключение светодиода к плате Arduino.

Схема

Рис. 2. Схема подключения светодиода к плате Arduino.
Рис. 2. Схема подключения светодиода к плате Arduino.

Код для Arduino

/*
  Физический пиксель
 
 Пример использования Arduino в получении данных от компьютера. Подключенный к Arduino светодиод будет включаться при получении символа «H» и выключаться при получении символа «L».
 Данные можно отправлять через окно Serial Monitor или через другую программу вроде Processing (см. код ниже), Flash (через программу-посредник), PD или Max/MSP.
 Цепь:
 * Светодиод, подключенный к 13-ому цифровому контакту и «земле»
 Создан в 2006 году Дэвидом А. Меллисом (David A. Mellis),
 модифицирован 30 августа 2011 Томом Иго (Tom Igoe) 
 и Скоттом Фитцджеральдом (Scott Fitzgerald).
 
 Этот код не защищен авторским правом.

 http://www.arduino.cc/en/Tutorial/PhysicalPixel
 */

const int ledPin = 13; // контакт, к которому подсоединен светодиод 
int incomingByte;      // переменная, в которую будут записываться входящие данные 

void setup() {
  // инициализируем последовательную передачу данных:
  Serial.begin(9600);
  // задаем контакт светодиода как выходной контакт:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // смотрим, появились ли входящие данные:
  if (Serial.available() > 0) {
    // считываем самый старый байт в буфере:
    incomingByte = Serial.read();
    // если это прописная «H» (в ASCII под номером 72), включаем светодиод:
    if (incomingByte == H) {
      digitalWrite(ledPin, HIGH);
    } 
    // если это прописная «L» (в ASCII под номером 76), выключаем светодиод:
    if (incomingByte == L) {
      digitalWrite(ledPin, LOW);
    }
  }
}

Код к Processing

/* Код к Processing для этого примера */
 
 // Включение/выключение светодиода с помощью мышки (тип передачи данных – последовательная).
 
 // Демонстрирует, как передавать данные на цифровой контакт Arduino.
 // Если курсор мышки будет над квадратом, светодиод включится, а если нет – выключится. 
 
 // Создан в 2003 году,
 // основан на примерах Кейси Риса (Casey Reas)
 // и Хернандо Баррагана (Hernando Barragan),
 // модифицирован 30 августа 2011 Томом Иго (Tom Igoe)

 // Этот код не защищен авторским правом.

 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); 

 // Выводит список всех доступных последовательных портов. 
 // Из этого списка нужно выбрать порт, к которому подключена Arduino.
 // Самым первым портом в этом списке будет #0, а третьим – #2. 
 println(Serial.list()); 
 
 // Открываем порт, к которому подключена Arduino (в данном случае это #0).
 // Делаем это с той же скоростью, которую использует Arduino (9600 бит в секунду).
 port = new Serial(this, Serial.list()[0], 9600); 
 
 }
 
 void draw() 
 { 
 background(0);
 
 // Проверяем, находится ли курсор над квадратом: 
 if (mouseX > boxX-boxSize && mouseX < boxX+boxSize && 
 mouseY > boxY-boxSize && mouseY < boxY+boxSize) {
 mouseOverBox = true;  
 // рисуем линию вокруг квадрата и меняем его цвет:
 stroke(255); 
 fill(153);
 // отправляем H, чтобы обозначить, что курсор находится поверх квадрата:
 port.write(H);       
 } 
 else {
 // возвращаем квадрат в неактивное состояние:
 stroke(153);
 fill(153);
 // отправляем L чтобы выключить светодиод: 
 port.write(L);      
 mouseOverBox = false;
 }
 
 // рисуем квадрат:
 rect(boxX, boxY, boxSize, boxSize);
 }

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

Рис. 3. Окно программы, написанной на Processing
Рис. 3. Окно программы, написанной на Processing

Код к Max

/*
Патч к Max/MSP (версия 5) для запуска этого примера:
*/
----------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-----------

Скетч к 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)

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