本篇介绍了如何使用Arduino,连接欧姆龙旋转编码器,获取编码器信号,并通过java读取数据。
1. 接线
编码器的A、B、Z相分别连接Arduino的2、4、3号引脚。
2. 烧录程序
安装Arduino软件,编写如下程序,并烧录到Arduino中
#define ENCODER_A_PIN 2 // BLack 黑线 A相位
#define ENCODER_Z_PIN 3 // Orange 橙线 Z相
#define ENCODER_B_PIN 4 // White 白线 B相
volatile long counter = 0; // 定义 counter 计数器,用于计数
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(ENCODER_A_PIN, INPUT_PULLUP);// 将中断的引脚设置为输入PULLUP模式
pinMode(ENCODER_B_PIN, INPUT_PULLUP);// 将引脚设置为输入PULLUP模式
pinMode(ENCODER_Z_PIN, INPUT_PULLUP);// 将中断的引脚设置为输入PULLUP模式
// 使用attachInterrupt设定绑定中断功能的引脚、触发时要执行的函式、以及执行方式
attachInterrupt(digitalPinToInterrupt(ENCODER_A_PIN), interrupt_a_change, CHANGE);
attachInterrupt(digitalPinToInterrupt(ENCODER_Z_PIN), interrupt_z_change, CHANGE);
}
void loop() {
// Serial.println("串口数据12345678ABCD"); // 串口显示 计数器数值
Serial.println(counter); // 串口显示 计数器数值
}
// 引脚A中断时,调用的函数
void interrupt_a_change() {
int temp_a = digitalRead(ENCODER_A_PIN);
int temp_b = digitalRead(ENCODER_B_PIN);
// 判断编码器的选择方向
if (temp_a == temp_b)
{
counter--; // 向后转 计数器-1
} else {
counter++; // 向前转 计数器+1
}
}
// 引脚Z中断时,调用的函数
void interrupt_z_change() {
counter = 0; // 归零
}
3. 读取数据(java)
SerialPort serialPort = SerialPort.getCommPort("COM5"); // 替换为您的串口名称
serialPort.setBaudRate(115200); // 设置波特率
if (serialPort.openPort()) {
System.out.println("arduino 串口已打开。");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
String s = reader.readLine();
while(s!=null){
System.out.println("编码器数据:"+s);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
reader.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("无法打开串口。");
}
serialPort.closePort();
System.out.println("串口已关闭。");