Wolf_Yout
@Wolf_Yout

Хочу сделать связь между processing и esp, но есть проблема, как решить?

Код на процессинге
import controlP5.*;
import hypermedia.net.*;

ControlP5 cp5;
UDP udp;

String ip = "192.168.0.5";
int port = 8888;

void setup() {
  size(300, 500);
  udp = new UDP( this, port );
  udp.listen(true);
  cp5 = new ControlP5(this);
  cp5.setFont(createFont("Ubuntu", 10));
  
  // Питание гирлянды
  cp5.addToggle("power_changed")
    .setPosition(10, 10)
    .setSize(40, 20)
    .setLabel("Питание")
    .setMode(ControlP5.SWITCH);
    
  cp5.addSlider("brightness_changed")
    .setPosition(10, 60)
    .setLabel("Яркость")
    .setSize(100, 20)
    .setValue(255)
    .setRange(0, 255);
    
  cp5.addSlider("speed_changed")
    .setPosition(10, 100)
    .setLabel("Скорость эффекта")
    .setSize(100, 20)
    .setValue(75)
    .setRange(0, 100);
}

void draw() {
  background(30);
}

void power_changed(boolean pwr) {
  pwr = !pwr;
  String pack = "power " + str(pwr);
  udp.send( pack, ip, port );
}

void brightness_changed(int bright) {
  String pack = "brightness " + str(bright);
  udp.send( pack, ip, port );
}

void speed_changed(int speed) {
  String pack = "speed " + str(speed);
  udp.send( pack, ip, port );
}


Код с ардуино(отрезок)
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
unsigned int localPort = 8888;

void setup() {
    udp.begin( localPort );
}

void udp_tick() {
  int packetSize = udp.parsePacket();
  if (packetSize) {
    udp.read( packetBuffer, UDP_TX_PACKET_MAX_SIZE );
    Serial.println(packetBuffer);
  }
}

если нажимать на ползунки и кнопки в процессинге, то
.
.
192.168.0.5power false
power truee
power false
brightness 71
brightness 211
speed 18ss 211
speed 97ss 211

Как я понимаю, новый текст накладывается на старый. Как это решить?
  • Вопрос задан
  • 49 просмотров
Пригласить эксперта
Ответы на вопрос 1
Думаю проблема на стороне ардуины.
udp.read( packetBuffer, UDP_TX_PACKET_MAX_SIZE );
Этот код кладет в массив packetBuffer столько байт, сколько пришло. А что происходит с содержимым массива? Если его не очищать, то остатки предыдущего сообщения будут продолжать в нем храниться. Попробуйте очищать массив перед приемом нового пакета, должно помочь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы