Доброго времени суток. В первой части был поднят вопрос: На просторах интернета нашелся ответ: Allows "plug and play" serial communication between Processing and Arduino or other serial devices. Расскажу как мне удалось реализовать это решение. Буду приводить на примере схемы которая собрана у меня: Задача простая: 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: Теперь перейдем к самому Процессингу, создаем скетч и в скетчбокс (папка в которой сохранили наш скетч) копируем SerialConnection.pde из архива autoserialp5-master.zip (добавил к теме, если кому лень качать с github.com). При запуске нашего скетча должно получиться так: Затем вставляем код по совету автора в Процессинг: Код: 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) Запускаем скетч Процессинга 2) Подключаем Ардуину к ПК 3) Нажимаем кнопку Если Ардуино уже подключен к ПК программа не увидит подключения: Чуть не забыл, у меня же подключен еще LCD дисплей - работает без проблем: Большое спасибо за разъяснения и помощь Ater - с форума Процессинга и radioengineer - нашего многоуважаемого админа, за предоставленную Ардуинку!
Да, затянуло, даже танки забросил))) --- Сообщения объединены, 11 янв 2016 --- Для меня это как вариант визуализации некоторых процессов за которыми будет следить ардуино.