读取8421编码开关-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3896|回复: 0

读取8421编码开关

[复制链接]
发表于 2021-6-12 11:47 | 显示全部楼层 |阅读模式
本帖最后由 topdog 于 2021-6-12 16:55 编辑

市场上普遍的8421编码开关有两种式样,一种是按压式(push-wheel),另一种拇指旋转式(thumbwheel )。

拨码开关.jpg


8421数字旋转拨码开关.jpg

8421码又称为BCD码,是十进制代码中最常用的一种。在这种编码方式中,每一位二值代码的“1”都代表一个固定数值。将每位“1”所代表的二进制数加起来就可以得到它所代表的十进制数字。因为代码中从左至右看每一位“1”分别代表数字“8”“4”“2”“1”,故得名8421码。其中每一位“1”代表的十进制数称为这一位的权。因为每位的权都是固定不变的,所以8421码是恒权码。

接线原理图:图一按压式右侧的线路板就比较直观,C是接VCC,从左到右就是8421码值对应的管脚。图二拇指旋转式六个管脚其中一个是GND,其他相同。

8421JIEXIANTUA.jpg

10档位按压式(黄色标注)和16档位拇指旋转式(绿色标注)8421编码开关真值表:
8421拨码开关a.jpg
读取的程序如下:

[pre]const int code1Pin = 6;
const int code2Pin = 5;
const int code4Pin = 4;
const int code8Pin = 3;

void setup() {
  Serial.begin(9600);

  pinMode(code8Pin, INPUT);
  pinMode(code4Pin, INPUT);
  pinMode(code2Pin, INPUT);
  pinMode(code1Pin, INPUT);
}

void loop() {
  int code8421 = 0;
  if (digitalRead(code1Pin) == HIGH) {
    code8421 += 1;
  }

  if (digitalRead(code2Pin) == HIGH) {
    code8421 += 2;
  }

  if (digitalRead(code4Pin) == HIGH) {
    code8421 += 4;
  }

  if (digitalRead(code8Pin) == HIGH) {
    code8421 += 8;
  }

  Serial.print("Now code8421 is:  ");
//Serial.println(code8421, HEX);
  Serial.println(code8421, DEC);
  delay(100);

}[/pre]



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:30 , Processed in 0.079022 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表