{{ :wiki:arduino:switches.png?200|Kapcsolók}} ====== Kapcsolók, nyomógombok ====== ===== Kapcsolók, nyomógombok hardveres bekötései ===== ==== 5V HI aktív kapcsoló ==== {{anchor:5v_hi_switch}} {{:wiki:arduino:arduino_switch_hi_act.png|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. {{:wiki:arduino:button.png|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 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ó ==== {{:wiki:arduino:arduino_switch_lo_act.png|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 ==== {{anchor:pullup_intern}} 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 [[hu:arduino:switch#5v_hi_switch|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ó ==== {{:wiki:arduino:arduino_switch_12v_hi_activ.png|12V HI aktív kapcsoló}} Az [[hu:arduino:switch#5v_hi_switch|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: \\ {{:wiki:arduino:arduino_switch_24v_hi_activ.png|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. {{:wiki:arduino:arduino_switch_8_pb.png|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. {{:wiki:arduino:my_foto_8_par_pbutton.jpg|}} === Példaprogram === #include #include #include #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: {{:wiki:arduino:arduino_3_allasu_kapcsolo_analog.png|Arduino 5V 3 állású kiválasztókapcsoló beolvasása analóg porton keresztül}}