Ничто не отправляется в Arduino из обработки

У меня есть проблема, когда я знаю,что мой модуль bluetooth (HC-05) подключен к обрабатывающему скетчу, но из обрабатывающего скетча никогда ничего не отправляется, почему?

Никаких сообщений об ошибках, но информация никогда не передается, потому что я никогда не вижу ее в Arduino, где она будет напечатана на последовательном мониторе.

Полный Код Обработки:

import processing.serial.*;
import controlP5.*;

Serial myPort;
ControlP5 cp5;

int slider1 = 0;
int slider2 = 0;
int slider3 = 0;

void setup() {


  size(800, 800);
  cp5 = new ControlP5(this);
  PFont roboto = createFont("Roboto-Bold.ttf", 1, true);
  ControlFont font = new ControlFont(roboto, 28);
  Controller Aslider1 = cp5.addSlider("slider1")
    .setPosition(85, 100)
    .setCaptionLabel("Red")
    .setRange(0, 255)
    .setWidth(191)
    .setHeight(50);
  cp5.getController("slider1").getValueLabel().setFont(font).align(ControlP5.LEFT, ControlP5.BOTTOM_OUTSIDE).setPaddingX(0);
  cp5.getController("slider1").getCaptionLabel().setFont(font).align(ControlP5.RIGHT, ControlP5.BOTTOM_OUTSIDE).setPaddingX(0);

  Controller Aslider2 = cp5.addSlider("slider2")
    .setPosition(301, 100)
    .setCaptionLabel("Green")
    .setRange(0, 255)
    .setWidth(191)
    .setHeight(50);
  cp5.getController("slider2").getValueLabel().setFont(font).align(ControlP5.LEFT, ControlP5.BOTTOM_OUTSIDE).setPaddingX(0);
  cp5.getController("slider2").getCaptionLabel().setFont(font).align(ControlP5.RIGHT, ControlP5.BOTTOM_OUTSIDE).setPaddingX(0);

  Controller Aslider3 = cp5.addSlider("slider3")
    .setPosition(517, 100)
    .setCaptionLabel("Blue")
    .setRange(0, 255)
    .setWidth(191)
    .setHeight(50);
  cp5.getController("slider3").getValueLabel().setFont(font).align(ControlP5.LEFT, ControlP5.BOTTOM_OUTSIDE).setPaddingX(0);
  cp5.getController("slider3").getCaptionLabel().setFont(font).align(ControlP5.RIGHT, ControlP5.BOTTOM_OUTSIDE).setPaddingX(0);


  myPort = new Serial(this, "COM5", 9600);
}


void draw() {
  background(255, 100, 100);

  fill(255);
  stroke(1);
  rectMode(CENTER);
  rect(width/2, 350, 200, 75);

  fill(0);
  textSize(32);
  text("Send", width/2 - textWidth("Send") / 2, 350 + 10);

  if (mouseX > width/2 - 100 && mouseX < width/2 + 100 && mouseY > 350 - 75/2 && mouseY < 350 + 75/2) {
    if (mousePressed) {
      fill(100);
      stroke(1);
      rectMode(CENTER);
      rect(width/2, 350, 200, 75);

      fill(0);
      textSize(32);
      text("Send", width/2 - textWidth("Send") / 2, 350 + 10);
    } else {
      fill(170);
      stroke(1);
      rectMode(CENTER);
      rect(width/2, 350, 200, 75);

      fill(0);
      textSize(32);
      text("Send", width/2 - textWidth("Send") / 2, 350 + 10);
    }
  }
}

void mouseReleased() {
  if (mouseX > width/2 - 100 && mouseX < width/2 + 100 && mouseY > 350 - 75/2 && mouseY < 350 + 75/2) {
    fill(100);
    stroke(1);
    rectMode(CENTER);
    rect(width/2, 350, 200, 75);

    fill(0);
    textSize(32);
    text("Send", width/2 - textWidth("Send") / 2, 350 + 10);

    println(hex(color(int(slider1), int(slider2), int(slider3))).toString().substring(2));
    myPort.write(hex(color(int(slider1), int(slider2), int(slider3))).toString().substring(2));
    myPort.clear();
  }
}

Полный Код Arduino:

#include <SoftwareSerial.h>
#include <Adafruit_NeoPixel.h>

const int PIN = 6;
const int NUMPIXELS = 30;

const byte rxPin = 2;
const byte txPin = 3;
SoftwareSerial mySerial (rxPin, txPin);

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

unsigned long currentMillis;
unsigned long loopMillis;
unsigned long waitMillis;
int interval = 100;
int waitInterval = 0;
int redBrightness = 0;
int greenBrightness = 0;
int blueBrightness = 0;
bool wait = false;
bool goToRed = true;
bool goToOrange = false;
bool goToYellow = false;
bool goToGreen = false;
bool goToAqua = false;
bool goToPurple = false;

String hexValue;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  mySerial.begin(9600);
  pixels.begin();
  pixels.show();
}

void loop() {

  if (mySerial.available() > 0) {
    hexValue = mySerial.read();
    Serial.println(hexValue);
    if (hexValue != "shiftN" || hexValue != "shiftY") {
      shiftMode = false;
      // value is a hex
      redBrightness = hexValue.substring(0, 2).toInt();
      greenBrightness = hexValue.substring(2, 4).toInt();
      greenBrightness = hexValue.substring(4, 6).toInt();
    } else {
      if (hexValue = "shiftY") {
        shiftMode = true;
      } else {
        shiftMode = false;
      }
    }
  }

  pixels.show();

  setColor(redBrightness, greenBrightness, blueBrightness);

}

void setColor(int red, int green, int blue) {
  for (int i = 0; i < NUMPIXELS; i++) {
    pixels.setPixelColor(i, red, green, blue);
  }
}

Спасибо за помощь, ура!

https://discourse.processing.org/t/nothing-gets-sent-to-arduino-from-processing/13654

https://stackoverflow.com/posts/57679763/edit

, 👍1

Обсуждение

откуда вы знаете, что модуль подключен к обработке?, @jsotola

@jsotal он дважды мигает, а затем повторяется, @BeastCoder2


1 ответ


0

Часть проблемы связана со скетчем Arduino, где вы анализируете "входную строку" в целочисленные переменные. В цикле () есть 2 переменныепрямолинейности, где вам, вероятно, нужна переменная прямолинейности.

Я смог заставить скетч обработки работать после жесткого кодирования в правильном последовательном порту для моей ОС, но был остановлен при создании шрифта. Возможно, вы могли бы использовать блок try catch при попытке создать пользовательский шрифт (на моем компьютере он не установлен). Если блок "Попытка" завершится неудачно, что-то вроде шрифта "Грузия" или"Гельветика" выполнит PFont roboto = CreateFont ("Грузия", 1, true);.

Я не совсем уверен, как у вас реализован программный материал. Вы используете второй преобразователь USB в последовательный? Чтобы обойти это, я подключил ЖК-дисплей I2C к Arduino Uno для отображения полученных данных и просто использовал аппаратное последовательное устройство для извлечения данных из обработки.

Вот тут-то все и стало интересным. Когда я установил 3 ползунка в приложении обработки на 0, на ЖК-дисплее появилось 048 для каждой из "цветовых переменных" плюс немного ненужных данных.

У меня нет окончательного ответа относительно того, почему данные повреждены, но это та область кода Arduino, на которую нужно обратить внимание.

,

У вас должен быть файл Roboto-Bold.ttf в папке данных с именем "данные" в каталоге программы. Я использую HC-05, как указано выше, с Bluetooth, @BeastCoder2

это прекрасно работает для меня, когда я делаю 0 0 0 для значений, он просто показывает 000000, @BeastCoder2