hu:arduino:switch

Differences

This shows you the differences between two versions of the page.

hu:arduino:switch [2022/04/21 15:02] ()
 1:  1:
 +{{ :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
  • ()