Arduinoのアナログピン1つで5chのスイッチ

海外製のLCDディスプレイシールドの回路図を眺めていたらアナログピン1つで5chのスイッチを実現しているっぽいのでブレッドボードで作ってみました。試してみた感想としては1品だけで使えるので便利です。何か作るときには応用として使おうと思います。

回路図

スケッチ

//example use of LCD4Bit_mod library
#include <stdio.h>

//Key message
char msgs[5][15] = {"Right Key OK ", 
                    "Up Key OK    ", 
                    "Down Key OK  ", 
                    "Left Key OK  ", 
                    "Select Key OK" };
int adc_key_val[5] ={30, 150, 360, 535, 760 };
static uint8_t NUM_KEYS = 5;
int adc_key_in;
int key=-1;
static uint8_t oldkey=-1;

void setup() { 
  // Setup Serial
  Serial.begin(19200);
  
  Serial.println("KEYPAD testing... pressing");
    
}

void loop() {

  adc_key_in = analogRead(0);    // read the value from the sensor  
  digitalWrite(13, HIGH);  
  key = get_key(adc_key_in);		        // convert into key press
    
    if (key != oldkey)				    // if keypress is detected
      {
      delay(50);		// wait for debounce time
      adc_key_in = analogRead(0);    // read the value from the sensor  
      key = get_key(adc_key_in);		        // convert into key press
      if (key != oldkey)				
        {			
        oldkey = key;
        if (key >=0)
          {
        Serial.println(msgs[key]);
          }
        }
      }
  
  //delay(1000);
  digitalWrite(13, LOW);
}

// Convert ADC value to key number
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;     // No valid key pressed
    return k;
}

  1. コメントはまだありません。

  1. トラックバックはまだありません。

 
%d人のブロガーが「いいね」をつけました。