FIXME Diese Seite wurde noch nicht vollständig übersetzt. Bitte helfen Sie bei der Übersetzung.
(diesen Absatz entfernen, wenn die Übersetzung abgeschlossen wurde)

Kapcsolók

Kapcsolók, nyomógombok

5V HI aktív kapcsoló

Arduino kapcsoló HI aktív

A fenti képen egy HI aktív kapcsolóbekötés látható. Az áramkör nyitott, nyugalmi helyzetében az Arduino egy 10 kΩ-os (lehúzó) ellenálláson keresztül a grundra van kötve, így "LO" állapotban van. A nyomógomb lenyomásával a tápot kötjük rá (ajánlott egy 100Ω-oes ellenállást azért elékötni) a bemenetre, így az "HI" állapotba kerül.

5V HI aktív kapcsoló
forrás: https://www.arduino.cc/en/Tutorial/Button

A lenti példaprogram a nyomógomb állapota alapján a beépített LED-et kapcsolgatja. Alatta a példaprogram az egyszerű befűzéshez (copy-paste):

/*
  Button

  Turns on and off a light emitting diode(LED) connected to digital pin 13,
  when pressing a pushbutton attached to pin 2.

  The circuit:
  - LED attached from pin 13 to ground
  - pushbutton attached to pin 2 from +5V
  - 10K resistor attached to pin 2 from ground

  - Note: on most Arduinos there is already an LED on the board
    attached to pin 13.

  created 2005
  by DojoDave <http://www.0j0.org>
  modified 30 Aug 2011
  by Tom Igoe

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Button
*/

// constants won't change. They're used here to set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}

Mindez tömörebben (copy-paste-hez):

const int buttonPin = 2;     // the number of the pushbutton pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {
    // button state on:
	;
  } else {
    // button state off:
	;
  }
}

5V LO aktív kapcsoló

Arduino kapcsoló LO aktív

A fenti képen egy LO aktív kapcsolóbekötés látható. Az áramkör nyitott, nyugalmi helyzetében az Arduino egy 10 kΩ-os (felhúzó) ellenálláson keresztül a tápra (ajánlott egy 100Ω-oes ellenállást azért elékötni) van kötve, így "HI" állapotban van. A nyomógomb lenyomásával a grundot kötjük rá a bemenetre, így az "LO" állapotba kerül.

Belső felhúzóellenállás

Az Arduino-kben található belső felhúzóellenállás is, mely board-típusonként változó, az Uno-nál ez 20kΩ - 50kΩ, míg a Due-nél 50kΩ - 150kΩ között változik ennek az éréke. Ez a belső ellenállás kétféle módon kapcsolható be:

Hivatalosan így:

pinMode(pin,INPUT_PULLUP);

de ez nem minden esetben működik, több board-nál a fordító hibát dod rá. Ilyenkor a megoldás:

pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors

Nyilván ezzel a módszerrel legalább egy ellenállás megspórolható az 5V HI aktív kapcsoló-hoz képest, de ha a vezeték a kapcsolóig hosszú, vagy sok zavarójel várható a környezetből, a nagy ellenállás hibás észlelésekhez vezethet.

12V/24V HI aktív kapcsoló

12V HI aktív kapcsoló

Az Arduino 5V HI aktív kapcsoló természetesen nagyobb tápfeszültségről is alkalmazható bemeti ellenállások beiktatásával. A konenzátor és a 100 Ω-os bemeneti ellenállás opcionális. "Problémás" bemenet esetén mindenképpen érdemes opto-t használni a kritikus részek leválasztására.

24V-os táppal a kapcsolás:

24V HI aktív kapcsoló

5V 8 párhuzamos kapcsoló

A lenti példán 8 nyomógomb beolvasása látható egy analóg bemeneten keresztül. A nyomógombok bemeneti ellenállásai 100kΩ-mal vannak egymástól elválasztva, így lenyomásuk hatására más-más értéket fog adni a bemenet. A bemeneti pin alapértelmezetten a grund-ra van kötve egy fél megaohmos (lehúzó)ellenálláson keresztül.

Arduino 5V 8 párhuzamos kapcsoló

A lenti kódban a fényképnek megfelelően a lenyomott nyomógomb kódját kiírja a kétsoros I2C LCD-kijelző és a szerial-monitor is.

Pontatlan működés esetén a nyomógombokhoz tartozó minimális analóg-értékeket (mins array) be kell állítani!

Alapértelmezett kimenet (gombnyomás nélkül): 9.

Példaprogram

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR    0x3F  // Define I2C Address where the PCF8574A is
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

int sw = 0;
int mins[] = {1024, 1000, 800, 740, 640, 560, 520, 480, 400, -100};

LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

int sensorPin = A0;
int sensorValue = 0;
int ledPin = 13;      // select the pin for the LED

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  lcd.begin (16,2);
  
// Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.home ();                   // go home
  lcd.print("button pressed:");
  lcd.setCursor ( 0, 1 );        // go to the 1nd line 
  lcd.print("      (9:none)");
}

void loop() {
  // read the value from the sensor:
  sensorValue = analogRead(sensorPin);
  sw = 0;
  for (int i = 1; sw == 0; i++) {
    if (sensorValue > mins[i]) {
      sw = i;
    }
  }  
  Serial.print (sensorValue);
  Serial.print (" >> button pressed: ");
  Serial.print (sw);
  Serial.println (" (9: none) "); 
  
  lcd.setCursor ( 0, 1 );        // go to the 1nd line 
  lcd.print(sw);  
   
  delay(1000);
}

5V 3 állású kiválasztókapcsoló

A háromállású kapcsolót az egyik programhoz akartam beolvasni, és nem egyet, hanem rögtön négyet, de nem volt már ennyi szabad digitális pin. Viszont volt még 4 szabad analóg bemenet, ezek tökéletesen megfeleltek a célnak. Az alábbi bekötést követően a grund-ra kötött bemenet 0-t, az 5V-ra 1024-et, a középső állás pedig nagyjából 600-at ad eredményként:

Arduino 5V 3 állású kiválasztókapcsoló beolvasása analóg porton keresztül