INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wie frag ich mehrere Taster in einem Programm ab?
29.05.2015, 20:02
Beitrag #1
Wie frag ich mehrere Taster in einem Programm ab?
Moin,

ich hab da mal eine Verständnissfrage. Ich hoffe Ihr könnt mir helfen, obwohl ich mir da schon fast sicher bin ;-)


Ich nutze einen Taster (Taster_A) der, wenn er gedrückt wurde (von insg. 8 Relais),eine bestimmte Anzahl (FXLoop_1) einschaltet. Erneutes Drücken schaltet die gleiche Relais wieder aus. Jetzt möchte ich 3 weiter Taster integrieren die das gleiche mit den 8 Relais machen, nur eben in eine andere Kombination an Relais.

z.b. Taster 1 schaltet 1,2,5,7
Taster 2 schaltet 1,5,7,8 usw...

Der erste versuch war, das ich quasi 4 "Unterprogramme" geschrieben habe, die dann im Loop einzeln durchliefen.
Aber das geht doch bestimmt auch mit einem,oder?

Ich komm nicht dahinter wie ich die Parameter so mitgeben kann, das in der Routine erkannt wird welcher Taster das war und dann die entsprechenden Ausgänge zugeordnet werden.


Hier mal mein derzeitiges Konstrukt mit nur einem Taster:

Code:
int Taster_A = 2;
const int LED_A = 22;
const int FXLoops[] = {30,31,32,33,34,35,36,37};

int FXLoop_1[] = {30,32,35,37};




int MaxFXLoop_1 = sizeof(FXLoop_1)/sizeof(int);



int oldButtonState = HIGH;
int x = 1;


void setup() {
  
  for (int i = 0; i < 8; i++)
  {
    pinMode(FXLoops[i], OUTPUT);
  }
  
  pinMode(Taster_A, INPUT_PULLUP);
  pinMode(LED_A, OUTPUT);
  
}


void loop() {

   SW();
}

void SW() {

    int newButtonState = digitalRead(Taster_A);

    if (newButtonState == HIGH && oldButtonState == LOW) {

        if (x == 0)
        {
            digitalWrite(LED_A, HIGH);
            
            for (int i = 0; i < MaxFX_1; i++)
            {
                digitalWrite(FXLoop_1[i], HIGH);
            }  
            x = 1;
        }
        
        else
        {
            digitalWrite(LED_A, LOW);
            
            for (int i = 0; i < MaxFXLoop_1; i++)
            {
                digitalWrite(FXLoop_1[i], LOW);
            }
            x = 0;
        }
    
    }
    
    
    oldButtonState = newButtonState;
    
    delay (10);
}


Gruß
Alex
Diese Nachricht in einer Antwort zitieren
02.06.2015, 14:33 (Dieser Beitrag wurde zuletzt bearbeitet: 02.06.2015 14:43 von DaniDD.)
Beitrag #2
RE: Wie frag ich mehrere Taster in einem Programm ab?
Ich würde das wie folgt lösen. Ich hoffe du hast keinen Uno, der hat nur 2 Interrupts.
Schalter müssen natürlich an die Interrupt fähigen Pins angeschlossen werden.
http://www.arduino.cc/en/pmwiki.php?n=Re...hInterrupt
Programmiere einfach 4 Interrupts die jeweils beim betätigen des jeweiligen Tasters das zugewiesene Unterprogramm aufrufen. Da negierst du die Buttonstate des jeweiligen Tasters. Dann wenn high, setze die gewünschten Relais auf high und wenn low dann alle Relais wieder auf low setzen.
Im Prinzip sehr simpel...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.06.2015, 16:01
Beitrag #3
RE: Wie frag ich mehrere Taster in einem Programm ab?
(02.06.2015 14:33)DaniDD schrieb:  Ich würde das wie folgt lösen. Ich hoffe du hast keinen Uno, der hat nur 2 Interrupts.
Was ist mit pinChangeInt? Da kann man praktisch an jedem Pin einen Interrupt auslösen.

Zitat:Schalter müssen natürlich an die Interrupt fähigen Pins angeschlossen werden.
So ein Quatsch. Wer hat Dir das erzählt? In der Regel reicht Polling wunderbar aus. Für einen einfachen Taster oder Schalter "verschwendet" man keinen Interrupt.

Zitat:Programmiere einfach 4 Interrupts die jeweils beim betätigen des jeweiligen Tasters das zugewiesene Unterprogramm aufrufen. Da negierst du die Buttonstate des jeweiligen Tasters.
In einer Interrupt-Routine sollte man nicht viel machen. Sie sollte so schnell wie möglich wieder rausspringen.
Besser das ganze per Polling machen.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.06.2015, 16:10
Beitrag #4
RE: Wie frag ich mehrere Taster in einem Programm ab?
1/2) Ist doch egal. Viele Wege führen nach Rom. Falls der Due verwendet wird, so kann man so viele Interrupts festlegen wie es Pins gibt!

3) Oh, na wenn schon negieren einer Variable zu viel für ein ISR ist, was darf man denn sonst da drin machen?!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.06.2015, 16:23
Beitrag #5
RE: Wie frag ich mehrere Taster in einem Programm ab?
(02.06.2015 16:10)DaniDD schrieb:  3) Oh, na wenn schon negieren einer Variable zu viel für ein ISR ist, was darf man denn sonst da drin machen?!
Nein, das ist natürlich nicht zu viel...

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.06.2015, 16:40
Beitrag #6
RE: Wie frag ich mehrere Taster in einem Programm ab?
Ja mehr soll ja da nicht gemacht werden. Der Rest, die Abfrage wie die Variable gerade gesetzt ist, das wird ja üblicherweise im loop abgefragt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.06.2015, 17:49
Beitrag #7
RE: Wie frag ich mehrere Taster in einem Programm ab?
(02.06.2015 16:40)DaniDD schrieb:  Ja mehr soll ja da nicht gemacht werden. Der Rest, die Abfrage wie die Variable gerade gesetzt ist, das wird ja üblicherweise im loop abgefragt.
Tja, dann muss man auch normalerweise noch irgendwie entprellen. Ich denke mal, dass man dann auch gleich alles in loop() machen kann.
Aber je nach Geschmack...

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.06.2015, 19:05
Beitrag #8
RE: Wie frag ich mehrere Taster in einem Programm ab?
Hey,
Danke für die Ideenanstöße, aber ich hab es jetzt im Loop gelöst. Indem ich Parameter so definiere das ich sie als "Unterprogramm-Aufruf" mitgeben kann.
Also im Loop SW(A) SW(B) SW© SW(D).

Vielleicht nicht so elegant, aber gelöst :-D
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Fehler in meinem Programm Franz54 7 160 01.12.2016 23:58
Letzter Beitrag: hotsystems
  mehrere Taster entprellen Kitt 15 516 24.10.2016 21:17
Letzter Beitrag: georg01
  A4988 Driver mit einem Nema 17 Hangloose 3 140 04.09.2016 21:49
Letzter Beitrag: Hangloose
  Taster für mehrere Funktionen matthias3579 5 349 16.08.2016 16:00
Letzter Beitrag: StephanBuerger
  Steuern von 4 Servo mittels eines Taster und eines Potis Jackie09 17 757 16.07.2016 11:43
Letzter Beitrag: Binatone
  Selbstfahrender Roboter Programm änderung hilfe ? arekklone 11 543 06.07.2016 14:59
Letzter Beitrag: Binatone
  Mehrere Wertabfragen blebbens 5 374 18.06.2016 22:58
Letzter Beitrag: Scheams
  2 und mehrere Led´s mit Fernbedienung AN / AUS + Blinkfunktion Golffahrer 22 943 07.06.2016 11:31
Letzter Beitrag: hotsystems
  Schwellwert mit Taster ändern malsehen 16 1.412 12.04.2016 20:11
Letzter Beitrag: malsehen
  Mehrere Abläufe gleichteitig mit "Millis" MarkusSpielt 3 664 11.04.2016 18:23
Letzter Beitrag: MarkusSpielt

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste