2017-09-20 11 views
0

Arduino Uno가 시리얼을 통해 Arduino Mega와 통신하려면 데이터 전송 속도를 향상시키고 싶습니다.시리얼을 통해 Arduino에서 Arduino로 의사 소통을 개선하기 위해 노력하고 있습니다.

이 Arduino Uno는 (이미 테스트 한) analogRead()을 사용하여 브리지 회로를 통해 스트레인 게이지에서 정보를 추출하고 있습니다. 그런 다음 Serial을 통해이 정보를 Mega로 보내면 USB 케이블과 직렬 통신을 사용하여 컴퓨터로 보냅니다.

이 메가 보드는 Uno가 회전축에 놓이고 메가와의 통신이 원형 광 커플러를 통해 이루어지기 때문에 필요합니다.이 광 커플러는 테스트를 거쳤으며 작동하고 있습니다.

나는 이걸로 현재 회전하는 Uno에서 190Hz의 데이터를 읽습니다. 대부분의 문제는 코드에 delay(5);이 있기 때문에 발생하지만 데이터를 누락 된 문자가 도착하기까지 3ms로 낮추는 것으로 충분합니다.

우노 코드 :

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

void loop() { 
    Serial.println(analogRead(A0)); 
    delay(5); 
} 

메가 코드 : 그것은 analogRead()에서 유래 이후

char t; 
void setup() { 
Serial.begin(9600); 
Serial1.begin(19200); 
} 

void loop() { 
    if (Serial1.available()>0) 
    { 
     t = Serial1.read(); 
     Serial.print(t); 
    } 
} 

데이터가 전송되는 그래서 어쩌면 내가 인코딩 할 수있는, 항상 0에서 1023까지의 정수 더 낫지 만, 어떻게해야하는지, 아니면 더 큰 문제를 해결할 지 모르겠다. delay(5);

고맙습니다.

+0

정확히 무엇이 문제입니까? 먼저 데이터 전송 속도를 향상 시키겠다는 말을 시작하지만 나중에 데이터를 삭제하는 것으로 언급합니다. 또한 190Hz는 어디로 들어 옵니까? 코드의 유일한 전송 속도는 9600 및 19200입니다. –

+0

그래서 문제는 다음과 같습니다.이 시스템에서 데이터 수집 속도를 향상시켜야합니다. 나는 현재 190Hz의 속도로 센서로부터 정보를 얻고있다. 데이터는 보통 4 문자의 문자열로 보내집니다 : 실제 숫자는 3이고 println();은 \ n이고이 데이터는 초 190 회 얻습니다. 제가 언급 한 데이터를 떨어 뜨리는 것은 지연을 5ms로 유지하면 발생하지 않지만, 이해할 수있는 한, 지연으로 인해 초당 200 개 이상의 데이터 샘플을 얻을 수는 없습니다. –

답변

1

메가 : 19200bps 입력 및 9600bps 출력에서 ​​구성한 데이터 전송 속도를 고려하십시오. 또한 Serial.print()은 블로킹 호출이므로 프로그램이 전체 전송이 완료 될 때까지 기다린 후에 다른 읽기를 반복해야한다고 생각하십시오. 이렇게하면 효과적으로 전송 속도가 9600bps로 제한됩니다 (실제로 오버 헤드가 Serial1.read()이므로 더 낮아집니다). 첫 단계로 입력 속도 (19200 bps)와 일치하도록이 속도를 올릴 수 있는지 확인하십시오.

광 커플러 연결에 펄스가 누락되지 않는다고 확신하는 경우 직렬 속도를 추가로 높이거나 병렬 읽기 및 쓰기를 허용하는 인터럽트 구동 설계를 조사 할 수 있습니다.

+0

고맙습니다.이 변경 사항을 적용하려고 노력할 것이고 내일 실험실에 도착한 후에 다시보고 할 것입니다. –

+0

안녕하십니까, 메가와 우노 모두에서 전송 속도를 57600으로 변경 했으므로 지연() '를 1ms로 설정합니다. 이로 인해 전송 속도가 780Hz로 향상되었습니다. 힌트를 주셔서 감사합니다 –

+0

문제 없습니다, 행운을 빌어 요! – v1bri