Ampelschaltung Tastersignal solange anstehen bis Abfrage

OP #1031390
Hallo,

ich habe ein Problem bei einer Ampelschaltung:

Wie muss ich das Programm schreiben damit das einmalige Tastersignal von 
P40 oder P41, also die Variable a oder b solange auf 1 ansteht bis das 
Programm zu dieser Abfrage gelaufen ist?

Danke im vorraus!
1
   while (P4 == 0x00)
2
   {
3
   P1 = 0x02;        // 1.Fußgängerampeln rot
4
   P2 = 0x02;        // 2.Fußgängerampeln rot
5

6
  P5 = 0x24;             
7
  warte1ms (10000);
8
    P5 = 0x34;
9
  warte1ms (5000);
10
    P5 = 0x0C;
11
    warte1ms (5000);
12
      P5 = 0x14;
13
    warte1ms (5000);
14
      P5 = 0x24;
15
      warte1ms (10000);
16
        P5 = 0x26;
17
      warte1ms (5000);
18
        P5 = 0x21;
19
        warte1ms (5000);
20
          P5 = 0x22;
21
        warte1ms (10000);
22

23
  }
24

25

26
  if (P40 == 1)          // Ampel 1 Fußgänger    
27
  {
28
   a=1;
29
   while (a==1)
30
   {
31
    P5 = 0x11;              
32
    warte1ms (5000);  // 1.Auto Ampel gelb  2.Auto Ampel grün
33
                    
34
    P5 = 0x21;
35
    warte1ms (15000);     // 1.Auto Ampel rot   2.Auto Ampel grün
36
    
37
    P1 = 0x01;              
38
          warte1ms (15000);     // 1.Fußgängerampel grün
39
    P40 = 0;
40
    a=0;
41
   }
42
  }
43

44

45
  if (P41 == 1)          // Ampel 2 Fußgänger
46
  {
47
   b=1;
48
         while (b==1)
49
   {
50
    P5 = 0x22;              
51
    warte1ms (5000);  // 2.Auto Ampel gelb  1.Auto Ampel grün
52
                    
53
    P5 = 0x0C;
54
    warte1ms (15000);  // 2.Auto Ampel rot   1.Auto Ampel grün
55
                    
56
    P2 = 0x01;              
57
    warte1ms (15000);  // 2.Fußgängerampel grün
58
    P41 = 0;
59
    b=0;
60
   }
61
  }
Gast #1031442
Du musst dir in einer variablen merken ob eine taste gedrückt wurde.



anfrage = 0;

dann
while (1) {
  if (anfrage == 0) {
    ...
  }
  if (anfrage != 0) {
    ...

    anfrage = 0; // erledigt
  }
}


anstatt
warte1ms (5000);

for (n=1;n<5000;n++) {
   if (P40 == 1) {
      anfrage |= 1;
  }
   if (P41 == 1) {
      anfrage |= 2;
  }
}


anfrage hat die werte 0 keine taste 1 eine 2 die andere 3 beide

Leichte C syntaxfehler bitte ich zu entschuldigen da ich eigentlich nur 
PASCAL kann.
OP #1031482
Das verstehe ich nicht ganz denn damit fragst du ja auch einfach nur 
Bedingungen ab ohne die den Zustand der Variable bis zur Abfrage 
beizubehalten.
1
anfrage = 0;
2

3
dann
4
while (1) {
5
  if (anfrage == 0) {
6
    ...
7
  }
8
  if (anfrage != 0) {
9
    ...
10

11
    anfrage = 0; // erledigt
12
  }
13
}

Ich hatte mir das so gedacht der Taster wird einmal gedrückt wärend des 
Durchlaufens der Ampel. Dann wird überprüft ob der Taster gedrückt wurde 
falls ja wird jetzt die Fußgängerampel auf grün geschaltet, sonst halt 
nicht.
Gast #1031494
In jeder Warteschleife nach meinem Muster werden die Taster abgefragt 
und der Zustand in anfrage gemerkt.

Diesen zustand kannst du dann hinterher auswerten.

Ist so noch nicht ganz optimal sollte aber reichen um weiterzukommen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.