Отправка 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, я вижу:

, 👍1

Обсуждение

пожалуйста, добавьте снимок последовательного монитора с данными, которые вы отправляете., @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


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