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
Taster keine Funktion leider
08.08.2014, 19:58 (Dieser Beitrag wurde zuletzt bearbeitet: 08.08.2014 20:24 von rudi52056.)
Beitrag #9
RE: Taster keine Funktion leider
Hallo

Die Taster haben jetzt eine Funktion , aber wenn ich den 1 drücke dann laufen beide ampeln nach einander auch beim anderen Taster 2 geht das gleiche.

Super danke jetzt gehts Smile

Taster auf GND und es geht

Vielen Dank nochmal Youtube Video kommt.

mfg Rudi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.08.2014, 21:55 (Dieser Beitrag wurde zuletzt bearbeitet: 08.08.2014 22:07 von rudi52056.)
Beitrag #10
RE: Taster keine Funktion leider
Hallo

Wie versprochen das Video in Youtube Youtube link

Hallo

Habe noch was Vergessen die == 2 müssen sein da sonst die Ampel bei Tasten druck Ampel 1 und danach Ampel 2 schaltet und nicht wie im Video zusehen ist.

if (fahrtfreigabe == 2)

und es läuft Smile

Danke nochmal für deine Hilfe

mfg Rudi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.08.2014, 09:25
Beitrag #11
RE: Taster keine Funktion leider
(07.08.2014 17:14)rkuehle schrieb:  .....
1. Wie schon 1000 mal betont: vergesst (bis auf Ausnahmen) die delay()-FunktionExclamationExclamationExclamation Während delay() kann alles passieren und der Arduino nimmt keinerlei Notiz davon, damit auch kein Interrupt!
......

Hallo Ricardo,
entschuldige Bittte wenn ich die Aussage mit den Interrupts in Frage stelle, aber bei mir funzt das hervorragend....siehe Code:
Code:
// Interrupt  Test

// set pin numbers:
unsigned char led = 4 ;      // the number of the green LED pin
unsigned char led2 = 6 ;      // the number of the red LED pin

// variables
unsigned int i0;
unsigned int i1;

void setup() {

     Serial.begin(9600);
    
     pinMode(2, INPUT);
     pinMode(3, INPUT);
     digitalWrite(2, 1); // Pullup fuer Taste einschalten
     digitalWrite(3, 1); // Pullup fuer Taste einschalten
     pinMode(led, OUTPUT);
     pinMode(led2, OUTPUT);
    
     digitalWrite(9,1);  // Blaue LED Ein weil Reset
     delay(2000);        // kurz Alife anzeigen
     digitalWrite(9,0);  // Blaue LED wieder AUS
    
i0 = 0;    
i1 = 0;    
    
//##### Interrupt
attachInterrupt(0, pause0 , FALLING);    // Interrupt Pin2 freigeben
attachInterrupt(1, pause1 , FALLING);    // Interrupt Pin3 freigeben
    
}

void loop()
{
  
digitalWrite(led2,0);
digitalWrite(led,1);
delay(10000);
digitalWrite(led,0);
digitalWrite(led2,1);

Serial.print(i0);
Serial.print("  ");
Serial.println(i1);

}

void pause0()
{
     i0++;
}

void pause1()
{
     i1++;
}

Hier sind beide Interrupts aktiv und da hängt jeweils eine Taste am Port und die Integers zählen wunderbar hoch während ein delay aktiv ist. Das Programm macht nichts anderes als LED Grün einschalten das delay aktiv ist und solange tanze ich auf den Tasten Quist...dann blitzt kurz die Rote LED auf solange die Integers auf dem Monitor ausgegeben werden und das Spiel geht weiter...klappt hervorragend.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.08.2014, 10:18 (Dieser Beitrag wurde zuletzt bearbeitet: 09.08.2014 10:22 von rkuehle.)
Beitrag #12
RE: Taster keine Funktion leider
Moin Bitklopfer,
yup, da hast du Recht. Was ich geschrieben habe ist Unsinn. Im Gegenteil: ein delay() in der Loop() wird durch eine ISR sogar unterbrochen, also ein bisschen verlängert. Hier stehts ja auch: http://arduino.cc/en/pmwiki.php?n=Reference/Delay
Zitat:Certain things do go on while the delay() function is controlling the Atmega chip however, because the delay function does not disable interrupts. Serial communication that appears at the RX pin is recorded, PWM (analogWrite) values and pin states are maintained, and interrupts will work as they should.
Wäre mal interessant zu wissen was Rudi nun wirklich am Code bzw. an der Hardware geändert hat, dass es jetzt läuft. (Wahrscheinlich was es nur die Schaltung der Taster Huh )Dann könnte man noch was lernen.
Grüße Ricardo
PS: Warum willst du dich entschuldigen? Dein Einwand war doch völlig berechtigt und ich möchte ja auch was lernenSmile

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.08.2014, 10:57
Beitrag #13
RE: Taster keine Funktion leider
(09.08.2014 10:18)rkuehle schrieb:  yup, da hast du Recht. Was ich geschrieben habe ist Unsinn. Im Gegenteil: ein delay() in der Loop()...
Vielleicht kommt das Missverständnis daher, dass delay in einer Interrupt-Routine nicht funktioniert. ...aber umgekehrt ist's kein Problem.

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
09.08.2014, 11:57
Beitrag #14
RE: Taster keine Funktion leider
Hallo

So habe die Taster von 2 und 3 auf GND. (Ausgang an Arduino)

Und nur die 2 Befehle von

fahrtfreigabe = 1;
fahrtfreigabe = 2;

wieder zück auf

fahrtfreigabe == 1;
fahrtfreigabe == 2;

gesetzt und es ging.

Ohne das zweite = geht es so

Start beide Leds Rot das war ok aber bei Taster 2 und 3 ging es in die Schleife in einem durch.

Erstens fahrtfreigabe = 1; und dann gleich in fahrtfreigabe = 2; und das jedes mal.

mfg rudi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.08.2014, 16:28
Beitrag #15
RE: Taster keine Funktion leider
(09.08.2014 10:18)rkuehle schrieb:  ....
PS: Warum willst du dich entschuldigen? Dein Einwand war doch völlig berechtigt und ich möchte ja auch was lernenSmile

Hi Ricardo,
klaro...lernen tut man auf dem Gebiet IMMER...alte Weisheit in dem Beruf. Nun ich habe schon Respekt vor deinen Arduino und sonstigen Kenntnissen gewonnen nachdem ich hier ja auch Beiträge von dir in Threads lese wo ich mich nicht an der Diskussion beteilige...Shy von daher dachte ich schon das du da gesicherte Erkenntnisse gepostet hast. Nachdem ja aber Interrupts grundsätzlich dazu da sind um laufende Prozesse für ein aktuelles Ereignis zu unterbrechen bin ich der Sache eben mal nachgegangen wobei ich nicht mal behaupten möchte das das der unterste Grund in dem Fall ist zumal ich aus alten Tagen (Texas 9900) Kenntnisse über Interruptstrukuren habe die etwas umfangreicher waren wie die im 328er; z.B. gab es dort einen NMI, also einen Non Maskable Interrupt der u.a. zum Debuggen benutzt wurde und mit dem du sogar EPROM Bereiche im Singel-Stepp austesten konntest. War ne geile Sache...damals vor 30 Jahren...

Aber zurück zum Arduino hier, delay() läuft in der Interruptroutine definitiv nicht. Alternativ habe ich es dann mit der millis() Funktion versucht....geht auch irgendwie nicht... man kann zwar die millis() einer Variablen zuweisen aber wenn man per while Schleife die Zeit dann absitzen will hängt sich der Prozessor auf. Das einzige was ich als Delay in der Interrupt Routine hinbekommen war ist eine for Schleife und ne simple Variable hochzählen....ob Integer oder Long Integer ist dabei egal.
Des weiteren habe ich es dann noch geschafft ein kleines Delay zu haben in der Int0 Routine um dann zu testen ob in der Int1 Routine noch alles läuft. Fakt ist das während ein Int ausgeführt wird der andere Int einmal erkannt und dann abgearbeitet wird wenn der andere die Kontrolle wieder ans Hauptprogramm abgegeben hat. Ein mehrfaches auslösen des anderen Int solange der andere noch läuft wird dann einfach ignoriert.
Anbei den veränderten Code für die wo es nachvollziehen wollen.
lg
bk
Code:
// Interrupt  Test

// set pin numbers:
unsigned char led = 4 ;      // the number of the green LED pin
unsigned char led2 = 6 ;     // the number of the red LED pin
unsigned char blau = 9;      // Blaue LED

// variables
unsigned int i0;
unsigned int i1;

volatile unsigned long int oldmillis;
unsigned long int int0delay = 10000;

void setup() {

     Serial.begin(9600);
    
     pinMode(2, INPUT);
     pinMode(3, INPUT);
     digitalWrite(2, 1); // Pullup fuer Taste einschalten
     digitalWrite(3, 1); // Pullup fuer Taste einschalten
     pinMode(led, OUTPUT);
     pinMode(led2, OUTPUT);
     pinMode(blau, OUTPUT);
    
     digitalWrite(blau,1);  // Blaue LED Ein weil Reset
     delay(2000);        // kurz Alife anzeigen
     digitalWrite(blau,0);  // Blaue LED wieder AUS
    
i0 = 0;    
i1 = 0;    
    
//##### Interrupt
attachInterrupt(0, pause0 , FALLING);    // Interrupt Pin2 freigeben
attachInterrupt(1, pause1 , FALLING);    // Interrupt Pin3 freigeben

// attachInterrupt(1, pause0 , FALLING);    // Interrupt Pin3 freigeben
// attachInterrupt(0, pause1 , FALLING);    // Interrupt Pin2 freigeben

oldmillis = millis();    
}

void loop()
{
  
digitalWrite(led2,0);
digitalWrite(led,1);
//oldmillis = millis();    
//while(millis() <= (oldmillis + int0delay));
delay(10000);
digitalWrite(led,0);
digitalWrite(led2,1);

Serial.print(i0);
Serial.print("  ");
Serial.println(i1);
//Serial.print("  ");
//Serial.println(oldmillis);

}

void pause0()
{
digitalWrite(blau,1);  // Blaue LED Ein

unsigned long int int0aktuell;
//unsigned long int int0oldmillis = millis();
//int0aktuell = int0oldmillis;
//    while(int0aktuell <= (int0oldmillis + int0delay))int0aktuell = millis();

    for(int0aktuell = 0; int0aktuell < 650000; int0aktuell++){
     digitalWrite(blau,0);  // Blaue LED Ein
     digitalWrite(blau,1);  // Blaue LED AUS
    }

digitalWrite(blau,0);  // Blaue LED AUS
i0++;
}

void pause1()
{
     i1++;
}

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.08.2014, 16:44 (Dieser Beitrag wurde zuletzt bearbeitet: 09.08.2014 16:45 von rkuehle.)
Beitrag #16
RE: Taster keine Funktion leider
Hallo BK,

wow, das ist Grundlagenforschung vom feinsten. Wenn man die Sachen definitv geklärt hat, sollte man vllt. ein kleines Tutorial daraus machen.
Zitat: Fakt ist das während ein Int ausgeführt wird der andere Int einmal erkannt und dann abgearbeitet wird wenn der andere die Kontrolle wieder ans Hauptprogramm abgegeben hat.
Das habe ich irgendwo schonmal gelesen, aber noch nicht getestet. Deshalb habe ich es auch nicht erwähnt.
Zitat:Ein mehrfaches auslösen des anderen Int solange der andere noch läuft wird dann einfach ignoriert.
Das widerum ist mir eine neue Erkenntnis. Danke dafürSmile
Bezüglich "delayed Interrupt" habe ich hier noch was interresantes gefunden: http://www.instructables.com/id/Arduino-...n/?lang=de Könntest du das vielleicht testen bitte?
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  mehrere Taster entprellen Kitt 15 508 24.10.2016 21:17
Letzter Beitrag: georg01
  Can-Bus Shield ok, aber keine Daten Clubsport 38 1.533 01.09.2016 14:17
Letzter Beitrag: Clubsport
Question Keine Verbindung via USB nach flashen des Programms chaoscrack 5 203 23.08.2016 14:58
Letzter Beitrag: hotsystems
  Taster für mehrere Funktionen matthias3579 5 345 16.08.2016 16:00
Letzter Beitrag: StephanBuerger
  Steuern von 4 Servo mittels eines Taster und eines Potis Jackie09 17 751 16.07.2016 11:43
Letzter Beitrag: Binatone
  Funktion mit Parameterübergabe - u8g torsten_156 8 396 22.06.2016 18:53
Letzter Beitrag: Pit
  Schwellwert mit Taster ändern malsehen 16 1.410 12.04.2016 20:11
Letzter Beitrag: malsehen
  3 Schrittmotoren, 2 LED's 1 Taster cichla 0 390 31.03.2016 15:21
Letzter Beitrag: cichla
  Arduino Alarmanlage mit Taster erweitern Vengance 0 521 22.03.2016 17:54
Letzter Beitrag: Vengance
  SD.open() erzeugt keine neue Datei! torsten_156 4 528 11.03.2016 17:31
Letzter Beitrag: Bitklopfer

Gehe zu:


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