简介

波段开关是一种通过旋转操作的开关。当需要超过 2 个档位时,例如多速控制,通常会选择这种开关。波段开关使用模拟输入读取 12 个档位的状态,从而节省了 Arduino 的 IO 资源。该波段开关模块最多有 12 个档位。您还可以调节开关内部的金属扣来改变档位编号,因此使用非常灵活。

波段开关由一个主轴或 “转子 ”组成,主轴或 “转子 ”表面有一个像凸轮一样伸出的接触臂或 “辐条”。它有一系列端子,围绕转子一圈圈排列,每个端子都是 “辐条 ”的触点,通过这些触点可以将许多不同电路中的任何一个连接到转子上。因此,与简单的开关相比,波段开关具有更大的极数和投掷能力。

产品参数

  • 电源电压: 3.3-12V
  • 信号接口: 模拟
  • 尺寸: 43毫米*38毫米

如何更改档位编号

不同固定孔之间的调节金属扣可改变档位编号。

2.png

接线图

Rotary_Switch_Module_Connection_Diagram1.png

示例代码1

int sensorvalue;

void setup() {
  Serial.begin(9600);
}
void loop() {
  sensorvalue = analogRead(0);  // 读取不同档位的ADC数值
  Serial.println(sensorvalue);
  delay(200);
}

示例代码2

每个开关的相同档位值是不同的。因此,通过示例代码1,可以读取每个档位的值,并在以下代码中修改适当的参考值。

/*
 # 该示例代码读取开关档位
 */
int adc_key_val[12] = { 630, 680, 750, 810, 845, 860, 890, 905, 920, 940, 950, 980 };
int NUM_KEYS = 12;
int adc_key_in;
int key = -1;
int oldkey = -1;
void setup() {
  Serial.begin(9600);  // 9600 bps
}
void loop() {
  adc_key_in = analogRead(0);  // 读取输入值
  key = get_key(adc_key_in);   // 转换为档位
  if (key != oldkey)           // 如果检测到档位
  {
    delay(50);                   // wait for debounce time
    adc_key_in = analogRead(0);  // 读取输入值
    key = get_key(adc_key_in);   // 转换为档位
    if (key != oldkey) {
      oldkey = key;
      if (key >= 0) {
        switch (key) {
          case 0:
            Serial.println("S1 OK");
            break;
          case 1:
            Serial.println("S2 OK");
            break;
          case 2:
            Serial.println("S3 OK");
            break;
          case 3:
            Serial.println("S4 OK");
            break;
          case 4:
            Serial.println("S5 OK");
            break;
          case 5:
            Serial.println("S6 OK");
            break;
          case 6:
            Serial.println("S7 OK");
            break;
          case 7:
            Serial.println("S8 OK");
            break;
          case 8:
            Serial.println("S9 OK");
            break;
          case 9:
            Serial.println("S10 OK");
            break;
          case 10:
            Serial.println("S11 OK");
            break;
          case 11:
            Serial.println("S12 OK");
            break;
        }
      }
    }
  }
  delay(100);
}
// 将ADC原始输入值转换为档位
int get_key(unsigned int input) {
  int k;
  for (k = 0; k < NUM_KEYS; k++) {
    if (input < adc_key_val[k]) {
      return k;
    }
  }
  if (k >= NUM_KEYS) k = -1;
  return k;
}

FAQ

如有任何问题、建议或好点子,请访问DF创客社区.