C# Ampel Programmierung

zokker13

Moderator
Joined
Oct 12, 2008
Messages
6,719
Points
235
Moin ihr da draußen.

Komme nicht mehr weiter...
Ich komm einfach mal zum Hintergrund.

Wir sollen alle eine Ampel Programmieren, wir haben drei Panels und bauen die eben wie eine Ampel auf.
Dann haben wir auch noch einen Button, der die Ampel schaltet.

Nun, es wird die normale Ampelabfolge gefragt, erst rot, dann gelb und anschließend grün.

Ich schaffe es nicht, den dritten Panel zuaktivieren.

Wir verwenden die If- Else Funktion. (Hab das Fach erst zwei Wochen btw.)


Ich hoffe, ihr könnt mir helfen, hier nochmal das Muster:

Code:
Syntax C#

if (Bedingung)
{
Anweisung 1;
}

else if (Bedingung)
{
Anweisung 2;
}

else if (Bedingung)
{
Anweisung 3;
}

ect...

So soll dann der letzte "If- Else" Befehl aussehen:

else
{
Anweisung x;
}

Ich hoffe mir kann ein Fachmann helfen!
Grünes Reno ftw!
 
hmm ich versteh' das Prinzip leider nicht ganz; wie genau soll der Button denn die Ampel schalten ?

ich hätte sowas mit Timer gemacht
 
Vielleicht solltest du deinen bisherigen Code posten, dann kann man dir vielleicht sagen was du falsch gemacht hast.
 
jo sehe ich ähnlich ;) zumindest müssen wir wissen, was der Button überhaupt genau machen soll :)

soll bei Button-Klick die Ampel eins weiter geschaltet werden ? in dem Fall würde ich mit true/false arbeiten, dann geht auch if/then gut
 
Hab dieses Jahr eine Ampel auf Assembler-Ebene programmiert, C ist mir da zu hoch...

Aber du brauchst auf jeden Fall eine WAIT Funktion, kannst dir ja überlegen wielange dein Prozessor/Mikroprozessor für einen Arbeitsschritt braucht und wie du das dann mit einer IF Bedingung realisieren kannst. Ist nicht sooo schwer.
 
C#:
//Bau ne Variable quasi als Schalter
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        //Variablen
        string farbe = "gr";
        int schalter = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            if (farbe == "gr")
            {
                //Beispiel 
                checkBox1.Checked = true;
                checkBox2.Checked = false;
                //Schalter und Farbe
                farbe = "or";
                schalter = 0;
            }
            else if (farbe == "or")
            {
                checkBox1.Checked = false;
                checkBox2.Checked = true;
                checkBox3.Checked = false;
                //Absichern damit die Ampel auch wieder runterschaltet
                if (schalter == 1)
                    farbe = "gr";
                else
                    farbe = "ro";
            }

            else if (farbe == "ro")
            {
                checkBox2.Checked = false;
                checkBox3.Checked = true;
                farbe = "or";
                schalter = 1;
            }
        }
    }
}
Ein bisschen was lass ich dir jedenfalls noch :p
 
Moin ihr da draußen.



Nun, es wird die normale Ampelabfolge gefragt, erst rot, dann gelb und anschließend grün.


Hat ne Ampel nicht 4 Phasen? Rot, rot gelb, grün, gelb?
 
Also einer von uns 2 hat beim Führerschein sauber dusel gehabt.
 
dann würd ich sagen achte mal auf die nächste ampel ;)
 
Lunak hat ja auch nicht gesagt dass du das warst. ;)

Also wahrscheinlich baut ihr ja auch eine Fussgängerampel oder?

Wenn der Fussi drückt muss erstmal langsam orange und dann rot werden. Dann wird die Fussgängerampel grün. Dann muss genug Zeit sein um hinüber zu gehen. Anschliessend wird die Fussgängerampel wieder rot und etwas später die Autoampel rot-orange und dann grün.
Falls du keine Fussgängerampel hast lässt du die halt weg. ^^
 
Eine Ampel hat 4 Phasen, denke aber mal dass ist in dieser Aufgabe nicht berücksichtigt ;)
Und irgendwie erscheint mir die Lösung von Lunak zu aufwendig.
 
Also ehrlich ich kenne bei Fußgängerampeln nur grün rot und bei Autos nur grün, orange, rot und den grünen Pfeil^^
@Gonzo
Der is in der 2. Woche
 
Ich glaub ich stell mich morgen ernsthaft vor ne Ampel und schau zu...
 
lol, das meinst du jetzt nicht ernst oder ?

Natürlich mein ich das ernst, kanns dir gerne auf meinen Microcontroller spielen und in ne Ampel einbauen. :p

Zokker hat nie gesagt dass er nur 3 Phasen hat, er meinte er hat 3 Panels, also wohl 3 Lämpchen die leuchten können, was dann einer Ampel entspricht, womit man auch alle 4 Phasen darstellen kann.
 
ok, geben wir folgendes vor: bei Klick auf den Button soll in die nächste Ampelphase gewechselt werden

weiterhin geben wir vor:

Check1 = Oberes Licht (Rot)
Check2 = Mittleres Licht (Gelb)
Check3 = Unteres Licht (Grün)

True = brennt, False = brennt nicht

= bedeutet Vergleich, := bedeutet Zuweisung


wir starten also die Abfrage:

Code:
if 
Check1.status = True 
and Check2.status = False 
and Check3.status = False 

then 
Check2.status := True  [COLOR="SeaGreen"]// gelb geht zusätzlich zu rot an[/COLOR]

else if
Check1.status = True
and Check2.status = True
and Check3.status = False

then
Check1.status := False [COLOR="SeaGreen"]// rot geht aus[/COLOR]
Check2.status := False [COLOR="SeaGreen"]// gelb geht aus[/COLOR]
Check3.status := True [COLOR="SeaGreen"]// grün geht an[/COLOR]

else if
Check1.status = False
and Check3.status = True

then
Check3.status := False [COLOR="SeaGreen"]// grün geht aus[/COLOR]
Check2.status := True [COLOR="SeaGreen"]// gelb geht an[/COLOR]

else if 
Check2.status = True
and Check1.status = False

then
Check2.status := False [COLOR="SeaGreen"]// gelb geht aus[/COLOR]
Check1.status := True [COLOR="SeaGreen"]// rot geht an[/COLOR]


außerdem musst du noch festlegen:

Code:
if Check1.status = True
then Label1.Color = red
else Label1.Color = black

usw.


das musst du eben nur noch richtig in deine Programmiersprache "übersetzen". Ich beherrsche leider nur die Logik, aber irgendwie keine Programmiersprachen =/

ich hoffe, ich habe keinen Denkfehler drin ^^
 
Danke für die Hilfe, ich darf aber wie gsagt nur If&else benutzen, bei timern, true ect. sind wir nochgarnicht...
Hier nochmal der Code:

C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void cmdStart_Click(object sender, EventArgs e)
        {
            if (pnlRot.BackColor == Color.Gray)
            {
                this.pnlRot.BackColor = Color.Red;
            }


            else if (pnlRot.BackColor == Color.Red)
            {
                this.pnlGelb.BackColor = Color.Yellow;
                    
            }

       
        }
    }
}

Ich will erst alle Farben haben.
Also Klick1 Rot geht an
Klick 2 Gelb geht an, Rot bleibt.
Klick 3 Grün geht an, Rot u. Gelb bleibt.

Das will ich erstmal haben, dannach will ich erst Rot nachdem Gelb aufleutet, wieder grau machen.

Dannach mache ich noch ein Reset-Knopf.

Aber zuerst alle Farben haben.

Habs schon versucht, aber ich bekomme einfach das letzte Panel nicht zum leuchten. =/
 
Back
Top Bottom