Мар 252013
 

Подружить Arduino с компьютером очень просто. Данные передаются через виртуальный порт RS-232(COM).

Итак переходим к действиям. Три светодиода будут управляться с клавиатуры, нажатием клавиш влево и вправо. Зажигаем первый светодиод и нажимаем клавишу влево, горящий светодиод тухнет, а слева от него загорается. Когда позиция горящего светодиода крайняя, нажатие в ту же сторону приведет к переходу на светодиод с противоположной стороны.
Блог о компьютерах  и компьютерной технике, Москва, Владимир Лукьянов, Arduino


На компьютере управляющая программа будет отображать позицию горящего светодиода.
Блог о компьютерах  и компьютерной технике, Москва, Владимир Лукьянов, Arduino

Схема со светодиодами, крайне проста.
LED1-3 светодиоды подключенные к ШИМ-выводам. ШИМ потребуются для фэйд-эффекта.
R1 двухсотомный резистор. Для ограничения тока проходящего через светодиод, иначе диод можно спалить.
Блог о компьютерах  и компьютерной технике, Москва, Владимир Лукьянов, Arduino

Небольшая программа для Arduino. (Скачиваем)

// Serial LED control
// compblog.vlukyanov.com
 
//Объявляем переменные.

int pin[] = {3, 5, 6}; // Объявляем массив в котором указанны номера выводов
int i = 0; // Переменная для определения текущей позиции горящего светодиода
int prev_i = 0; // Переменная для запоминания предыдущего светодиода

//  Настраиваем Arduino
void setup() {
  // Запускаем цикл, в котором определяем контакты 3,5,6 как выводные 
for (int t = 0; t < 3; t++ ) // >
{
  pinMode(pin[t], OUTPUT);
}
Serial.begin(9600); // Инициализируем перередачу данных по COM-порту на скорости 9600 бод
}

void loop() {

 // Запускаем цикл без каких либо действий
 // Только когда данные придут на COM-порт продолжится выполнение программы дальше этой строки
 while (Serial.available() == 0);
 
 // Данные пришли, считываем их в переменную i
 i = Serial.read();
 // Постепенно гасим предыдущий светодиод, понижая яркость с 255 до 0;
 for (int j=255; j > 0; j--) 
 {
  analogWrite(pin[prev_i],j);
  delay(1); //  Небольшая задержка
 }
 analogWrite(pin[prev_i],0); // Окончательно гасим светодиод

 // Пришедшее значение i используем для включения следующего светодиода
 for (int j=0; j < 255; j++) // >
 {
  analogWrite(pin[i],j);
  delay(1);
 } 

 // Запоминаем значение светодиода, чтоб потом гасить его, когда появится новое значение на COM-порту
 prev_i = i;

}

Теперь нужна программа на компьютере, которая будет посылать необходимые данные в COM-порт и отображать данные на экран. Processing хорошо подойдет.
IDE Arduino основана на processing, поэтому они очень похожи как внешне, так и по синтаксису.
Блог о компьютерах  и компьютерной технике, Москва, Владимир Лукьянов, Arduino

Тоже довольно простая программа на Processing. (Скачиваем)

// Serial LED control
// compblog.vlukyanov.com

import processing.serial.*; // подключаем библиотеку для общения по COM-порту
                            // в IDE Arduino это сделанно по умолчанию, тут надо это делать дополнительно
int value = 1;              // переменная которую будем отправлять в COM-порт для Arduino

Serial port;  // переменная обозначающая порт
PFont f;      // переменна для шрифта

void setup()
{
 size(500,500);                        // создаем окно 500 на 500 px 
 f = createFont("Colibri", 15,true);   // определяем шрифт для данного окна
 port = new Serial(this, "COM5", 9600); // задаем параметры порта, у меня он пятый
}

void draw()
{
 // создаем окно
 background(0, 0, 0);   // черный бэкграунд для окна
 textFont(f,200);       // создаем текст
 text(value-1,200,300); // выводим в центр значение переменной value
}

void keyPressed() {
  // обрабатываем нажатия клавиш
  // переменная value сдвинута от нулевой позиции на 2, чтоб не загонять ее в минус
    if (keyCode == LEFT) {         // при нажатии клавиши влево
      value = value + 1;           // увеличиваем значение value на 1
      if ( value > 4 ) value=2;    // если она оказывается вне пределов третьего светодиода - сбрасываем значение в 2
      port.write(value-2);         // и отправляем это значение в COM-порт
    } else if (keyCode == RIGHT) { // при нажатии клавиши вправо
      value = value - 1;           // уменьшаем значение value на 1
      if ( value < 2 ) value=4;    // если она оказывается вне пределов первого светодиода - сбрасываем значение в 4 >
      port.write(value-2);         // и отправляем это значение в COM-порт
    } 
   else {  }                       // в остальных случаях ничего не делаем
  
}

Все относительно просто. Программа на компьютере передает цифровые значения в Com-порт, Arduino гасит текущий светодиод и зажигает светодиод с номером пришедшем через порт.

  6 комментариев to “Управление Arduino с компьютера”

  1. При запуске из Proceesing сообщает, что не работает с 64 разрядным портом.

  2. Владимир, в скетче процессинг Вы явно указываете что ардуина подключена к СОМ5. может быть Вы знаете как сделать так чтобы программа сама определяла к какому СОМ порту подкл устройство, ведь такой не будет без изменений работать на другом компе?

  3. Hi there, all is going fine here and ofcourse
    every one is sharing information, that’s really excellent, keep up writing.

    My blog post bonus pari sportif

  4. Hello Falta, merci d’avoir pris le temps de poster ton commentaire, n’hésites pas à revenir régulièrement échanger sur ce blog qui est fait pour ce,&;#8230aAmicalementlStéphane Colle

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)