This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. {{ :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): \\ <code> /* 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); } } </code> Mindez tömörebben (copy-paste-hez): <code> 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: ; } } </code> ==== 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: <code> pinMode(pin,INPUT_PULLUP); </code> de ez nem minden esetben működik, több board-nál a fordító hibát dod rá. Ilyenkor a megoldás: <code> pinMode(pin, INPUT); // set pin to input digitalWrite(pin, HIGH); // turn on pullup resistors </code> 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 === <code> #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); } </code> ==== 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}} hu/arduino/switch.txt 2022/04/21 15:02()