Обработка: Как записать в последовательный порт? - PullRequest
0 голосов
/ 23 июня 2011
boolean squareVisible = true;
int x = 50;
int y = 50;
int w = 100;
int h = 100;
import processing.serial.*;
Serial port;
int val;

void setup() {
    size(200, 200);
    noStroke();
    fill(255, 0, 0);
    rect(x, y, w, h);

    port = new Serial(this, 9600);
}

void draw() {
    background(255);
    if (squareVisible) {
        fill(40, 80, 90);
    } else {
        fill(255, 0, 0);
    }
    rect(x, y, w, h); // Draw a square
}


void mousePressed() {
    if (((mouseX > x) && (mouseX < x + w) &&
            (mouseY > y) && (mouseY < y + h))) {
        // if mouse clicked inside square
        squareVisible = !squareVisible;  // toggle square visibility
        port.write("8");
    }
}

void mouseMoved() {
    if (((mouseX > x) && (mouseX < x + w) &&
            (mouseY > y) && (mouseY < y + h))) {
        port.write("2");                
    }
}

Я полный новичок в обработке.Это простой тумблер, и я пытаюсь записать в последовательный порт, когда коммутатор сделан.Я пытаюсь интегрировать это с Arduino, но я не могу заставить его читать что-либо из последовательного порта.Есть ли другой способ записи в последовательный порт с каждым переключателем, который я делаю, у меня что-то не так?Заранее спасибо ...

1 Ответ

5 голосов
/ 01 сентября 2011

Я заметил одну проблему: port = new Serial(this, 9600);, которая должна быть port = new Serial(this, Serial.list()[0], 9600);.Вы пропустили (важный) аргумент в конструкторе Serial .Всегда проверяйте наличие ошибок в Консоли обработки (ниже вашего кода), особенно если код не работает :)

Я бы начал с примера SimpleWrite, который поставляется с Processing, чтобы вы понимали, как происходит связь между Processing / Arduino.сначала работает, затем двигайтесь дальше и используйте знания, полученные в вашем проекте.

Базовая настройка: При обработке вы инициализируете экземпляр Serial в setup (), а при рисовании вы отправляете значения с помощью write () Serial.метод.В Arduino в setup () вы инициализируете Serial (Serial.begin (yourBaudRate))), а в loop () вы проверяете, доступны ли данные, и read () значения. ОЧЕНЬ важно использовать одинаковую скорость передачи данных как в обработке, так и в Arduino, иначе вы не сможете разобрать большую часть передаваемых данных.

Кроме того, вы неЗастряв в отправке строк, вы также можете отправлять целые числа, байты и т. д. Если вы хотите отобразить их, не забудьте добавить тип в качестве второго аргумента Serial.print () или Serial.println () (например,Serial.,Кроме того, входящие данные печатаются в Serial Monitor: int input = 0; // это будет хранить значение из Serial

void setup(){
  pinMode(13,OUTPUT);//add an LED on PIN 13 for kicks
  Serial.begin(9600);//init Serial library (make sure Processing is sending data at the same baud rate)
}
void loop(){
  if(Serial.available() > 0){//look for Serial data 
    incoming = Serial.read();//read and store teh value
    Serial.print(incoming,DEC);//print it to the Serial monitor, change DEC to the type of variable you're using
    if(incoming == 1){//if it's a 1 blink once
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);    
      delay(500);
    } 
  }
}

И я настроил, что вы немного обрабатываете эскиз:

boolean squareVisible = true;
int x = 50;
int y = 50;
int w = 100;
int h = 100;
import processing.serial.*;
Serial port;
int val;

void setup() {
    size(200, 200);
    noStroke();
    fill(255, 0, 0);
    rect(x, y, w, h);

    String portName = Serial.list()[0];
    port = new Serial(this, portName, 9600);
}

void draw() {
    background(255);
    if (squareVisible) {
        fill(40, 80, 90);
    } else {
        fill(255, 0, 0);
    }
    rect(x, y, w, h); // Draw a square
}


void mousePressed() {
    if (((mouseX > x) && (mouseX < x + w) &&
            (mouseY > y) && (mouseY < y + h))) {
        // if mouse clicked inside square
        squareVisible = !squareVisible;  // toggle square visibility
        if(squareVisible) port.write(0);
        else              port.write(1);
    }
}
/*
void mouseMoved() {
    if (((mouseX > x) && (mouseX < x + w) &&
            (mouseY > y) && (mouseY < y + h))) {
        port.write(2);                
    }
}*/

Удачи!

...