Покажу простой пример связи ардуино и пк. Для этого будем использовать Processing(2.0.1 32 битная версия, Serial не может в 64), Arduino IDE, сама платка и потенциометр. Подключение.. ну прям предельно простое Код для Arduino IDE: Код: int potPin = 0; // указываем порт, куда подцепили потенциометр void setup() { Serial.begin(9600); // запускаем наш сериал } void loop() { int val = map(analogRead(potPin), 0, 1023, 0, 255); // гуглим "arduino map". С пина получаем 0-1023, на выходе необходимо 0-255, сразу обрабатываем с помощью мк(можно и в процессинге было) и записываем в переменную val Serial.println(val); //выводим в порт значение переменной val. Обрати внимание! Serial.println а не print. т.к. в таком случае выводится необходимый нам '\n' delay(50); } Загружаем этот код на наш контроллер, и переходим к процессингу. Код для Processing: Код: import processing.serial.*; Serial port; float input = 0; void setup() { size(400, 400); port = new Serial(this, "COM3", 9600); //активируем наш порт port.bufferUntil('\n');//считываем значение строки до символа '\n' - это переход на новую строку } void draw() // основной цикл отрисовки { background(0,input,0);//догадались что будет делать input? float rect = map(input, 0, 255, 0, 370); rect(15,200,rect,30); } void serialEvent (Serial port) { input = float(port.readStringUntil('\n')); //считываем с порта значение и записываем в переменную input } 1. Загружаем код на ардуино 2. Подключаем к пк 3. Запускаем код в processing 4. Крутим потенциометр 5. Крутим потенциометр 6. Офигеваем
Доброго времени суток! Попробовал адаптировать под кнопку. Жмем кнопку и получаем градацию 0-64-128-192-255-0. Схема подключения: Результат: хотел видео выложить - ютуб чет сегодня тупит. Выложил файл для FLProg - мигаем фоном.rar Код сгенерированый в FLProg: Код: bool _gtv1 = 0; //сброс bool _bounse1S = 0; bool _bounse1O = 0; unsigned long _bounse1P = 0UL; bool _count1I = 0; int _count1P = 0; int _mux1; int _stou1; bool _bounseInput8S = 0; bool _bounseInput8O = 0; unsigned long _bounseInput8P = 0UL; void setup() { Serial.begin(9600); pinMode(8, INPUT); digitalWrite(8, HIGH); _bounseInput8O = digitalRead(8); } void loop() { bool _bounceTmp8 = (digitalRead (8)); if (_bounseInput8S) { if (millis() >= (_bounseInput8P + 40)) {_bounseInput8O= _bounceTmp8; _bounseInput8S=0;} } else { if (_bounceTmp8 != _bounseInput8O ) {_bounseInput8S=1; _bounseInput8P = millis();} } bool _bounceTmp1 = _bounseInput8O; if (_bounse1S) { if (millis() >= (_bounse1P + 40)) {_bounse1O= _bounceTmp1; _bounse1S=0;} } else { if (_bounceTmp1 != _bounse1O ) {_bounse1S=1; _bounse1P = millis();} } if (_bounse1O) { if (! _count1I) { _count1P = _count1P+1; _count1I = 1; } } else { _count1I=0; } if (_gtv1) _count1P = 0; if((_count1P) == 0) {_mux1 = 0;} if((_count1P) == 1) {_mux1 = 64;} if((_count1P) == 2) {_mux1 = 128;} if((_count1P) == 3) {_mux1 = 192;} if((_count1P) == 4) {_mux1 = 255;} _gtv1 = _count1P >= 5; if (1){if(!(( _mux1)==(_stou1))){Serial.println(_mux1);}} _stou1 = _mux1; } Ну и для тех кто не хочет качать FLProg скрин блок схемы: В коде примера от Процессинга поменял только номер СОМ порта - у меня 18. В целом все понятно, в примере мы с Ардуино отправляем данные на ПК. Жду примера отправки команд на Ардуино.
Вопрос: как быть если я захочу скомпилировать в процессенге исполнительный файл, там жестко указан мой СОМ порт, а я запущу на другом компе, где процессинга нет.
Интересный вопрос. Надо подумать) может что то вроде этого использовать: Код: // I know that the first port in the serial list on my mac // is Serial.list()[0]. // On Windows machines, this generally opens COM1. // Open whatever port is the one you're using. String portName = Serial.list()[0]; //change the 0 to a 1 or 2 etc. to match your port myPort = new Serial(this, portName, 9600); Либо поочерёдно отправлять ping на каждый порт и ждать pong ))
Доброго времени суток! Обязательно вечером попробую. Только смущает одно обстоятельство, вычитал в одном из примеров: Код: import processing.serial.*; Serial port; // Создание объекта класса Serial float val; // Данные, полученные из последовательного порта void setup() { size(440, 220); // [U]Важное замечание[/U]: // Первым последовательным портом, указанном в Serial.list() // должна быть ваша Arduino. Если это не так, удалите // в // в следующей строке. Запустите скетч заново и просмотрите // список последовательных портов. Затем запишите вместо 0 // между символами [ и ] номер порта, к которому подключена // ваша плата Arduino. //println(Serial.list()); String arduinoPort = Serial.list()[0]; port = new Serial(this, arduinoPort, 9600); } void draw() { if (port.available() > 0) { // Если данные доступны, val = port.read(); // они считываются в val val = map(val, 0, 255, 0, height); // Преобразование величины } rect(40, val-10, 360, 20); } На самом процессинге нашел несколько примеров, там везде так, без указания номера COM порта: Код: // Read data from the serial port and change the color of a rectangle // when a switch connected to the board is pressed and released import processing.serial.*; Serial port; // Create object from Serial class int val; // Data received from the serial port void setup() { size(200, 200); frameRate(10); // Open the port that the board is connected to and use the same speed (9600 bps) port = new Serial(this, 9600); } void draw() { if (0 < port.available()) { // If data is available, val = port.read(); // read it and store it in val } background(255); // Set background to white if (val == 0) { // If the serial value is 0, fill(0); // set fill to black } else { // If the serial value is not 0, fill(204); // set fill to light gray } rect(50, 50, 100, 100); } Немного порыл на форуме самого процессинга: Plug & play serial communication Думаю то что нужно. Скачал библиотеку, а подключить не смог.
В моем случае сработал вот такой вариант: Код: String portName = Serial.list()[1]; port = new Serial(this, portName, 9600); у меня на компе под №0 - реальный СОМ1 Мне вот что подумалось - со всеми приложениями с которыми мне приходилось работать СОМ порт автоматически не выбирался. Думаю делать автоматическое определение СОМ порта не такая и простая задача. Как реализовать на процессинге выбор СОМ порта: например такие, сделал несколько скринов.