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

Связь Arduino и Processing, через Serial (часть 2 - неофициальная)

Тема в разделе "Processing", создана пользователем monitorrr, 10 янв 2016.

  1. monitorrr

    monitorrr В доску свой

    Сообщения:
    331
    Симпатии:
    94
    Род занятий:
    инженер сервиса
    Адрес:
    Алматы
    Доброго времени суток.
    В первой части был поднят вопрос:
    На просторах интернета нашелся ответ:
    Allows "plug and play" serial communication between Processing and Arduino or other serial devices.
    Расскажу как мне удалось реализовать это решение. Буду приводить на примере схемы которая собрана у меня:
    4444444444.jpg
    Задача простая:
    1) При нажатии на кнопку, выводим на LCD сообщение например ">>edenica<<" и на ПК в окошке кружочек поменяет цвет.
    2)Когда кнопка не нажата - ">>null<<" и у кружочка на ПК другой цвет.
    Код для Ардуино FLProg:
    Код:
    #include <LiquidCrystal.h>
    LiquidCrystal _lcd1(2, 3, 4, 5, 6, 7);
    int _dispTempLength1=0;
    boolean _isNeedClearDisp1;
    
    bool _gtv1 = 0; //состояние кнопки
    bool _bounse1S = 0;
    bool _bounse1O = 0;
    unsigned long _bounse1P = 0UL;
    int _disp1oldLength = 0;
    String _swi1;
    bool _stou1;
    bool _swi2;
    void setup()
    {
    Serial.begin(9600);
    pinMode(8, INPUT);
    
    _lcd1.begin(16, 2);
    }
    void loop()
    {if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}
    
    
    
    
    bool  _bounceTmp1 =  (digitalRead (8));
    
    if (_bounse1S)
        {
         if (millis() >= (_bounse1P + 40))
             {_bounse1O= _bounceTmp1; _bounse1S=0;}
         }
    else
        {
         if (_bounceTmp1 != _bounse1O )
             {_bounse1S=1; _bounse1P = millis();}
          }
    if (1) {
    _dispTempLength1 = ((((String(">>")) + (_swi1) + (String("<<"))))).length();
    if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
    _disp1oldLength = _dispTempLength1;
    _lcd1.setCursor(int((16 - _dispTempLength1)/2), 0);
    _lcd1.print((((String(">>")) + (_swi1) + (String("<<")))));
    } else {
    if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
    }
    if(_gtv1)
    {_swi1=String("edenica");}
    else
    {_swi1=String("null");}
    if(_gtv1)
    {_swi2=1;}
    else
    {_swi2=0;}
    _gtv1 = _bounse1O;
    if (1){if(!(( _swi2)==(_stou1))){Serial.print(_swi2);}} _stou1 = _swi2;
    
    
    
    
    }
    Блок схема FLProg:
    55555555.jpg
    Теперь перейдем к самому Процессингу, создаем скетч и в скетчбокс (папка в которой сохранили наш скетч) копируем SerialConnection.pde из архива autoserialp5-master.zip (добавил к теме, если кому лень качать с github.com). При запуске нашего скетча должно получиться так:
    666666666.jpg
    Затем вставляем код по совету автора в Процессинг:
    Код:
    import processing.serial.*;
    
    SerialConnection serialConnection;
    
    void setup()
    {
        //Choose the correct baud rate for your serial device, in this example we use 9600
        serialConnection = new SerialConnection(this, 9600);
    }
    
    void draw()
    {
        serialConnection.startSerialCommunication();
        if(serialConnection.isReady)
        {
            //Do something
        }
    }
    И дописываем наши действия, которые требуются по условию задачи:
    Код:
    import processing.serial.*;
    
    SerialConnection serialConnection;
    String inString;
    int val;
    
    void setup()
    {
        //Choose the correct baud rate for your serial device, in this example we use 9600
        serialConnection = new SerialConnection(this, 9600);
        size (100, 100);
    }
    
    void draw()
    {
        serialConnection.startSerialCommunication();
        if(serialConnection.isReady)
        {
       
               background(0, 150, 120);
              
              if (val == 0)
              {
              fill(50, 50, 180);
              }
              else
              {
              fill(200, 120, 50);
              }
             
               ellipse(width/2, height/2, width, height);
            //Do something
       
        }
    }
    void serialEvent(Serial p)
    {
      inString = p.readString();
      val = int(inString);
      print(val);
    }
    Один важный момент прежде проверки кода - последовательность действий:
    1) Запускаем скетч Процессинга 1111111.jpg
    2) Подключаем Ардуину к ПК 22222.jpg
    3) Нажимаем кнопку 3333333333.jpg
    Если Ардуино уже подключен к ПК программа не увидит подключения: 77777777777.jpg
    Чуть не забыл, у меня же подключен еще LCD дисплей - работает без проблем:
    P1310291.JPG P1310295.JPG P1310299.JPG
    Большое спасибо за разъяснения и помощь Ater - с форума Процессинга и radioengineer - нашего многоуважаемого админа, за предоставленную Ардуинку!

    Вложения:

    koteika и radioengineer нравится это.
     
    : processing, arduino, com, serial
  2. koteika

    koteika В доску свой

    Сообщения:
    783
    Симпатии:
    120
    Род занятий:
    программирование
    Изучение идет полным ходом?)
  3. .ctor

    .ctor В доску свой

    Сообщения:
    712
    Симпатии:
    200
    Род занятий:
    парогенератор
    Адрес:
    Алматы
    А для чего этот процессинг нужен вообще?
    Дмитрий BASIC нравится это.
  4. koteika

    koteika В доску свой

    Сообщения:
    783
    Симпатии:
    120
    Род занятий:
    программирование
    Делать красивые визуализации. Программы.
  5. monitorrr

    monitorrr В доску свой

    Сообщения:
    331
    Симпатии:
    94
    Род занятий:
    инженер сервиса
    Адрес:
    Алматы
    Да, затянуло, даже танки забросил)))
    --- Сообщения объединены, 11 янв 2016 ---
    Для меня это как вариант визуализации некоторых процессов за которыми будет следить ардуино.
  6. koteika

    koteika В доску свой

    Сообщения:
    783
    Симпатии:
    120
    Род занятий:
    программирование
    на процесинге можно под андроид писать даже)
  7. .ctor

    .ctor В доску свой

    Сообщения:
    712
    Симпатии:
    200
    Род занятий:
    парогенератор
    Адрес:
    Алматы
    Чего только не придумают..
  8. koteika

    koteika В доску свой

    Сообщения:
    783
    Симпатии:
    120
    Род занятий:
    программирование
    Достаточно серьезна я штука. Демо ролики можно глянуть тут

Поделиться этой страницей