デジタル出力を操作する(C言語)
準備
初めて使用する場合は、セットアップ(ボードの取り付け)をおこないます。
DIO-0/16RC-IRCのセットアップ(ラズベリーパイ)
DIO-0/16RC-IRCのセットアップ(NVIDIA Jetson Nano 開発者キット)
プログラムの作成
「test_dio016rc.cpp」というファイル名で以下のファイルを保存します。
(または test_dio016rc.cpp からダウンロードします)
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#define I2C_DEVICE "/dev/i2c-1"
#define DIO016RC_ADDRESS 0x24
// レジスタ
enum PCA9535_Register {
PCA9535_Reg_InputPort0,
PCA9535_Reg_InputPort1,
PCA9535_Reg_OutputPort0,
PCA9535_Reg_OutputPort1,
PCA9535_Reg_PolarityInversionPort0,
PCA9535_Reg_PolarityInversionPort1,
PCA9535_Reg_ConfigurationPort0,
PCA9535_Reg_ConfigurationPort1,
};
// 初期化
int DIO016RC_Init(int fd) {
if (ioctl(fd, I2C_SLAVE, DIO016RC_ADDRESS) < 0) {
perror("DIO016RC_Init(ioctl)");
return 1;
}
// ポート設定
uint8_t reg[3];
reg[0] = PCA9535_Reg_ConfigurationPort0;
reg[1] = 0x00;
reg[2] = 0x00;
if ((write(fd, reg, 3)) != 3) {
perror("DIO016RC_Init(write)");
return 1;
}
return 0;
}
// デジタル出力
int DIO016RC_Output(int fd, uint16_t value) {
uint8_t reg[] = { PCA9535_Reg_OutputPort0, (uint8_t)(~value & 0xff), (uint8_t)((~value >> 8) & 0xff) };
if ((write(fd, reg, 3)) != 3) {
perror("DIO016RC_Output(write)");
return 1;
}
return 0;
}
int main(int argc, char **argv)
{
int fd;
if ((fd = open(I2C_DEVICE, O_RDWR)) < 0) {
perror("open");
exit(1);
}
if (DIO016RC_Init(fd) != 0)
exit(1);
// デジタル出力
// (例)OUT15, 13, 2, 0をオン
if (DIO016RC_Output(fd, 0xa005) != 0)
exit(1);
close(fd);
return 0;
}
動作確認
プログラムをコンパイルします。
$ g++ -o test_dio016rc test_dio016rc.cpp
プログラムを実行します。
$ ./test_dio016rc