Skip to content

수위 측정 센서 모듈 최종 코드 추가

오병준 requested to merge feature/waterlevel into main

제가 담당한 수위 측정 센서 모듈의 최종 코드입니다. 다음과 같은 내용을 반영합니다.

  • !8 (merged)에서 정의한 프로토콜에 따라 수위 측정 센서 측정 결과를 전송합니다.
  • ADXL345 가속도 센서 정보를 추가로 전송합니다.
  • 가속도 센서 추가로 인해 여러 스레드가 동시에 i2c 버스에 접근하게 되어, i2c 리소스에 뮤텍스 락을 추가합니다.
  • LED 전광판 작동을 확인하여 전광판 코드를 추가합니다.

전광판 부분은 @imdongye님의 앰프 모듈에서 데이터를 받아와야 합니다.

그런데 제 모듈이 한 소켓에서 id=ID_WATERLEVEL 데이터와 함께 id=ID_ACCEL 데이터도 보내고 있어서, 이 소켓이 2개 센서 정보 전송과 동시에 전광판 데이터를 수신하는 방식이 잘 작동할지 의문입니다.

그래서 불가피하게 다음과 같이 포트를 하나 더 사용해서 전광판 데이터 수신 전용으로만 사용하는 방식으로 구현했습니다.

struct sockaddr_in server;
init_socket_server(&server, SERVER_IP, SERVER_PORT + 1);

...

while (1) {
  /* read and draw display graph */
  ret = read(sock, display_data, sizeof(display_data));
  ledmatrix_drawgraph(display_data, 4);

  usleep(20000); // 50Hz update
}

SERVER_PORT에 1을 더한 5001번 포트에서 20ms마다 한 번씩 size가 4인 int array를 읽어 전광판 값으로 사용합니다.

동예님은 5001번 포트로 길이가 4인 int 배열에 각각 버튼, 초음파, 수위, 가속도 센서의 note 값(30~110)을 담아 20ms마다 보내주시면 적당할 듯합니다.

혹시 더 좋은 방법이 있으시면 알려주세요 😄

Merge request reports