Пример Physical Pixel – Обмен данными с компьютером      источник     <<<назад

Загрузим стандартный пример «Physical Pixel» через меню File \ Sketchbook \ Examples \ Communication \ PhysicalPixel. Эта программа ждет данные от компьютера. При получении символа ‘H’ тестовый индикатор загорается, при получении символа ‘L’ – гаснет. Разберем ее исходный код:

int outputPin = 13;                //здесь храним номер контакта
int val;                           //здесь будет храниться принятый символ

void setup()
{
  Serial.begin(9600);              //установка порта на скорость 9600 бит/сек
  pinMode(outputPin, OUTPUT);      //устанавливаем 13 контакт в режим вывода
}

void loop()
{
  if (Serial.available()) {        //если есть принятый символ,
    val = Serial.read();           //  то читаем его и сохраняем в val
    if (val == 'H') {              //  если принят симовол 'H',...
      digitalWrite(outputPin, HIGH); //  то включаем светодиод
    }
    if (val == 'L') {              //  если принят симовол 'L',
      digitalWrite(outputPin, LOW); //    то выключаем светодиод
    }
  }
}

Обратите внимание на вложенные условия и порядок следования отрывающих и закрывающих фигурных скобок. Для удобства чтения кода программы каждый следующий уровень вложенности сдвинут вправо. Кроме того, редактор помогает читать код – если Вы поставите курсор справа от скобки, он выделит соответствующую ей парную скобку.
--------------------------
Как проверить работу этой программы после того, как Вы загрузите ее в микроконтроллер? Нужно найти способ отправлять символы на COM-порт компьютера, чтобы микроконтроллер принимал и обрабатывал их. Существует множество вариантов решения этой задачи.
--------------------------
Используем встроенный в среду разработки монитор COM-порта
--------------------------
Это наиболее простой, и понятный начинающим метод.

На панели инструментов есть кнопка монитора COM-порта. Вызвав монитор убедитесь, что выбрана та же самая скорость обмена, что и в программе микроконтроллера. Теперь можно вводить любые символы в поле ввода справа, и нажимать кнопку «Send» – введенные символы будут отправлены в порт, и там их примет Ваша программа. Введите там латинскую букву «H», нажмите «Send» – тестовый светодиод загорится. Если послать «L» – погаснет. Кстати, все данные, которые Ваша программа будет посылать на COM-порт будут выводиться в черном окне снизу.

Используем программу эмуляции терминала HyperTerminal
--------------------------
Это немного более сложный в реализации вариант обмена.
--------------------------
В состав Windows обычно включена программа эмуляции терминала HyperTerminal. В Windows XP ее можно найти в меню Пуск \ Все программы \ Программы \ Стандартные \ Связь \ HyperTerminal. При запуске нужно отказаться от создания подключения, выбрать меню Файл \ Свойства. В появившемся диалоге выбрать свой COM-порт, нажать «Настроить», и настроить параметры связи в соответствии с рисунком:

Нажмите «OK» в обоих окнах, и попав в основное окно программы, любую клавишу на клавиатуре – HyperTerminal подключится к COM-порту. Теперь все набираемые на клавиатуре символы попадают через COM-порт в микроконтроллер, а все, что отправляет микроконтроллер, попадает на экран. Понажимайте клавиши «H» и «L» (следите за выбранным языком, и регистром) – тестовый светодиод должен загораться и гаснуть.

Напишем собственную программу для ПК !
-------------------------
Этот вариант для настоящих энтузиастов, желающих программировать не только Freeduino, но и ПК. А почему бы и нет? Нам не потребуется изучать детали программирования последовательного порта под Windows, или еще какие-то сложные вещи. Специально для решения подобных простых задач существует язык Processing (http://processing.org), очень похожий синтаксисом и даже средой разработки на Wiring, используемый для Freeduino/Arduino.

На прилагаемом диске есть архив processing-0150.zip – рекомендуем разархивировать содержимое на диск C:. Запустите файл C:\processing-0150\processing.exe – вы увидите среду разработки, похожую на Arduino.

Исходный код программы для языка Processing есть в комментариях ниже основного текста примера Physical Pixel. Здесь он приведен с минимальными изменениями – мы исправили открытие порта, чтобы можно было легко заменить его номер:

import processing.serial.*;
Serial port;
void setup()
{
  size(200, 200);
  noStroke();
  frameRate(10);
  port = new Serial(this, "COM5", 9600); // !!! Здесь прописать свой COM-порт !!!
}
boolean mouseOverRect() //Возвращает истину, если курсор внутри квадрата
{
  return ((mouseX >= 50)&&(mouseX <= 150)&&(mouseY >= 50)&(mouseY <= 150));
}
void draw()
{
  background(#222222);
  if(mouseOverRect())      // Если курсор внутри квадрата….
  {
    fill(#BBBBB0);         //   сменить цвет на поярче
    port.write('H');       //   послать 'H' в микроконтроллер
  } else {                 // если не внутри...
    fill(#666660);         //   сменить цвет на потемнее
    port.write('L');       //   послать 'L' в микроконтроллер
  }
  rect(50, 50, 100, 100);  // нарисовать квадрат
}

Запустите программу (через меню Sketch \ Run) – появится окно с квадратом, при помещении в который курсора мыши, будет загораться светодиод на Freeduino.

Описание языка Processing и его возможностей выходит за рамки этого простого повествования, но во многих примерах для Arduino в комментариях ниже основного текста программы представлен код Processing для ПК, взаимодействующий с Freeduino.