de:arduino:switch

No renderer 'pdf' found for mode 'pdf'

Schalter

Schalter, Drucktasten

Arduino 5V HI aktiver Schalter

Das Bild oben zeigt eine HI-Aktive-Switch-Verbindung. Im offenen Ruhezustand des Stromkreises ist der Arduino über einen 10-kΩ-Widerstand (Stripper) mit Masse verbunden, sodass er sich im Zustand LO befindet. Durch Drücken der Taste wird das Netzteil an den Eingang angeschlossen (es wird empfohlen, einen 100Ω-Widerstand anzuschließen), sodass es in den Zustand HI wechselt.

5V HI aktiver Schalter
forrás: https://www.arduino.cc/en/Tutorial/Button

Das folgende Beispielprogramm schaltet die eingebaute LED basierend auf dem Status der Drucktaste ein. Unten finden Sie ein Beispielprogramm für einfaches Threading:

Klicken Sie hier, um den Code zu entsperren

Klicken Sie hier, um den Code zu entsperren

/*
  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);
  }
}


Das alles prägnanter:

Klicken Sie hier, um den Code zu entsperren

Klicken Sie hier, um den Code zu entsperren

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:
	;
  }
}

Arduino 5V LO aktiver Schalter

Das Bild oben zeigt eine aktive LO-Schalterverbindung. Wenn der Stromkreis offen und in Ruhe ist, wird der Arduino über einen 10-kΩ-Widerstand (Pull-up-Widerstand) an die Stromversorgung angeschlossen (es wird empfohlen, einen 100-k-Widerstand im Voraus anzuschließen), so dass er sich im Zustand HI befindet. Durch Drücken der Taste wird der Primer mit dem Eingang verbunden, sodass er in den Zustand LO wechselt.

Die Arduinoes haben auch einen internen Pull-up-Widerstand, der je nach Platinentyp variiert. Uno reicht von 20 kΩ bis 50 kΩ und wegen 50 kΩ bis 150 kΩ. Dieser interne Widerstand kann auf zwei Arten eingeschaltet werden:

Offiziell wie folgt:

Klicken Sie hier, um den Code zu entsperren

Klicken Sie hier, um den Code zu entsperren

pinMode(pin,INPUT_PULLUP);

Dies funktioniert jedoch nicht immer. Auf mehr Boards macht der Compiler einen Fehler. In diesem Fall lautet die Lösung:

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

Natürlich kann mit diesem Verfahren im Vergleich zu einem aktiven 5-V-HI-Schalter mindestens ein Widerstand eingespart werden. Wenn jedoch der Draht zum Schalter lang ist oder große Störungen durch die Umgebung erwartet werden, kann ein hoher Widerstand zu fehlerhaften Erkennungen führen.

12V / 24V HI aktiver Schalter

Natürlich kann der aktive Arduino 5V HI-Schalter auch bei höheren Versorgungsspannungen verwendet werden, indem Eingangswiderstände installiert werden. Der Kondensator und der 100 Ω-Eingangswiderstand sind optional. Bei einem problematischen Eingang ist es auf jeden Fall ratsam, opto zu verwenden, um die kritischen Teile zu trennen.

Schalten mit 24V Stromversorgung:

24V HI aktiver Schalter

Das folgende Beispiel zeigt das Lesen von 8 Drucktasten über einen Analogeingang. Die Eingangswiderstände der Drucktasten sind um 100 kΩ voneinander getrennt. Wenn diese Taste gedrückt wird, gibt der Eingang einen anderen Wert aus. Standardmäßig ist der Eingangspin über einen halben Megaohm-Widerstand (Scraper) mit Masse verbunden.

Arduino 5V 8 Parallelschalter

Im folgenden Code zeigen das zweizeilige I2C-LCD-Display und der serielle Monitor auch den Code der gedrückten Taste an, wie auf dem Foto gezeigt.

Bei ungenauem Betrieb müssen die minimalen Analogwerte (min Array) für die Drucktasten eingestellt werden!

Standardausgabe (ohne Knopfdruck): 9.

5V 8 Parallelschalter

Klicken Sie hier, um den Code zu entsperren

Klicken Sie hier, um den Code zu entsperren

#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);
}

Ich wollte den Dreistellungsschalter sofort nach einem der Programme durchsuchen und nicht nach einem, sondern nach vier, aber ich hatte nicht mehr so ​​viele freie digitale Pins. Es gab jedoch 4 weitere freie Analogeingänge, die perfekt für diesen Zweck geeignet waren. Nach der folgenden Verbindung ergibt der mit Masse verbundene Eingang 0 bis 5 V 1024 und die mittlere Position ergibt ungefähr 600:

Arduino 5V 3-Positionen-Wahlschalter über analogen Anschluss gelesen

  • de/arduino/switch.txt
  • 2022/04/21 15:00
  • ()