×

使用IO和继电器扩展器通过键盘控制继电器

消耗积分:2 | 格式:zip | 大小:1.39 MB | 2023-02-07

杨福林

分享资料个

描述

使用 IO 扩展器和继电器扩展器通过键盘控制继电器。

需要使用键盘控制继电器?那么您需要继电器扩展器的IO 扩展器每个 IO 扩展器最多可以控制 16 个菊花链式继电器扩展器,总共 256 个继电器。然后使用连接到 IO 扩展器的键盘手动控制每个继电器。

final_pxAu2zWWMN.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 

使用FCB Maker将 7 或 8 个数字引脚转换为 1 个模拟引脚。然后连接 3x4 或 4x4 数字键盘。

接线图

wiring_E7aoyg1bLr.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 

注意:在上面的接线图中,IO Expander 和 Arduino Nano 由第一个继电器板供电。所有继电器扩展器都由它们所连接的继电器板供电。

输入继电器编号,然后按“#”键打开继电器。要关闭继电器,请使用“*”键。
/* IO Expander

 *  
 * Relay Keypad
 *
 */

#include 
#include "IOExpander.h"
#include 

//#define SERIAL_DEBUG
#define MAX_RELAYS    64

#ifdef SERIAL_DEBUG
SoftwareSerial swSerial(8,7);
#endif

char cmd[16];
char key[16] = {};

#define KEYPAD_4x3
//#define KEYPAD_4x4

#ifdef KEYPAD_4x3
#define MAX_KEYS    12

int thresholds[MAX_KEYS] = {18,329,598,1000,1183,1346,1603,1723,1833,2009,2093,2172};
char keypad[MAX_KEYS] = {'1','2','3','4','5','6','7','8','9','*','0','#'};
#endif

#ifdef KEYPAD_4x4
#define MAX_KEYS    16

int thresholds[MAX_KEYS] = {105,394,617,847,1049,1220,1357,1502,1634,1748,1840,1939,2031,2110,2177,2249};
char keypad[MAX_KEYS[ = {'1','2','3','A','4','5','6','B','7','8','9','C','*','0','#','D'};
#endif

void setup()
{
  int i;
 
  Serial.begin(115200);

#ifdef SERIAL_DEBUG
  swSerial.begin(115200);
  swSerialEcho = &swSerial;
  swSerial.println("DEBUG");
#endif  
  wdt_enable(WDTO_8S);

  delay(100);   // Wait 100 ms for IO Expander Title
  while (Serial.available()) Serial.read(); // Flush RX buffer
 
  sprintf(cmd, "eb%d", MAX_RELAYS / 16);
  SerialCmdDone(cmd);

  // Configure keypad
  SerialCmdDone("s2t1d;sc0,0");
  Serial.print("sc");
  for (i = 0; i < MAX_KEYS; i++)
  {
  if (i) Serial.print(",");
    Serial.print(thresholds[i]);
    Serial.print(",\"");
    Serial.print(keypad[i]);
    Serial.print("\"");
  }
  SerialCmdDone(";sd100");   // Keypad debounce 100ms
}

void loop()
{
  int i,relay;
  char ch;
 
  SerialCmd("s2r");
  int len = strlen(key);
  SerialReadString(key+len, sizeof(key)-len); // Concatinate keypad characters
  SerialReadUntilDone();

  for (i = 0; i < strlen(key); i++) {
    ch = key[i];
  if (!isdigit(ch)) {
      key[i] = NULL;
  if (ch == '*' || ch == '#') {
        relay = atoi(key);
  if (relay > 0 && relay <= MAX_RELAYS) {
          Serial.print("e");
          Serial.print(relay);
  if (ch == '#') Serial.println("o"); // Turn on relay
  else Serial.println('f');   // Turn off relay
          SerialReadUntilDone();  // Wait for the '>' prompt
  }
  }
  strcpy(key, key+i+1);
  break;
  }
  }
 
  wdt_reset();
  delay(100);
}

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !