2015-03-13 4 views
0

Я относительно новичок и для Arduino, и для обработки, и я работал над кодом, который использует последовательную связь между ними. Мой код Arduino считывает и печатает значения с пьезодатчика, а затем отправляет значения в «Обработка», которые набросают определенные фигуры на основе значений. Код работал ранее, но по какой-то причине он больше не работает. Все компилируется, но когда я запускаю код обработки, окно эскиза пуст и остается пустым. Несколько раз появлялась «ошибка, отключая serialEvent()», но я просто отключил плату от Arduino, закрыл программы и перезапустил все. Ошибка больше не появляется, но мой эскиз обработки пока не отображается на экране. Может кто-нибудь, пожалуйста, дайте мне знать, что не так с моим кодом? Я очень ценю помощь.Ошибка с Arduino/Обработка последовательной связи

Arduino Код:

int ledPin = 13;  
int knockSensor = A0; 
byte val = 0;   
int statePin = LOW; 
int THRESHOLD = 5; 
int sensorReading = 0; 

void setup() { 
pinMode(ledPin, OUTPUT); 
Serial.begin(9600);  
} 

void loop() { 
    sensorReading = analogRead(knockSensor);  

    if(sensorReading > 0) 
    { 
    Serial.println(sensorReading, DEC); 
    } 

    if (sensorReading != 0) 
    Serial.println(sensorReading); 
    delay(100); 
} 

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

import processing.serial.*; 

Serial port; 

int centerX = 550; 
int centerY = 400; 

float val; 
float ellipseX; 
float ellipseY; 
float ellipseW; 
float ellipseH; 
float ellipseXX; 
float ellipseYY; 
float ellipseWW; 
float ellipseHH; 
float lineX; 
float lineY; 
float lineXX; 
float lineYY; 

void setup(){ 
    background(255); 
    size(1100,800); 
    frameRate(10); 
    smooth(); 

    String portname = "/dev/tty.usbmodem1411"; 

    //String portname = Serial.list()[0]; 
    port = new Serial(this, portname, 9600); 
    println(Serial.list()); 
    //port.bufferUntil('\n'); 
} 

void drawEllipse(float val) 
{ 
    if(val > 0 && val < 50) 
    { 
    ellipseX = random(540,560); 
    ellipseY = random(390,410); 
    ellipseW = val + 10; 
    ellipseH = val + 10; 

    stroke(0); 
    fill(random(255), random(200,255)); 
    } 
} 

void drawLines(float val) 
{ 
    if(val > 50 && val < 70) 
    { 
    lineX = random(500, 600); 
    lineY = random(360, 440); 
    lineXX = random(500, 600); 
    lineYY = random(360, 440); 

    stroke(0); 
    } 
} 

void drawEllipse2(float val) 
{ 
    if(val > 70 && val < 120) 
    { 
    ellipseXX = random(460, 640); 
    ellipseYY = random(330, 470); 
    ellipseWW = val + random(20); 
    ellipseHH = val + 10; 

    stroke(0); 
    fill(random(50, 100), random(50, 100), random(50, 100), random(220, 255)); 
    } 
} 

void serialEvent(Serial port) 
{ 
    String inString = port.readStringUntil('\n'); 

    if (inString != null) 
    { 
     val = Float.parseFloat(inString); 
    } 

    drawEllipse(val); 
    drawLines(val); 
    drawEllipse2(val); 
    println(val); 
} 
+1

Вы лучше просить о http://arduino.stackexchange.com – leDominatre

+0

Знаете ли вы, что в вашем Arduino эскиз, вы делают Serial.println два раза для каждого датчика? Я не знаю, если это проблема, но было ли это то, что вы намеревались? (Оба выглядят так, как будто они делают в основном одно и то же). –

+0

О, спасибо, что указали это, но я не думаю, что это проблема. –

ответ

0

Может быть с помощью Serial.write() будет лучше. Таким образом, код будет выглядеть так.

Arduino Код:

int ledPin = 13;  
int knockSensor = A0; 
byte val = 0;   
int statePin = LOW; 
int THRESHOLD = 5; 
int sensorReading = 0; 

void setup() { 
    pinMode(ledPin, OUTPUT); 
    Serial.begin(9600);  
} 

void loop() { 
    sensorReading = analogRead(knockSensor);  

    if(sensorReading > 0) 
    { 
     Serial.println(sensorReading, DEC); 
    } 

    if (sensorReading != 0) 
     Serial.write(map(sensorReading, 0, 1023, 0, 255)); 
    delay(100); 
} 

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

import processing.serial.*; 

Serial port; 

int centerX = 550; 
int centerY = 400; 

float val; 
float ellipseX; 
float ellipseY; 
float ellipseW; 
float ellipseH; 
float ellipseXX; 
float ellipseYY; 
float ellipseWW; 
float ellipseHH; 
float lineX; 
float lineY; 
float lineXX; 
float lineYY; 

void setup(){ 
    background(255); 
    size(1100,800); 
    frameRate(10); 
    smooth(); 

    String portname = "/dev/tty.usbmodem1411"; 

    //String portname = Serial.list()[0]; 
    port = new Serial(this, portname, 9600); 
    println(Serial.list()); 
    //port.bufferUntil('\n'); 
} 

void drawEllipse(float val) 
{ 
    if(val > 0 && val < 50) 
    { 
     ellipseX = random(540,560); 
     ellipseY = random(390,410); 
     ellipseW = val + 10; 
     ellipseH = val + 10; 

     stroke(0); 
     fill(random(255), random(200,255)); 
    } 
} 

void drawLines(float val) 
{ 
    if(val > 50 && val < 70) 
    { 
     lineX = random(500, 600); 
     lineY = random(360, 440); 
     lineXX = random(500, 600); 
     lineYY = random(360, 440); 

     stroke(0); 
    } 
} 

void drawEllipse2(float val) 
{ 
    if(val > 70 && val < 120) 
    { 
     ellipseXX = random(460, 640); 
     ellipseYY = random(330, 470); 
     ellipseWW = val + random(20); 
     ellipseHH = val + 10; 

     stroke(0); 
     fill(random(50, 100), random(50, 100), random(50, 100), random(220, 255)); 
    } 
} 

void serialEvent(Serial port) 
{ 
    if (0 < port.available()) { 
     val = map(port.read(), 0, 255, 0, 1023); 
    } 

    if (val > 0) { 
     drawEllipse(val); 
     drawLines(val); 
     drawEllipse2(val); 
     println(val); 
    } 
} 
Смежные вопросы