Arduino - Обработка двунаправленной связи не может получать данные через последовательный порт - PullRequest
1 голос
/ 22 апреля 2020

Я пытаюсь связать arduino с java, используя jss c. Просто для тестирования я пытаюсь получить данные на Arduino и отправить обратно на P C, довольно просто. Проблема в том, что доска, кажется, не получает его. Когда код для Arduino просто отправить, работает нормально, но он просто не может получить никаких данных. Сначала я подумал, что проблема в jss c, поэтому я изменил свое приложение на «Обработка», та же проблема. Я даже пытаюсь сменить плату, без разницы, плата в порядке, и она может нормально общаться с Arduino Serial Monitor. Поэтому моя проблема должна быть Java и код обработки. Я знаю, что это очень простая проблема, и мне стыдно за то, что я опубликовал это, должно быть, очень простая проблема, которая прошла мимо меня.

Еще одна вещь, никаких ошибок вообще не отображается

Java код:

public class ArduinoTest{
    public static void main(String[] args) throws SerialPortException, InterruptedException {
        SerialPort serialPort = new SerialPort("COM6");
        serialPort.openPort();
        serialPort.setParams(SerialPort.BAUDRATE_9600,
                SerialPort.DATABITS_8,
                SerialPort.STOPBITS_1,
                SerialPort.PARITY_NONE);
        int i;
        serialPort.writeBytes("a".getBytes());
        while(true){
            a=serialPort.readBytes(1);
            i = a[0] & 0xff;
            System.out.println(i);
        }
    }
}

Код обработки:

import processing.serial.*;

Serial port;
int r;
void setup(){
  port = new Serial(this, "COM6", 9600);
  port.write(1);
}
void draw(){
  if(port.available()>0){
    r = port.read();
    println(r);
  }
}

Код Arduino:

int r1=0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  if(Serial.available() > 0){
    r1 = Serial.read();
    Serial.write(r1);
  }
}

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

Вот рабочий код связи для Arduino:

const int led_pin = 13;    // Initializing the LED pin internal led
String char_output = "";   // Declaring a variable for output


void setup ( ) {
  pinMode(led_pin, OUTPUT); // Declaring the LED pin as output pin
  Serial.begin(9600);       // Starting the serial communication at 9600 baud rate

}

void loop ( ) {


  if (Serial.available ( ) > 0) {   // Checking if the Processing IDE has send a value or not

    char state = Serial.read ( );    // Reading the data received and saving in the state variable

    if (state == '1')  {          // If received data is '1', then turn on LED
      digitalWrite (led_pin, HIGH);
      char_output = "Led on";
    }

    if (state == '0') {     // If received data is '0', then turn off led
      digitalWrite (led_pin, LOW);
      char_output = "Led off";
    }
  }

  delay(50);
  Serial.println (char_output);     // Sending the output to Processing IDE
} 

здесь находится обрабатывающая часть:

import processing.serial.*;    // Importing the serial library to communicate with the Arduino

Serial myPort;      // Initializing a vairable named 'myPort' for serial communication
float background_color ;   // Variable for changing the background color

void setup ( ) {
  size (500,  500);     // Size of the serial window, you can increase or decrease as you want
  myPort  =  new Serial (this, "COM3",  9600); // Set the com port and the baud rate according to the Arduino IDE
  myPort.bufferUntil ( '\n' );   // Receiving the data from the Arduino IDE

}
void serialEvent  (Serial myPort) {
  background_color  =  float (myPort.readStringUntil ( '\n' ) ) ;  // Changing the background color according to received data
}

void draw ( ) {
  background ( 150, 50, background_color );   // Initial background color, when we will open the serial window
  if ( mousePressed  &&  ( mouseButton  ==  LEFT ) ) { // if the left mouse button is pressed
    myPort.write ( '1' ) ;       // send a '1' to the Arduino IDE
  }
  if  ( mousePressed  &&  ( mouseButton == RIGHT ) ) {  // if the right mouse button is pressed
    myPort.write ( '0' ) ;     // Send a '0' to the Arduino IDE
  }
}

Прочитайте комментарии и увидите, что чтение из серийного и печать в серийный разделены

0 голосов
/ 22 апреля 2020

Просто решил проблему, мой код не работал, потому что я писал на порту сразу после команды, чтобы открыть его, таким образом, порт еще не был открыт, решил вопрос с Thread.sleep (1000); на Java код. Я должен реализовать что-то, чтобы сказать мне, когда порт открыт.

...