BASIC4MCU | 질문게시판 | 아두이노 소프트웨어 시리얼 다수 사용 질문
페이지 정보
작성자 s은여우s 작성일2022-11-24 13:47 조회888회 댓글3건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=21762
작성일
작성일
본문
아두이노 UNO를 이용해 Lora라는 통신모듈을 이용해 GPS데이터를 보내면서 중간에 데이터를 받으면 GPS 데이터 전송을 멈추고 MP3를 재생하고 싶습니다.여러 예제를 찾으며 아래같이 했는데 GPS데이터는 지속적으로 보내지지만 MP3는 작동이 되지않습니다...소프트웨어 시리얼을 여럿 사용하는법을 간단하게라도 설명만 해주셔도 감사 할 것 같습니다ㅠㅠ 윗쪽은 GPS와 MP3가 있는 아두이노이고 아랫쪽은 데이터를 받거나 전송하기 위해 쓰는 아두이노입니다#include <SoftwareSerial.h>#include <TinyGPS++.h>#include <AltSoftSerial.h>const uint32_t GPSBaud = 9600;TinyGPSPlus gps;AltSoftSerial GPS(8, 9);SoftwareSerial Lora(2, 3);void setup() {Serial.begin(9600);GPS.begin(9600);Lora.begin(GPSBaud);}void loop() {GPS.listen();if (GPS.available()) {if (gps.encode(GPS.read())) {if (gps.location.isValid()) {Serial.print(F("- latitude: "));Serial.println(gps.location.lat(),6);Serial.print(F("- longitude: "));Serial.println(gps.location.lng(),6);} else {Serial.println(F("- location: INVALID"));}Serial.println();}if (millis() > 5000 && gps.charsProcessed() < 10) {Serial.println(F("No GPS data received: check wiring"));}delay(1);}Lora.listen();if (!GPS.available()) {Lora.println("AT+SEND=1,17,"+String(gps.location.lat(),6)+","+String(gps.location.lng(),6));Serial.println("AT+SEND=1,17,"+String(gps.location.lat(),6)+","+String(gps.location.lng(),6));delay(100);}}void serialEvent() {char val=Lora.read(); Serial.write(val);if(val=='1'){ mp3_play(1); }if(val=='2'){ mp3_play(2); }if(val=='3'){ mp3_play(3); }if(val=='4'){ mp3_pause(); }if(val=='5'){ mp3_stop(); }delay(100);}------------------------------------------------------------------------------------------
#include <SoftwareSerial.h>SoftwareSerial mySerial(8, 9); // RX, TXvoid setup() {Serial.begin(9600);mySerial.begin(9600);}void loop() {if (mySerial.available()) {Serial.write (mySerial.read());}if (Serial.available()) {mySerial.write(Serial.read());}}
댓글 3
조회수 888master님의 댓글
master 작성일
소프트웨어 시리얼을 2개이상 쓰는 경우
송신은 모두 가능하지만 수신은 1개만 가능합니다.
.listen(); 함수로 수신을 정합니다.
GPS.listen();를 실행하면 GPS만 수신하고
mySerial.listen();를 실행하면 mySerial만 수신합니다.
한 순간도 데이터 수신을 놓쳐서는 안된다면 메가2560을 사용하세요
s은여우s님의 댓글
s은여우s
질문에 대한 답변 감사합니다! 혹시 실례가 되지않는다면 양방향 통신에 관해서도 알 수 있을까요?
상호간 송신 수신이 되게끔 하고싶은데 서로서로 충돌하는지 글자가 엄청 깨져서 시리얼모니터에 출력이 되서...
관련 정보 혹은 글이나 영상 알고 계신다면 알려주시면 감사하겠습니다!
master님의 댓글
master
전체가 다 깨진다면 보레이트가 맞지 않을테고요
부분적으로 깨진다면 어느 부분부터 깨지는지 코드를 찾아서 디버깅 해보세요