Отправка mouseX и mouseY из обработки в Arduino
Я новичок в последовательной связи и пытаюсь отправить mouseX
и mouseY
из обработки в Arduino. Серийный монитор ничего не показывает.
Код обработки:
import processing.serial.*;
Serial port;
void setup() {
size(500,300);
port = new Serial(this , Serial.list()[0], 9600);
}
void draw() {
text("X Y mouse",250,50);
if (port.available() > 0) {
port.write(str(mouseX)+' '+str(mouseY));
}
}
Код Arduino:
int x = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
x = Serial.read();
Serial.print("I received: ");
Serial.println(x);
}
}
Когда я закрываю окно «Обработка» и ввожу «ОК» в последовательном мониторе Arduino, я вижу:
@2012User, 👍1
Обсуждение1 ответ
Лучший ответ:
Поскольку вы не можете использовать последовательный монитор, чтобы «видеть» входящие данные от обработки, вот два тестовых скетча, которые могут помочь вам определить, получены ли данные на Arduino.
Сначала загрузите скетч Arduino. Оставьте последовательный монитор закрытым. Теперь запустите скетч «Обработка».
Я использую frameRate(1)
в скетче «Обработка» для отправки данных раз в секунду, поэтому значения X/Y мыши в окне «Обработка» будут обновляться медленно.
Вы должны увидеть, как светодиод на Arduino начнет мигать, а затем быстро погаснет по мере получения данных. Если у вас есть ЖК-дисплей I2C, вы можете подключить его к Arduino и распечатать входящие данные.
Как отмечает Крисл в комментариях, еще предстоит проделать большую работу, чтобы получить необработанные данные в нужном вам формате.
Ардуино
int x = 0;
const byte ledPin = 2;
void setup(){
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop(){
if(Serial.available() > 0){
x = Serial.read();
digitalWrite(ledPin, HIGH);
}
else{
digitalWrite(ledPin, LOW);
}
}
Обработка
import processing.serial.*;
Serial port;
void setup() {
size(500,300);
background(148);
try{
port = new Serial(this , Serial.list()[0], 9600);
}
catch(Exception e){
System.err.println(e);
e.printStackTrace();
}
frameRate(1);
}
void draw() {
background(148);
//@chrisl comment: Finish your data, that you send with \n (newline).
port.write(str(mouseX)+' '+str(mouseY) + "\n");
text(mouseX,250,50);
text(mouseY,250,70);
}
Вот второй скетч Arduino, который будет отображать значения X/Y мыши, отправленные из обработки, на ЖК-дисплее. Вы можете изменить значение frameRate()
скетча «Обработка» на 10.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
char inputBuffer[32 + 1];
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup(){
Serial.begin(9600);
lcd.init();
lcd.backlight();
}
void loop(){
if(Serial.available() > 0){
lcd.print(" ");
Serial.readBytesUntil('\n', inputBuffer, 32);
lcd.setCursor(0, 0);
lcd.print(inputBuffer);
memset(inputBuffer, 0, sizeof(inputBuffer));
}
}
фантастика! Я собираюсь узнать больше о ЖК-дисплеях. Однажды я использовал ЖК-дисплей с параллельным подключением... это было утомительно., @2012User
Если припаять к ЖК-дисплею плату последовательного интерфейса или I2C LCD «рюкзак», то для подключения останется всего 4 провода :) https://www.aliexpress.com/item/IIC-I2C-TWI-SPI-Serial-Interface -Board-Port-For-Arduino-1602-2004-LCD-LCD1602-Adapter-Plate/32895120140.html, @VE7JRO
- Отправка информации (например, строки) через цифровые контакты
- Как отправить 2 данных на обработку с Arduino
- Справка по последовательному входу
- Почему номера COM-портов между Arduino и Processing не совпадают?
- ОБНОВЛЕНИЕ: ошибка в коде обработки - не получает правильные данные от Arduino
- Два адруино подключены к малине по usb, но один переподключается во время выполнения кода обработки
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
пожалуйста, добавьте снимок последовательного монитора с данными, которые вы отправляете., @Vaibhav
https://majko.co.uk/blog/reading-serial-arduino, @Majenko
Только одна программа на вашем компьютере может одновременно обмениваться данными через последовательный порт. Когда к нему подключена обработка, Serial Monitor не работает и наоборот., @chrisl
@Vaibhav Показать нечего... к сожалению., @2012User
@chrisl, если это означает, что я не могу использовать последовательный монитор. Могу ли я использовать данные mouseX и mouseY в своей программе для Arduino?, @2012User
Конечно, вы можете использовать положение мыши на Arduino. Вы должны отправить их на него через последовательный порт, и код Arduino должен правильно его декодировать. В настоящее время вы отправляете строку ASCII, но декодируете ее как байтовые данные. Завершите отправку данных с помощью \n (новая строка). На Arduino прочитайте все сообщение, пока не получите \n, и поместите все полученные байты в строку (или, лучше, в массив символов). Затем вы можете использовать функции для преобразования строки в целые числа., @chrisl