在arduino上同时读取簧片开关

Posted

技术标签:

【中文标题】在arduino上同时读取簧片开关【英文标题】:read reed switch at the same time on arduino 【发布时间】:2018-04-05 09:26:12 【问题描述】:

我想同时控制 3x3 簧片开关。这是我的草图。

enter image description here

而我的Arduino代码是这样的;

const byte rows = 3;
const byte cols = 3;

byte rowPins[rows] = 3, 4, 5;
byte colPins[cols] = 7, 8, 9;

char keys[rows][cols] = 
  '1', '2', '3',
  '4', '5', '6',
  '7', '8', '9',
;


int result[rows][cols] = 0, 0, 0, 0, 0, 0, 0, 0, 0;

void setup() 
  // put your setup code here, to run once:
  Serial.begin(9600);


  pinMode(13, OUTPUT);
  for (int i = 0 ; i < rows; i++) 
    pinMode(rowPins[i], OUTPUT); //3,4,5 에서 OUTPUT 을 차례대로 준다음에 7,8,9 에서 읽으면됨 ㅎㅎ 외부 풀다운 구현
    digitalWrite(rowPins[i], LOW); //처음에 0v 를 준다.
  
  for (int i = 0; i < cols; i++) 
    pinMode(colPins[i], INPUT);   



void loop() 
  char val = '\0';
  // put your main code here, to run repeatedly:

  digitalWrite(13, HIGH);
  for (int i = 0; i < rows ; i++)  //0,1,2 차례대로 output 을 준다.
    digitalWrite(rowPins[i], HIGH); // 처음에 3번핀에서만 5V를 준다

    for (int j = 0 ; j < cols ; j++) 
      if (!digitalRead(colPins[j])) 
        result[i][j] = 0;
      
      else 
        val = keys[i][j];
        Serial.println(val);
        result[i][j] = 1;
      
    
    digitalWrite(rowPins[i], LOW); //다시 잠가줌

  


  for (int i = 0; i < 3; i++) 
    for (int j = 0; j < 3 ; j++) 
      Serial.print(result[i][j] );
    
    Serial.println("");
  
  Serial.println("-----------------------------------");
  delay(500);


似乎工作得很好。但我发现当我把我的磁铁放在这样的柱子里时 1 0 0 1 0 0 0 0 0 本来我想在我的电脑上显示给我这样的。但它只向我显示全部 0。

如果我这样放置 米 0 0 0 米 0 0 0 0 它向我展示 1 0 0 0 1 0 0 0 0 它完美地工作。如果你知道问题请告诉我

【问题讨论】:

原理图看不懂。我看不到关闭 2 个开关时是否会发生短路。你能画出这样的东西吗:google.fr/…: @Julien 好的,我会尽快发布,谢谢! 【参考方案1】:

根据原理图,电阻器位于列而不是行。如果开关关闭,您需要将每一行拉低并监视高电平。此外,您不能将非活动列保留为输出;而不是将它们从高切换到低,您需要将它们更改为输入。如果不这样做,您很容易造成短路。最后,通过将它们设置为输入,您现在可以检测行和列中的多个闭合开关。

【讨论】:

以上是关于在arduino上同时读取簧片开关的主要内容,如果未能解决你的问题,请参考以下文章

Arduino Uno中断开关LED

arduino下esp8266+web实现远程开关窗和雨滴感应开关窗

一个Arduino最多能同时控制多少个直流电机

arduino不按微动开关也有高点平

「雕爷学编程」Arduino动手做(13)——触摸开关模块

物联网(IoT)开发使用 Arduino 和 Python在 Bluemix 上开发一个 IoT 应用程序之控制LED灯开关