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

Arduino:Примеры/VirtualColorMixer

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

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

Контакты:

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


Виртуальный «микшер» цветов [1]

Этот пример показывает, как передавать с Arduino на компьютер сразу несколько значений. Данные от трех потенциометров, подсоединенных к Arduino, будут использоваться для изменения фонового цвета в скетче для Processing или патче для Max/MSP. Каждый потенциометр отвечает за свой цвет – красный, зеленый и синий. Сочетание этих цветов и станет итоговым фоновым цветом для экрана программы.

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

  • Плата Arduino;
  • Три аналоговых датчика (подойдут потенциометры, фотоэлементы, силоизмерительные резисторы и т.д.);
  • Три резистора на 10 кОм;
  • Макетная плата Breadboard;
  • Провода-перемычки;

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

Цепь

Подключите аналоговые датчики к 0-ому, 1-ому и 2-ому входным аналоговым контактам. Эта цепь использует три подцепи с делителями напряжения – чтобы генерировать аналоговое напряжение от потенциометров. Каждая из этих подцепей имеет по два последовательно подключенных резистора (резистора-датчика и обычного резистора), которые делят напряжение пропорционально своим значениям.

VirtualColorMixer bb.png

Схема

VCM schem.png

Код для Arduino

Данные от датчиков передаются с Arduino на компьютер в виде десятичных ASCII-чисел. Это значит, что каждое число будет передаваться с помощью ASCII-символов, отвечающих за цифры от «0» до «9». К примеру, число «234» будет передано при помощи трех байтов: «50» (это число отвечает в кодировке ASCII за «2»), «51» (это «3») и «52» (это «4»).

  1. /*
  2.   Этот пример считывает данные от трех аналоговых датчиков (проще всего воспользоваться потенциометрами),
  3. а затем передает эту информацию по последовательному порту.
  4.  Программы Processing и Max/MSP (примеры для них указаны ниже) используют эти данные для того,
  5. чтобы поменять фоновый цвет экрана.
  6.  
  7.  Цепь:
  8.  * потенциометры, подсоединенные к 0-ому, 1-ому и 2-ому входным аналоговым контактам
  9.  
  10.  http://www.arduino.cc/en/Tutorial/VirtualColorMixer
  11.  
  12.  Создан 2 декабря 2006 года Дэвидом А. Меллисом (David A. Mellis),
  13.  модифицирован 30 августа 2011 Томом Иго (Tom Igoe)
  14.  и Скоттом Фитцджеральдом (Scott Fitzgerald).
  15.  
  16.  Этот код не защищен авторским правом.
  17.  */
  18.  
  19. const int redPin = A0;      // датчик для управления красным цветом const int greenPin = A1;    // датчик для управления зеленым цветом
  20. const int bluePin = A2;     // датчик для управления синим цветом
  21.  
  22. void setup()
  23. {
  24.   Serial.begin(9600);
  25. }
  26.  
  27. void loop()
  28. {
  29.   Serial.print(analogRead(redPin));
  30.   Serial.print(",");
  31.   Serial.print(analogRead(greenPin));
  32.   Serial.print(",");
  33.   Serial.println(analogRead(bluePin));
  34. }

Код к Processing

  1. /* Код к Processing для этого примера */
  2.  
  3. //  Этот код не защищен авторским правом.
  4.  
  5.  import processing.serial.*;
  6.  
  7.  float redValue = 0;        // значение для красного
  8.  float greenValue = 0;      // значение для зеленого
  9.  float blueValue = 0;       // значение для синего
  10.  
  11.  Serial myPort;
  12.  
  13.  void setup() {
  14.  size(200, 200);
  15.  
  16.  // выводим список всех доступных последовательных портов:
  17.  println(Serial.list());
  18.  // я знаю, что на моем Mac первый последовательный порт
  19.  // всегда подключен к Arduino,
  20.  // поэтому я сразу открываю Serial.list()[0].
  21.  // вы же укажите тот порт, который подключен к Arduino у вас.
  22.  myPort = new Serial(this, Serial.list()[0], 9600);
  23.  // не запускаем serialEvent(), пока не увидим символ новой строки:
  24.  myPort.bufferUntil('\n');
  25.  }
  26.  
  27.  void draw() {
  28.  // задаем фоновый цвет, основываясь на значениях для исходных цветов (красного, зеленого и синего):
  29.  background(redValue, greenValue, blueValue);
  30.  }
  31.  
  32.  void serialEvent(Serial myPort) {
  33.  // берем ASCII-строку:
  34.  String inString = myPort.readStringUntil('\n');
  35.  
  36.  if (inString != null) {
  37.  // избавляемся от пробелов:
  38.  inString = trim(inString);
  39.  // разбиваем данные в строке запятыми и
  40.  // конвертируем итоговые «суб-строки» в массив целых чисел:
  41.  float[] colors = float(split(inString, ","));
  42.  // если в массиве как минимум три элемента,
  43.  // это значит, что мы получили блок данных, позволяющий поменять цвет экрана,
  44.  // то есть данные, с которыми можно работать дальше.
  45.  // записываем эти числа в «цветные» переменные:
  46.  if (colors.length >=3) {
  47.  // а теперь масштабируем их в диапазоне от 0 до 255:
  48.  redValue = map(colors[0], 0, 1023, 0, 255);
  49.  greenValue = map(colors[1], 0, 1023, 0, 255);
  50.  blueValue = map(colors[2], 0, 1023, 0, 255);
  51.  }
  52.  }
  53.  }

Пример для Processing указан выше. Когда вы будете менять данные при помощи аналоговых датчиков, фоновый цвет на экране тоже будет меняться.

VirtualColorMixer-output.png

Код к Max

  1. /* Патч к Max/MSP для этого примера */
  2.  
  3.  ----------begin_max5_patcher----------
  4. 1512.3oc4Z00aaaCE8YmeED9ktB35xOjrj1aAsXX4g8xZQeYoXfVh1gqRjdT
  5. TsIsn+2K+PJUovVVJ1VMdCAvxThV7bO7b48dIyWtXxzkxaYkSA+J3u.Sl7kK
  6. lLwcK6MlT2dxzB5so4zRW2lJXeRt7elNy+HM6Vs61uDDzbOYkNmo02sg4euS
  7. 4BSede8S2P0o2vEq+aEKU66PPP7b3LPHDauPvyCmAvv4v6+M7L2XXF2WfCaF
  8. lURgVPKbCxzKUbZdySDUEbgABN.ia08R9mccGYGn66qGutNir27qWbg8iY+7
  9. HDRx.Hjf+OPHCQgPdpQHoxhBlwB+QF4cbkthlCRk4REnfeKScs3ZwaugWBbj
  10. .PS+.qDPAkZkgPlY5oPS4By2A5aTLFv9pounjsgpnZVF3x27pqtBrRpJnZaa
  11. C3WxTkfUJYA.BzR.BhIy.ehquw7dSoJCsrlATLckR.nhLPNWvVwL+Vp1LHL.
  12. SjMG.tRaG7OxT5R2c8Hx9B8.wLCxVaGI6qnpj45Ug84kL+6YIM8CqUxJyycF
  13. 7bqsBRULGvwfWyRMyovElat7NvqoejaLm4f+fkmyKuVTHy3q3ldhB.WtQY6Z
  14. x0BSOeSpTqA+FW+Yy3SyybH3sFy8p0RVCmaMpTyX6HdDZ2JsPbfSogbBMueH
  15. JLd6RMBdfRMzPjZvimuWIK2XgFA.ZmtfKoh0Sm88qc6OF4bDQ3P6kEtF6xej
  16. .OkjD4H5OllyS+.3FlhY0so4xRlWqyrXErQpt+2rsnXgQNZHZgmMVzEofW7T
  17. S4zORQtgIdDbRHrObRzSMNofUVZVcbKbhQZrSOo934TqRHIN2ncr7BF8TKR1
  18. tHDqL.PejLRRPKMR.pKFAkbtDa+UOvsYsIFH0DYsTCjqZ66T1CmGeDILLpSm
  19. myk0SdkOKh5LUr4GbWwRYdW7fm.BvDmzHnSdH3biGpSbxxDNJoGDAD1ChH7L
  20. I0DaloOTBLvkO7zPs5HJnKNoGAXbol5eytUhfyiSfnjE1uAq+Fp0a+wygGwR
  21. q3ZI8.psJpkpJnyPzwmXBj7Sh.+bNvVZxlcKAm0OYHIxcIjzEKdRChgO5UMf
  22. LkMPNN0MfiS7Ev6TYQct.F5IWcCZ4504rGsiVswGWWSYyma01QcZgmL+f+sf
  23. oU18Hn6o6dXkMkFF14TL9rIAWE+6wvGV.p.TPqz3HK5L+VxYxl4UmBKEjr.B
  24. 6zinuKI3C+D2Y7azIM6N7QL6t+jQyZxymK1ToAKqVsxjlGyjz2c1kTK3180h
  25. kJEYkacWpv6lyp2VJTjWK47wHA6fyBOWxH9pUf6jUtZkLpNKW.9EeUBH3ymY
  26. XSQlaqGrkQMGzp20adYSmIOGjIABo1xZyAWJtCX9tg6+HMuhMCPyx76ao+Us
  27. UxmzUE79H8d2ZB1m1ztbnOa1mGeAq0awyK8a9UqBUc6pZolpzurTK232e5gp
  28. aInVw8QIIcpaiNSJfY4Z+92Cs+Mc+mgg2cEsvGlLY6V+1kMuioxnB5VM+fsY
  29. 9vSu4WI1PMBGXye6KXvNuzmZTh7U9h5j6vvASdngPdgOFxycNL6ia1axUMmT
  30. JIzebXcQCn3SKMf+4QCMmOZung+6xBCPLfwO8ngcEI52YJ1y7mx3CN9xKUYU
  31. bg7Y1yXjlKW6SrZnguQdsSfOSSDItqv2jwJFjavc1vO7OigyBr2+gDYorRk1
  32. HXZpVFfu2FxXkZtfp4RQqNkX5y2sya3YYL2iavWAOaizH+pw.Ibg8f1I9h3Z
  33. 2B79sNeOHvBOtfEalWsvyu0KMf015.AaROvZ7vv5AhnndfHLbTgjcCK1KlHv
  34. gOk5B26OqrXjcJ005.QqCHn8fVTxnxfj93SfQiJlv8YV0VT9fVUwOOhSV3uD
  35. eeqCUClbBPa.j3vWDoMZssNTzRNEnE6gYPXazZaMF921syaLWyAeBXvCESA8
  36. ASi6Zyw8.RQi65J8ZsNx3ho93OhGWENtWpowepae4YhCFeLErOLENtXJrOSc
  37. iadi39rf4hwc8xdhHz3gn3dBI7iDRlFe8huAfIZhq
  38. -----------end_max5_patcher-----------

Патч к Max указан выше. Скопируйте его и вставьте в новое окно.

Max-virtualColorMixer.png

См.также

  1. serial.begin()
  2. serial.print()
  3. analogRead()
  4. Dimmer
  5. Graph
  6. Physical Pixel
  7. Serial Call Response
  8. Serial Call and Response ASCII
  9. Serial Input (Switch (case) Statement)

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

  1. Arduino - Virtual Color Mixer