2012-11-17 33 views
5

Tôi mới vào Xử lý và giao tiếp nối tiếp và vấn đề của tôi có vẻ rất sơ cấp. Tôi đang cố gắng để gửi dữ liệu từ chế biến đến một Arduino nhưng có vẻ như một cái gì đó bị mất trong bản dịch.Viết tiếp nối từ Xử lý tới Arduino gửi dữ liệu bị hỏng

On Arduino Tôi đang chạy phác họa siêu đơn giản này:

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

void loop() 
{ 
    if (Serial.available() > 0) Serial.println(Serial.read()); 
} 

Mục đích đó là để đọc một byte từ sê-ri và sau đó viết nó quay lại ngay để tôi có thể xem những gì đang xảy ra. Kiểm tra điều này với màn hình nối tiếp bao gồm hoạt động như tôi mong đợi: gõ vào "0" trả về "48". Càng xa càng tốt.

Mọi thứ bắt đầu đi sai khi tôi chạy Processing phác thảo này:

import processing.serial.*; 
Serial myPort; 

void setup() 
{ 
    //frameRate(10); 
    myPort = new Serial(this, Serial.list()[4], 9600); 
} 

void draw() 
{ 
    myPort.write("0"); 
} 

Tôi woud mong đợi mã này để trả lại một dòng bất tận của "48" với tỷ lệ số mười mục mỗi giây, kể từ khi tôi hiểu rằng là tốc độ khung hình mặc định. Điều gì thực sự xảy ra là một cái gì đó như thế này:

48 
48 
488 
48 
48 
48 
48 
48 
48 
48 
48 
48 
48 

488 
48 
48 
48 

Có vẻ như mỗi 10 (cho hay mất một vài) byte có một sự thay đổi tốt là sai lầm. Thay vì "48", tôi lấy lại các nội dung như "", "488", "4848" hoặc "488". Điều thú vị hơn nữa là nếu tôi bỏ ghi chú frameRate (10); dòng trong kịch bản xử lý của tôi, tôi sẽ mong đợi hoàn toàn không có gì xảy ra, kể từ khi tôi đang thiết lập khung hình/giây từ mười đến mười. Thay vào đó, tôi bắt đầu thấy những nội dung như sau:

4 
44 
4848844 
444448444844 
4 
44444444 
844 
444 
844444 
8 
88 
8 
4488 
84 
48 
4448444844 
444 

Vì vậy, về cơ bản, các con số này có ý nghĩa hơn nữa.

Tôi mất khá nhiều thời gian để thu hẹp sự cố xuống giao tiếp nối tiếp này và một vài giờ Googling xung quanh các chủ đề liên quan đã khiến tôi không có gợi ý về những gì có thể xảy ra. Bất kỳ con trỏ nào hướng tới việc đọc thêm hoặc những thứ cần thử sẽ được đánh giá cao.

Tôi đang sử dụng phiên bản mới nhất của Xử lý được tải xuống ngay hôm nay và hệ thống của tôi là MBP đang chạy Mountain Lion với tất cả các bản cập nhật được cài đặt.

Trả lời

1

Sau khi kiểm tra thêm, có vẻ như có màn hình nối tiếp trong khi gửi byte từ Xử lý các sự cố cả hai đều vì lý do chưa rõ. Tôi cho rằng có một số loại chiến đấu trên ưu tiên xe buýt nối tiếp và dữ liệu sẽ bị hỏng.

Giải pháp: không cố gắng sử dụng nhiều chương trình để đọc dữ liệu nối tiếp cùng một lúc.

+0

Xin chào @Dasinf, tôi đang gặp vấn đề tương tự trên MBP của mình. Tôi chỉ không nhận được dữ liệu nhất quán. Bạn có thể cho tôi biết cụ thể những gì bạn đã làm để sửa lỗi này không? Màn hình nối tiếp không mở, tôi đã bỏ ghi chú tất cả Serial.print(); và thậm chí đóng Arduino IDE sau khi tải lên. –

+0

Cảm ơn bạn! Tôi đã đọc từ cổng nối tiếp bằng cách sử dụng nodejs trong khi tôi đã mở Serial Monitor. Việc tắt một trong số họ đã giải quyết vấn đề cho người kia. –

0

Như bạn đã tìm ra, nếu bạn có nhiều chương trình đang cố gắng đọc dữ liệu từ nối tiếp, nó có thể dẫn đến sự cố như vậy.

Bạn cũng có thể thử thư viện Phần mềm nối tiếp Arduino, cho phép bạn sử dụng bất kỳ ghim nào làm chân nối tiếp.

0

thử thay thế:

myPort.write("0"); 

với:

myPort.write("0")-'0'; 

ascii 0 -> 48
ascii 1 -> 49
.
.
.