반응형

https://youtube.com/live/aYDw_J9BpP4

[아두이노#598] VS-Code에서 아두이노와 통신할때 Serial입력이 안되네? Serial Monitor 확장모듈 활용해보기!(녹칸다의 아두이노 시즌2)

녹칸다의 아두이노(arduino) 시리즈이다!

이번편은 VS-Code에서 아두이노와 통신하는 방법에 대해서 개발환경을 구성해보도록 함!

(문제점)
1.VS-CODE에 플랫폼io를 설치하고 아두이노에서 PC쪽으로 데이터가 출력되는쪽은 아무 문제가 없음!
2.그러나 PC에서 아두이노쪽으로 데이터가 입력될때는 플랫폼IO에 딸려있는 시리얼모니터에 입력기능자체가 존재하지 않았음!(그러면 어떻게 전송하지)

(참고자료)
1.아두이노가 컴퓨터쪽으로 보내는 데이터는 컴퓨터쪽에 있는 누구라도 다 받을 수 있음!
2.아두이노의 시리얼출력은 아두이노 IDE에 있는 시리얼모니터에서도 출력이 가능하다!
3.반대로 아두이노 IDE에서 코드를 작성해서 업로드 했더라도 반드시 아두이노의 시리얼모니터에서만 결과를 볼 수 있는게 아니라 VS-Code의시리얼 모니터에서도 볼 수 있다!
4.PC와 아두이노가 USB로 통신하기 때문에 데이터를 수신하기 위한 프로그램은 단 하나만 연결할 수 있다!(아두이노IDE의 시리얼모니터가 열려있으면 VS코드의 시리얼모니터는 아두이노와 연결할 수 없고, 반대의 경우도 동일하다)
5.예제1번에서 녹칸다가 뭔가 문자열을 입력했더니 1~2초정도의 시간이 소요된다음 결과가 아두이노로부터 출력되더라!(readString)
6.readString함수 : 시리얼입력으로 들어오는 데이터를 타임아웃이 발생할때까지 입력받는다!(타임아웃시간은 1000ms)
7.보내주는쪽에서는 CR을 종료문자라고 했고, 받는쪽에서는 LF로 지정되었다면 어떻게되는가? readString하고 동일하게 1초간 타임아웃이 발생하면 거기가 종료지점이 된다!
8.아두이노 IDE던지 VS-CODE의 시리얼모니터든지 둘다 아스키코드를 제외한 숫자를 전송할 수 는 없다!
9.저번주에 vs-code시작할때 녹칸다가 기본 보레이트는 9600이고 다른 보레이트를 사용할 경우 platformio.ini파일에 바뀐 시리얼모니터의 보레이트를 입력해주어야된다고 했으나, 새로 설치한 serial monitor는 ui상에서 그냥 보레이트를 선택가능하다!

(예제목차)
1.PC에서 아두이노에게 문자열을 전송하면 그 문자열을 그대로 출력하는 코드를 구성하시오!(보레이트9600, 라인엔딩NONE)

598-1(문자열시리얼입력).txt
0.00MB

 

2.예제 1번에서 readString함수를 사용했기때문에 1초라는 지연시간이 걸려는데 이것을 즉시 입력가능하도록 하려면 어떻게 해야하겠는가?(종료문자를 왜 사용하는가?)
-지금 예시에서는 종료문자가 캐리지리턴('\r')이다!

598-2(종료문자가캐리지리턴일때).txt
0.00MB

 

3.예제 2번에서 종료문자가 라인피더(LF)로 변경되었다!

598-3(종료문자가라인피더일때).txt
0.00MB

 

4.아두이노의 디지털2번핀에 LED가 한개 연결되었다! 컴퓨터에서 '1'을 전송하면 LED가 켜지고, '0'을 전송하면 LED가 꺼지도록 하시오!

598-4(led1개제어하기).txt
0.00MB

 

5.LED가 2번핀하고 3번핀에 연결되었을때 개별적으로 제어할수도있고 일괄적으로 제어할 수 있도록 하려면 어떻게 해야겠는가?(CASE1)

598-5(LED2개제어해보기1).txt
0.00MB

 

6.명령어로 LED 2개를 제어할 수 있도록 하시오!(CASE2)
  -SET LED1 ON\r
  -SET LED1 OFF\r
  -SET LED2 ON\r
  -SET LED2 OFF\r
  -SET ALL OFF\r
  -SET ALL ON\r

598-6(LED2개제어하기2).txt
0.00MB

 

7.아래 명령어로 LED 2개를 제어해보시오!(CASE3)
  -NUM:1, STATE:0 : LED1를 OFF
  -NUM:1, STATE:1 : LED1를 ON
  -NUM:2, STATE:0 : LED2를 OFF
  -NUM:2, STATE:1 : LED2를 ON
  -NUM:A, STATE:0 : 모든 LED OFF
  -NUM:A, STATE:1 : 모든 LED ON

598-7(led2개제어하기3).txt
0.00MB

 

8.예제 6번에서 모든 명령어를 case by case로 조건을 걸었던것을 조금더 스마트하게 변경하시오!(명령어가 100만개쯤 된다고 가정해보자)(문자열처리)

598-8(문자열처리로제어하기).txt
0.00MB

 

9.아래와 같이 콤마를 구분자로 해서 3개의 센서값의 평균을 계산해서 시리얼모니터에 출력하시오!
  -12.34,56.78,89.10

598-9(시리얼입력으로받은값을숫자로바꾸기).txt
0.00MB

 

10.아두이노가 명령어를 순차적으로 2개 입력을 받는다! 첫번째는 LED1, LED2, ALL 중 1개를 입력받고 두번째는 ON과 OFF를 입력받아서 제어될 수 있도록 하되 지정된 명령어가 아니면 초기상태로 돌아가도록 하시오!

598-10(두번의시리얼입력으로제어해보기).txt
0.00MB

반응형
Posted by 덕력킹
,