Ничто не отправляется в 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
@BeastCoder2, 👍1
Обсуждение1 ответ
Часть проблемы связана со скетчем 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
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Сбросьте HC-05 из скетча Arduino
- модуль Bluetooth HC-05; два последовательных порта, COM4 и COM5
- Я получаю неправильное сообщение при отправке сообщения между двумя ардуино
- Arduino Pro Micro, получить данные с контакта Tx?
- Проблемы с надежным подключением с использованием HC-05 в качестве ведущего устройства Bluetooth
- Bluetooth-модуль HC-05 неправильно считывает данные с моего телефона Android
- Мой модуль Bluetooth HC-05 не работает
откуда вы знаете, что модуль подключен к обработке?, @jsotola
@jsotal он дважды мигает, а затем повторяется, @BeastCoder2