우선, 하드웨어 적으로 나의 센서와 FC를 연결해주어야 합니다. 이전 페이지에서 대략 보여준 그림대로 본인이 원하는 통신 방식에 따라 Master ↔ Slave 간 연결을 해주면 됩니다.
아래는 Arduino 홈페이지에 있는 데이터시트에서 가져온 UNO보드의 Pinout입니다.
보시다시피 SCL과 SDA 핀과 SCK, MISO, MOSI, SS 핀이 보입니다.
Arduino UNO R3 Pinout
이와 같이 본인이 사용하고 있는 보드의 데이터시트를 확인하여 지원하는 통신 프로토콜을 확인해주어야 합니다.
실습 코드 작성에 앞서 Arduino에서 제공하는 함수에 대해 알아보겠습니다.
SPI
SPI.begin()
: SPI 통신을 시작할 때 호출하는 함수입니다. 이 함수를 호출하여 SPI 통신을 초기화합니다.SPI.setDataMode(uint8_t mode)
: SPI 데이터 모드를 설정하는 함수입니다. 이 함수를 사용하여 SPI 모드를 설정할 수 있습니다. SPI 모드는 총 4가지가 있으며, SPI_MODE0
, SPI_MODE1
, SPI_MODE2
, SPI_MODE3
중 하나를 선택할 수 있습니다.SPI.setClockDivider(uint8_t divider)
: SPI Clock 분주비를 설정하는 함수입니다. Clock 분주비는 Clock 주파수를 Master 클럭 주파수로 나눈 값입니다. Frequency를 우리가 사용하기 쉬운 값으로 만들기 위해 사용합니다.SPI.beginTransaction(SPISettings settings)
: SPI 통신을 시작할 때 호출하는 함수로, SPISettings
객체를 인수로 받습니다. 이 객체는 SPI 통신에 사용될 Clock 주파수, Clock 극성, 데이터 전송 방식 등을 설정할 수 있습니다.SPI.transfer(byte data)
: 데이터를 전송하고 수신할 때 호출하는 함수로, 인수로 전송할 데이터를 받습니다.SPI.transfer16(uint16_t data)
: 16비트 데이터를 전송하고 수신할 때 호출하는 함수입니다.SPI.transfer(buffer, size)
: 여러 바이트의 데이터를 송수신할 때 호출하는 함수로, 데이터가 저장된 버퍼와 전송할 byte 수를 받습니다.