Моят Arduino и компютърът ми не си подават ръцете

Използвам Processing и Arduino Uno, за да контролирам позицията на кръг на екрана с помощта на два потенциометъра. Arduino и компютърът комуникират чрез bluetooth. Ето кода за скицата за обработка:

import processing.serial.*;

Serial myPort;
int x, y;

void setup() {
  size(400, 400);
  println(Serial.list());
  myPort = new Serial(this, Serial.list()[0], 115200);
  myPort.bufferUntil('\n');
  background(255);
  noStroke();
}

void draw() {
}

void serialEvent(Serial myPort) {
  println("here");
  String inString = myPort.readStringUntil('\n');
  if (inString != null) {
    inString = trim(inString);
    String items[] = split(inString, ',');
    if (items.length > 1) {
      float a = float(items[0]);
      float b= float(items[1]);
      x = (int) map(a, 0, 1023, 0, width);
      y = (int) map(b, 0, 1023, 0, height);
      background(255);
      fill(255, 0, 0);
      ellipse(x, y, 10, 10);
    }
  }
  //myPort.write('\r');
}

Ето кода за Arduino:

const int left_pot = A2;
const int right_pot = A3;
int x;
int y;

void setup(){
  Serial.begin(115200);
 /* while (Serial.available()<=0){
    Serial.println("hello?");
  }*/
}

void loop(){
  //if (Serial.available() > 0) {
    int inByte = Serial.read();
    x = analogRead(left_pot);
    y = analogRead(right_pot);
    Serial.print(x);
    Serial.print(", ");
    Serial.println(y);
    delay(2);
  //}
}

Както е публикувано, кодът работи, но точката на екрана е много нервна. Затова се опитах да внедря протокол за ръкостискане, базиран на „Как говорят нещата“ (Igoe, страница 62). Коментираните редове трябва да правят това. Но когато те са без коментари, червената точка вече не се показва и обработващата скица никога не стига до командата println("тук").

Използвам 32-битова обработка 2.0.1.


person Noah    schedule 02.08.2013    source източник


Отговори (1)


Вашата скица на Arduino изчаква, докато получи някои данни, преди да изпрати данни. Така че вашата скица за обработка трябва първо да изпрати нещо през серийния канал към Arduino. В момента не е така. Опитайте да добавите нещо, за да го отпечатате:

void setup() {
size(400, 400);
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 115200);
myPort.bufferUntil('\n');
background(255);
noStroke();
myPort.write('\r');  //Get the arduino to reply
}
person user2461391    schedule 02.08.2013