Wenn man Taster als Schalter benutzen will, ist hier eine schöne Lösung.

Programmierung der Arduino UNO, Arduino MEGA, Arduino Nano, ........
Antworten
Benutzeravatar
Admin
Administrator
Beiträge: 1270
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Wenn man Taster als Schalter benutzen will, ist hier eine schöne Lösung.

Beitrag von Admin »

Hier mal ein Code um Taster als Schalter zu benutzen. Ausserdem haben ich einen Piepton reingehängt, der bestätigt, dass die Umschaltung erfolgt war. Wenn man denn nutzen möchte muss man für dieses Beispiel am Pin.7 einen kleinen Lautsprecher mit so 200 Ohm Vorwiderstand gegen GND anschließen. Die Taster prellen nicht, weil sie 300ms Pause macht, bevor er wieder neu reagiert. Wenn man mit dem Finger auf der Taste bleibt, wiederholt er das umschalten, an kann also auch ein automatisches, ein/aus/ein/aus, alle 300ms bekommen, wenn man auf der Taste bleibt. Hier sind 2 solche "Schalter" zur Probe erstellt. Diese Pausezeit kann man in den Deklarationen für jeden Schalter einzeln anpassen. Ausserdem habe ich hier die Schalt - Ausgänge für LOW - Aktive Relaisplatinen Programmiert. Das heißt, die Relais schalten mit Minus, also GND ein, mit Plus, also 5V VCC aus. Was bei den meisten Relais Platinen der Fall ist. Die Taster werden ohne irgend welche zusätzliche Bauteile zwischen GND und den Taster Pin. angeschlossen. Der Tasterpin wird im Arduino selbst durch den Code, = "pinMode(Taster01, INPUT_PULLUP);", über etwa 10KOhm auf HIGH gelegt.

Code: Alles auswählen

/*
##################################
Taster als Schalter benutzen
mit Piepton zur Bestätigung. 
vom 06.12.2025
##################################
*/
//==============================================================================
//============================ Deklarationen ===================================
//==============================================================================
// Baudrate fuer Serial Schnittstelle
const int baudSerial = 9600;
//-----------------------Taster01-----------------------------------------------
// const byte ist im Programm Constant und byte ist fuer Werte 0-255
const byte Taster01 = 15;           // Pin 15 wird Constant als Taster01 bezeichnet
byte Tasterstatus01 = 0;            // Zum Abfragen des Tatsenpins
byte Tastenmerker01 = 0;            // Zum Merken des aktuellen Tatsenstatus
unsigned long Sekundenablauf01 = 0; // Tastenabfrage von Taster01 300ms aussetzen
const unsigned long Pausezeit01 = 300;
//-----------------------Taster02-----------------------------------------------
const byte Taster02 = 16;           // Pin16 wird Constant als Taster02 bezeichnet
byte Tasterstatus02 = 0;
byte Tastenmerker02 = 0;
unsigned long Sekundenablauf02 = 0; // Tastenabfrage von Taster02 300ms aussetzen
const unsigned long Pausezeit02 = 300;
//-----------------------------------------------------------------------------
unsigned long milliablauf = 0;
//-----------------------AusgangPIN 25-----------------------------------------
const byte Ausgang01 = 25;          // Pin 25 ist für das Relais01
byte Ausgangsstatus01 = 1;
//-----------------------AusgangPIN 26-----------------------------------------
const byte Ausgang02 = 26;          // Pin 26 ist für das Relais02
byte Ausgangsstatus02 = 1;
//----------------------Tasten Ton einrichten----------------------------------
const byte Tonpin = 7;
int Tonfrequenz = 800;
int Zeit = 50;
//=============================================================================
//=====================================   SETUP   =============================
//=============================================================================
void setup() {
  // Serial Schnittstelle starten
  Serial.begin(baudSerial);
  //-----------Taster einrichten-----------------------------------------------
  // Pin 15 fuer Taster01 wird intern auf plus gelegt. Mit GND ueber Taste aktivieren
  pinMode(Taster01, INPUT_PULLUP);
  // Pin 16 fuer Taster02 wird intern auf plus gelegt. Mit GND ueber Taste aktivieren
  pinMode(Taster02, INPUT_PULLUP);
  //-----------Relaisausgänge einrichten---------------------------------------
   Ausgangsstatus01 = 1;                       // Status auf HIGH
  digitalWrite (Ausgang01, Ausgangsstatus01); // Dass Relaisausgang beim Start "aus" ist
  pinMode(Ausgang01, OUTPUT);                 // Pin 25 (Ausgang01) ist als Ausgang aktiviert
  Ausgangsstatus02 = 1;                       // Status auf HIGH
  digitalWrite (Ausgang02, Ausgangsstatus02); // Dass Relaisausgang beim Start "aus" ist
  pinMode(Ausgang02, OUTPUT);                 // Pin 26 (Ausgang02) ist als Ausgang aktiviert
}
//============================================================================
//================================     LOOP    ===============================
//============================================================================
void loop() {
  milliablauf = millis();
  //-----------Taster01 abfragen----------------------------------------------
  if (milliablauf - Sekundenablauf01 >= Pausezeit01) { // 200msec abgelaufen?
    Tasterstatus01 = digitalRead(Taster01);         // Pin von Taster01 abfragen
    if (Tasterstatus01 == LOW) {                    // Ist Taster01 gedrueckt?
      Tastenmerker01 = !Tastenmerker01;  // Merken dass Taster01 gedrueckt wurde
      Serial.print(F("Taste 1 "));
      Serial.println(Tastenmerker01);
      tone(Tonpin, Tonfrequenz, Zeit); // Kurzer Bestätigungspiep bei tastendruck 
      Sekundenablauf01 = milliablauf;                  // Die 300ms neu starten
    }
  }
  //-----------Taster02 abfragen----------------------------------------------
  if (milliablauf - Sekundenablauf02 >= Pausezeit02) { // 200msec abgelaufen?
    Tasterstatus02 = digitalRead(Taster02);         // Pin von Taster02 abfragen
    if (Tasterstatus02 == LOW) {                    // Ist Taster02 gedrueckt?
      Tastenmerker02 = !Tastenmerker02;             // Merken dass Taster02 gedrueckt wurde
      Serial.print(F("Taste 2 "));
      Serial.println(Tastenmerker02);
      tone(Tonpin, Tonfrequenz, Zeit); // Kurzer Bestätigungspiep bei tastendruck 
      Sekundenablauf02 = milliablauf;                  // Die 300ms neu starten
    }
  }
  //----------- Ausgänge nach Schalterstellung schalten ----------------------
  Ausgangsstatus01 = !Tastenmerker01; //Signal umkehren, da die Relais LowAktiv sind
  digitalWrite (Ausgang01, Ausgangsstatus01); //Signal ausgeben zum Relais
   Ausgangsstatus02 = !Tastenmerker02;
  digitalWrite (Ausgang02, Ausgangsstatus02);
}
//=======================Loop Ende============================================
Antworten

Zurück zu „Programmierung der 8Bit Controller“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste