통신 시나리오

Hyun Ho An·2024년 1월 11일

통신을 완료하는 단계까지 코드를 작성하였지만,
데이터를 맞춰보는 코드에서 데이터가 일치하지 않는다고 코드가 넘어가지 않았다.

이건 단순히 데이터를 보낼때,

##PC
def serial_out(wait_time, value):
	ser.write((("{}\n".format(value))).encode('utf-8'))
	time.sleep(wait_time)
	print(value)
	ser.flushInput()
	return value

\n로 입력받아서 생긴 문제였다. 그래서 단순히

##라즈베리파이 피코
def serial_in(wait_time):
    value = None
    utime.sleep(wait_time)
    while uart.any() > 0:
        value = uart.readline().decode('utf-8').strip()
        print(value)
        print(type(value))
        break

    return value

위와 같이 strip을 해줬더니 해결됐다;;;
그리고 코드가 무한 루프되는 문제도 있었는데 이 문제는 나의 실수였다...

통신 문제가 생각보다 너무 많았다. 데이터를 제대로 받지 못하거나, 아예 입력을 못받거나....

그리고 sleep하는 시간도 중요했다. 너무 빨리 동작해버리면 데이터를 주지도 않았는데 그냥 None으로 입력받는 경우도 있었고,
빠르게 입력을 줘서 겹쳐서 입력받는 경우도 있었다.

그리고, 데이터를 계속해서 받을 때 1,1,0을 받아야하는데 11,0 1,10 이런 식으로 데이터가 계속 받아져서 uart.any()를 확인하였는데 값이 0으로 초기화하지 못하였다.

해결방법으로 PC쪽에서 버퍼를 초기화하는 ser.flushInput()을 사용하여 해결하였다.

[시나리오]

위의 GUI가 있으면

  • 변수값 설정과 현재 변수값 불러오기는 PC안의 config 파일을 이용해서 변수를 불러오거나 저장한다.
  • 시리얼 통신 설정에서 통신속도와 포트를 설정하고, 통신 연결을 클릭해 접속한다.
  • 동작 버튼을 누르면 현재 PC에 저장되어 있는 값을 피코에 넘겨준 후, 모터 작동을 시작한다. 이때, 서로 데이터 통신을 통해서 잘 작동하는지 확인한다.
  1. PC -> 'on' -> Pico
  2. Pico -> 'Okay' -> PC : 모터 작동
    인터럽트: Time Out: 5s, Please Check your connection with raspberry pi pico

---------여기까진 이틀동안 모두 구현함-------------
3. 정지버튼을 누르면 모든 모터의 동작이 멈춰야한다.

이젠 내가 할건 정말 얼마 남지 않은 것 같다. 센서를 받아보고 데이터를 통신하는 것까지 내가 하려나...?

그리고 모터 속도를 계산해서 거리를 동적 출력하는 것도 완성해야한다..!

우선 순위: 정지 버튼 > 거리 동적 출력 > 현재 시간 출력과 사용

profile
한국해양대학교/인공지능공학부

0개의 댓글