я исполюзую примеры алекса гайвера , и не могу понять почему некорректно отправляются данные с ардуино мега на процессинг , уже целый день убил и никак ,
вот скетч на процессинге
а вот скетч ардуино
в результате на порт ардуино выводится всё правильно переменная изменяется а вот на порте процессинга не изменяется , помогите плиз
вопрос в том почему в процессинге не изменяются переменные пакета
опозданием
вот скетч на процессинге
C++:
// ====================================
// БАЗОВЫЙ ПРИМЕР ДЛЯ ОБЩЕНИЯ С АРДУИНО
// ====================================
int speed = 115200;
import processing.serial.*;
Serial serial;
import controlP5.*;
ControlP5 cp5;
String portName; // имя порта
boolean skip = true;
void setup() {
size(400, 400); // размер окна
setupGUI(); // инициализация интерфейса
}
void draw() {
background(120); // заливаем фон
parsing(); // парсим
// для удобной отправки пакетов можно юзать sendPacket(ключ,"дата1,дата2,дата3")
// например sendPacket(5, "255,255,255") - отправить три значения по ключу 5
}
// функция для отправки пакета на арду
void sendPacket(int key, String data) {
if (serial != null) serial.write(str(key) + ',' + data + ';');
// отправит "key,data;"
}
// функция парсинга, опрашивать в лупе
void parsing() {
// если порт открыт и в буфере что то есть
if (serial != null && serial.available() > 0) {
String str = serial.readStringUntil('\n').trim(); // читаем строку до \n и подрезаем
String data[] = str.split(","); // разбиваем строку
//int[] data = int(split(str, ',')); // парсить можно сразу в int[]!
if (skip) {
skip = false;
return; // пропускаем первый пакет
}
switch (int(data[0])) { // свитч по ключу
case 0:
print((data[1]));
break;
case 1:
break;
case 2:
break;
}
}
}
// ======= ИНИЦИАЛИЗАЦИЯ ИНТЕРФЕЙСА ========
void setupGUI() {
cp5 = new ControlP5(this);
cp5.setFont(createFont("Calibri", 16)); // сделаем шрифт побольше
// выпадающий список
cp5.addScrollableList("com")
.setPosition(10, 10)
.setSize(80, 100)
.setBarHeight(30)
.setItemHeight(30)
.close()
.addItems(Serial.list());
;
// добавляем кнопки
cp5.addButton("open").setPosition(90, 10).setSize(80, 30);
cp5.addButton("close").setPosition(170, 10).setSize(80, 30);
}
// ==== ОБРАБОТЧИКИ ИНТЕРФЕЙСА =====
// список портов
void com(int n) {
portName = Serial.list()[n]; // запоминаем выбранный порт в portName
}
// кнопка открыть порт
void open() {
if (portName != null && serial == null) { // если выбран порт и сейчас он закрыт
serial = new Serial(this, portName, speed); // открываем portName
skip = true; // флаг на пропуск первого пакета
}
}
// кнопка закрыть порт
void close() {
if (serial != null) { // если порт открыт
serial.stop(); // закрываем portName
serial = null; // serial выключен
}
}
а вот скетч ардуино
C++:
// =======================================
// БАЗОВЫЙ ПРИМЕР ДЛЯ ОБЩЕНИЯ С ПРОЦЕССИНГ
// =======================================
#include "Parser.h" // библиотека парсера
#include "AsyncStream.h" // асинхронное чтение сериал
AsyncStream<50> serial(&Serial, ';'); // указываем обработчик и стоп символ
#define kin4 4
void setup() {
Serial.begin(115200);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(7, OUTPUT);
pinMode(kin4, INPUT_PULLUP); // назначить выводу порт ввода підтяжка
}
void loop() {
parsing();
int stanKin4= digitalRead(kin4);
// для отправки нескольких интов используй
int packet[3];
packet[0] = stanKin4;
packet[1] = 2;
packet[2] = 3;
if (stanKin4 == 0) {
packet[0] = 0;
sendPacket(0, packet, 3);
}
if (stanKin4 == 1) {
packet[0] = 4;
sendPacket(0, packet, 3);
}
}
// функция для отправки пакета на ПК
void sendPacket(int key, int* data, int amount) {
Serial.print(key);
Serial.print(',');
for (int i = 0; i < amount; i++) {
Serial.print(data[i]);
if (i != amount - 1) Serial.print(',');
}
Serial.print('\n');
}
// функция парсинга, опрашивать в лупе
void parsing() {
if (serial.available()) {
Parser data(serial.buf, ','); // отдаём парсеру
int ints[10]; // массив для численных данных
data.parseInts(ints); // парсим в него
switch (ints[0]) { // свитч по ключу
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
}
}
}
вопрос в том почему в процессинге не изменяются переменные пакета
похоже в буфер данные приходят с большимвопрос в том почему в процессинге не изменяются переменные пакета
опозданием