Ampelsteurerung auf Wartungsmodus

OP #808185
Lesenswert?

Hi!
Ich sitz gerade in der Schule und komme mit dem Programmieren der 
Ampelsteuerung auf den Wartungsmodus (dauerhaft gelb Blinkend) nicht 
weiter!
Ich hab auch das fertige Programm mit gepostet!
(für den PIC16F690)
Ich hoffe ihr könnt mir ein paar Tipps geben
Angehängte Dateien:
Gast #808201
Lesenswert?

Was genau funktioniert denn nicht?

Ich würde mal vorschlagen du formatierst deinen Code anständig und 
kommentierst ihn ein wenig aus... dann wird das ganze doch schon etwas 
übersichtlicher...
#808203
Lesenswert?

Carola Kneißl wrote:
> Hi!
> Ich sitz gerade in der Schule und komme mit dem Programmieren der
> Ampelsteuerung auf den Wartungsmodus (dauerhaft gelb Blinkend) nicht
> weiter!
> Ich hab auch das fertige Programm mit gepostet!
> (für den PIC16F690)
> Ich hoffe ihr könnt mir ein paar Tipps geben

Du musst das ganze komplett umbauen.
So wie das jetzt ist, kriegst du das nicht rein.

Dass du sowas wie eine Schmalspurstatemaschine gebaut
ist, ist schon ok. Aber deine 'ampel' Variable steuert
2 Informationen.
Zum einen steuert sie die Wartezeit von einer Phase zur
nächsten, zum anderen steuert sie die Phasenabfolge.

Das musst du trennen:
Du brauchst eine Variable, die die Wartezeiten regelt und
eine zweite Variable, die die Phasenabfolge steuert

Ungefähr so
1
    ....
2

3
    Phase = 0;            // die erste Phase ist Phase 0
4
    Wartezeit = 10;       // und die soll 10 Einheiten andauern
5

6
    switch( Phase )
7
    {
8
      case 0:
9
        outpu....
10
        ....
11
        Wartezeit--;
12
        if( Wartezeit == 0 )     // Wartezeit abgelaufen?
13
        {
14
          Phase = 1;             // nächste Phase
15
          Wartezeit = 10;        // Wartezeit für diese Phase
16
        }
17
        break;
18

19
      case 1:
20
        outpu....
21
        ....
22
        Wartezeit--;
23
        if( Wartezeit == 0 )     // Wartezeit für diese Phase abgelaufen
24
        {
25
          Phase = 5;             // nächste Phase ist Phase 5
26
          Wartezeit = 5;         // und die soll 5 Einheiten dauern
27
        }
28
        break;
29

30
      .....

Damit kannst du jetzt deinen speziellen Modus implementieren,
weil du bei jeder Phase steuern kannst, welche Phase als
nächstes kommt, und wie lange sie andauern soll. Ein
Blinklicht ist dann nichts anderes als 2 Phasen, die sich
nach dem Ablaufen ihrer Wartezeit immer wieder gegenseitig
aktivieren
1
    case 20:
2
      ...
3
      Wartezeit--;
4
      if( Wartezeit == 0 )
5
      {
6
        Phase = 21;
7
        Wartezeit = 5;
8
      }
9
      break;
10

11
    case 21:
12
      ...
13
      Wartezeit--;
14
      if( Wartezeit == 0 )
15
      {
16
        Phase = 20;
17
        Wartezeit = 5;
18
      }
19
      break;

Alles was du dann noch brauchst ist einen Taster oder Schalter,
der die Blinkerei aktiviert. Dies geschieht dadurch, dass die
Variable Phase auf (in diesem Beispiel) 20 gesetzt wird und
schon beginnt die Blinkerei.
Gast #808293
Lesenswert?

Problem ist: Kann mir jemand meine Schulaufgaben machen, will selber 
lieber fernsehen...

Wenn ich falsch liege, dann poste genau den Punkt, wo du mit deinen 
Überlegungen nicht weiter kommst.
Gast #808361
Lesenswert?

Der Debugger (entwanzer) ist ein Programm das gewöhnlich beim Compiler
(Programm zur Übersetzung des Quelltextes)dabei ist,um den 
Programmablauf
Schritt für Schritt abzuarbeiten.Damit kann man dann auch den Zustand 
von Variablen,Speicherinhalten und vieles anderes mehr beobachten und 
sehen wo noch logische oder syntaktische Fehler sind.Die Arbeit damit 
hat mir jedenfalls mehr gebracht als nur dem sterilen Vortrag des 
Lehrers zu lauschen und nur alles mitzuschreiben.Leider steht der 
Debugger gewöhnlich nicht auf dem Lehrplan.Ich schlage dir vor erstmal 
ein kleines Programm mit den vier Grundrechenarten zu schreiben und mit 
dem Debugger Schritt für Schritt
auszutesten.Danach kannst du dich steigern mit Kopfgesteuerten oder 
Fußgesteuerten Schleifen.if-Then_else Verzweigungen zu denen auch die 
Switches gehören und was C sonst noch zu bieten hat.Dir die Lösungen 
vorzusagen würde nichts bringen.Besser zu suchts die Fehler empirisch
selber.Dann lernst du das besser.

Gruß Martin
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.