Forum: Mikrocontroller und Digitale Elektronik Hochzählen mit 7 Segmentanzeige


von biede1987 (Gast)


Lesenswert?

Hallo
ich möchte mit einer 7 Segmentanzeige und einem Taster die funktion 
darstellen, sobald ich den Taster drücke, soll die 7 Segmentanzeige 
hochzählen.

Ich programmier mit dem Board arduino duemilanove



ich hab aus dem Internent ein Programm gefunden (tutorial), bei dem ich 
das versuche zu verstehn. aber es kommt bei arduino immer eine 
fehlermeldung,

wisst ihr warum, wer schön wenn ihr mir helfen könntet

http://www.freeduino.de/books/arduino-tutorial-lady-ada/lektion-5-arduino-inputs/tastendr%C3%BCcke-z%C3%A4hlen

von Düsendieb (Gast)


Lesenswert?

biede1987 schrieb:
> aber es kommt bei arduino immer eine
> fehlermeldung

Welche?
Wie ist die 7 Segmentanzeige angeschlossen?

von biede1987 (Gast)


Lesenswert?

"
sketch_oct16a.ino: In function 'void setup()':
sketch_oct16a:19: error: a function-definition is not allowed here 
before '{' token
sketch_oct16a:29: error: expected `}' at end of input"

hast du auch ein arduino?

da passt irgendwas nicht mit den klammern?

von biede1987 (Gast)


Lesenswert?

das programm von der seite

hat nichts mit der 7 segemntanzeige zu tun, das mach ich für mich selber

ich hab das nur versucht zu verstehn wie er addiert, da ich aber das 
programm nicht draufspielen kann, weiß ich nicht obs überhaupt geht!

von Karl H. (kbuchegg)


Lesenswert?

biede1987 schrieb:
> "
> sketch_oct16a.ino: In function 'void setup()':
> sketch_oct16a:19: error: a function-definition is not allowed here
> before '{' token
> sketch_oct16a:29: error: expected `}' at end of input"
>
> hast du auch ein arduino?
>
> da passt irgendwas nicht mit den klammern?

Richtig.

Hier ist das Original, wenn man es mal ein wenig ordentlich formatiert
1
/* * Tastendrücke zählen */
2
int switchPin = 2;         // Schalter ist mit Pin 2 verbunden
3
int val;                   // Variable für den Pin Zustand
4
int buttonState;           // Variable für den letzten Schalterzustand
5
int buttonPresses = 0;     // Wie oft ist der Schalter gedrückt
6
7
void setup()
8
{
9
  pinMode(switchPin, INPUT);             // Schalter-Pin ist Input
10
  Serial.begin(9600);                    // Start der seriellen Kommunikation mit 9600bps
11
  buttonState = digitalRead(switchPin);  // Anfangszustand lesen
12
}
13
14
void loop()
15
{
16
  val = digitalRead(switchPin);          // Eingabewert lesen und in val speichern
17
  if (val != buttonState) {              // Der Zustand des Schalters hat sich verändert
18
    if (val == LOW) {                    // Ist der Schalter gedrückt?
19
      buttonPresses++;                   // Inkrementieren der Variablen buttonPresses
20
      Serial.print("Schalter wurde ");
21
      Serial.print(buttonPresses);
22
      Serial.println(" gedrueckt");
23
    }
24
  }
25
26
  buttonState = val;                     // Den Zustand merken
27
}

da ist nichts von fehlerhaften Klammern zu sehen.
D.h. es ist die Vermutung naheliegend, dass du selbst irgendwo einen 
Fehler gemacht hast, als du den Code übernommen, formatiert bzw. 
angepasst hast.

-> zeige nicht den Code den du von irgendwo übernommen hast, sondern 
zeige immer den Code, so wie DU ihn verwendest.


> ich hab das nur versucht zu verstehn wie er addiert, da
> ich aber das programm nicht draufspielen kann, weiß ich
> nicht obs überhaupt geht!

Lies die Fehlermeldung, versuch sie zu verstehen, bilde eine Hypothese 
und ändere das was du hast entsprechend ab. Das gehört genauso zum 
Programmieren dazu, wie alles andere, dass man mit Fehlermeldungen was 
anfangen kann.
PS: man konzentriert sich immer auf die erste bzw. auf die ersten paar 
Fehlermeldung.
Die erste lautet
> In function 'void setup()':
Das ist für sich alleine gesehen noch nicht sehr aussagekräftig. Aber es 
gibt zumindest mal einen Hinweis darauf, an welcher Stelle ungefähr das 
Problem existiert. Da ist von der Funktion setup die Rede. Also wird man 
dort mal näher nachsehen.

> sketch_oct16a:19: error: a function-definition is not allowed
> here before '{' token

Aha. da ist von der { die Rede.
Also sieht man sich da mal alle offnenden { an. Macht vielleicht erst 
mal fehlende Einrückungen um zu sehen, wo da was nicht stimmt.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

> das programm von der seite
> hat nichts mit der 7 segemntanzeige zu tun, das mach ich für mich selber

Warum hast du dann genau dieses 'Detail' im Titel deiner Anfrage?
Deine Anfrage hat genau gar nichts mit 7-Segment-Anzeigen zu tun.

von biede1987 (Gast)


Lesenswert?

super danke für die schnelle antwort ihr seit echt immer wieder super 
hier

von biede1987 (Gast)


Lesenswert?

hab mein fehler auch gefunden, hab nicht richtig formatiert zum schluss

von Karl H. (kbuchegg)


Lesenswert?

Lass mich raten.

Du hast beim Aufteilen des original Kauderwelsch an dieser Stelle
1
  buttonState = digitalRead(switchPin);  // Anfangszustand lesen
2
}

die } übersehen.

-> Es ist immer eine gute Idee, seinen Code ORDENTLICH zu formatieren. 
Inklusive Einrückungen.
Denn dann SIEHT man optisch, wie die Dinge zusammenhängen. Zum Beispiel 
findet man die zu einer schliessenden } gehörende entsprechende öffnende 
{. Denn die muss in der Zeile stehen, in der der Programmtext in genau 
der gleichen Spalte beginnt.

von biede1987 (Gast)


Lesenswert?

ne ich hab ganz zum schluss die Klammer nicht runter gesetzt

 Serial.println(" gedrueckt");
}
}

  buttonState = val;                     // Den Zustand merken}



hätte ich eigentlich selber sehen müssen, trotzdem vielen dank

von biede1987 (Gast)


Lesenswert?

hier ist mein Programm für die 7 Segment anzeige
1
  // Lichtschranke ist ein Taster und alle Segmente werden angesteuert bei 0 und bei 1 gehen sie aus
2
3
    int Lichtschranke = 11; // oder Taster
4
    int Runde; // Variable für den Pin Zustand 
5
    int buttonState; // Variable für den letzten Schalterzustand 
6
    int buttonPresses = 0; // Wie oft ist der Schalter gedrückt   
7
8
    int a = 2; // a
9
    int b = 3;
10
    int c = 4;
11
    int d = 5;
12
    int e = 6;
13
    int f = 7;
14
    int g = 8;
15
16
17
18
    void setup(){
19
 
20
  Serial.begin(9600); // Start der seriellen Kommunikation mit 9600bps
21
  pinMode(Lichtschranke,INPUT);
22
  pinMode(a,OUTPUT);
23
  pinMode(b,OUTPUT);
24
  pinMode(c,OUTPUT);
25
  pinMode(d,OUTPUT);
26
  pinMode(e,OUTPUT);
27
  pinMode(f,OUTPUT);
28
  pinMode(g,OUTPUT);
29
  
30
  buttonState = digitalRead(Lichtschranke); // Start der seriellen Kommunikation mit 9600bps 
31
  
32
}
33
  
34
  void loop() { 
35
    
36
    Runde = digitalRead(Lichtschranke);
37
    if (Runde != buttonState) { // Der Zustand des Schalters hat sich verändert 
38
39
        if (Runde == HIGH) { // Ist der Schalter gedrückt? 
40
41
        buttonPresses++; // Inkrementieren der Variablen buttonPresses 
42
43
                                   // Serial.println(Runde,DEC);
44
                                     // if (Runde == HIGH)
45
        Serial.print("Schalter wurde ");
46
        Serial.print(buttonPresses);
47
        Serial.println(" gedrueckt");
48
    
49
  
50
    if (Runde=0)
51
    {
52
      digitalWrite(a,LOW);
53
      digitalWrite(b,LOW);
54
      digitalWrite(c,LOW);
55
      digitalWrite(d,LOW);
56
      digitalWrite(e,LOW);
57
      digitalWrite(f,LOW);
58
      digitalWrite(g,HIGH);
59
      }
60
61
      if (Runde=1)
62
      {
63
      digitalWrite(a,1);
64
      digitalWrite(b,0);
65
      digitalWrite(c,0);
66
      digitalWrite(d,1);
67
      digitalWrite(e,1);
68
      digitalWrite(f,1);
69
      digitalWrite(g,1);
70
      }
71
      
72
      if (Runde=2)
73
      {
74
      digitalWrite(a,0);
75
      digitalWrite(b,0);
76
      digitalWrite(c,1);
77
      digitalWrite(d,0);
78
      digitalWrite(e,0);
79
      digitalWrite(f,1);
80
      digitalWrite(g,0);
81
      }
82
      
83
      if (Runde=3)
84
      {
85
      digitalWrite(a,0);
86
      digitalWrite(b,0);
87
      digitalWrite(c,0);
88
      digitalWrite(d,0);
89
      digitalWrite(e,1);
90
      digitalWrite(f,1);
91
      digitalWrite(g,0);
92
      }
93
      
94
      
95
      if (Runde=4)
96
      {
97
      digitalWrite(a,1);
98
      digitalWrite(b,0);
99
      digitalWrite(c,0);
100
      digitalWrite(d,1);
101
      digitalWrite(e,1);
102
      digitalWrite(f,0);
103
      digitalWrite(g,0);
104
      }
105
      
106
      if (Runde=5)
107
      {
108
      digitalWrite(a,0);
109
      digitalWrite(b,1);
110
      digitalWrite(c,0);
111
      digitalWrite(d,0);
112
      digitalWrite(e,1);
113
      digitalWrite(f,0);
114
      digitalWrite(g,0);
115
      }
116
      
117
      if (Runde=6)
118
      {
119
      digitalWrite(a,0);
120
      digitalWrite(b,1);
121
      digitalWrite(c,0);
122
      digitalWrite(d,0);
123
      digitalWrite(e,0);
124
      digitalWrite(f,0);
125
      digitalWrite(g,0);
126
      }
127
      
128
      if (Runde=7)
129
      {
130
      digitalWrite(a,0);
131
      digitalWrite(b,0);
132
      digitalWrite(c,0);
133
      digitalWrite(d,1);
134
      digitalWrite(e,1);
135
      digitalWrite(f,1);
136
      digitalWrite(g,1);
137
      }
138
      
139
      if (Runde=8)
140
      {
141
      digitalWrite(a,0);
142
      digitalWrite(b,0);
143
      digitalWrite(c,0);
144
      digitalWrite(d,1);
145
      digitalWrite(e,1);
146
      digitalWrite(f,1);
147
      digitalWrite(g,1);
148
      }
149
      
150
      if (Runde=9)
151
      {
152
      digitalWrite(a,0);
153
      digitalWrite(b,0);
154
      digitalWrite(c,0);
155
      digitalWrite(d,0);
156
      digitalWrite(e,1);
157
      digitalWrite(f,0);
158
      digitalWrite(g,0);
159
      }
160
      
161
        }
162
      }
163
      buttonState = Runde;
164
    }

: Bearbeitet durch User
von biede1987 (Gast)


Lesenswert?

leider ist es so sobald eine 1 kommt, zählt er ganz schnell hoch, dieses 
sehe ich an meinem serial monitor,

ich bekomm dann gar nicht mit wie die anzeige hochzählt,

woran liegt das?

von Karl H. (kbuchegg)


Lesenswert?

Das hier
1
    if (Runde=0)
sind keine Vergleiche sondern Zuweisungen.
Vergleiche schreiben sich mit ==

von Karl H. (kbuchegg)


Lesenswert?

Ausserdem.
Überleg noch mal ganz stark, welche Variable im Originalcode welche 
Bedeutung hat. Was repräsentiert sie?

Und dann überlag mal ganz stark, was deine Variable 'Runde' eigentlich 
für eine Aufgabe hat. Kann es sinnvoll sein, in Runde das Ergebnis von
1
    Runde = digitalRead(Lichtschranke);
abzulegen?

Eher nicht.
'Runde' soll darüber Buch führen, in welcher Runde sich dein (Carrera-) 
Auto)?) sich befindet. Was bitte hat das damit zu tun, ob die 
Lichtschranke unterbrochen ist oder nicht?

In welcher Variablen wird denn hier
1
void loop()
2
{
3
  val = digitalRead(switchPin);          // Eingabewert lesen und in val speichern
4
  if (val != buttonState) {              // Der Zustand des Schalters hat sich verändert
5
    if (val == LOW) {                    // Ist der Schalter gedrückt?
6
      buttonPresses++;                   // Inkrementieren der Variablen buttonPresses
7
      Serial.print("Schalter wurde ");
8
      Serial.print(buttonPresses);
9
      Serial.println(" gedrueckt");
10
    }
11
  }
12
13
  buttonState = val;                     // Den Zustand merken
14
}
eigentlich gezählt?

Hinweis: Es ist NICHT 'val'! Die Variable 'val' sollte in diesem Code 
besser 'buttonStateNow' heißen. Der Name dieser Variablen ist nämlich 
irreführend.
1
void loop()
2
{
3
  buttonStateNow = digitalRead(switchPin);          // Eingabewert lesen und in val speichern
4
  if (buttonStateNow != buttonState) {              // Der Zustand des Schalters hat sich verändert
5
    if (buttonStateNow == LOW) {                    // Ist der Schalter gedrückt?
6
      buttonPresses++;                   // Inkrementieren der Variablen buttonPresses
7
      Serial.print("Schalter wurde ");
8
      Serial.print(buttonPresses);
9
      Serial.println(" gedrueckt");
10
    }
11
  }
12
13
  buttonState = buttonStateNow;                     // Den Zustand merken
14
}

Hier ....
1
    if (buttonStateNow == LOW) {                    // Ist der Schalter gedrückt?
2
      buttonPresses++;                   // Inkrementieren der Variablen buttonPresses
... steckt die Zählvariable! buttonPresses repräsentiert den Zähler! 
Erkennt man auch am Kommentar, bzw. daran, dass in weiterer Folge im 
Code mit dieser Variablen etwas gemacht wird ...
1
      Serial.print("Schalter wurde ");
2
      Serial.print(buttonPresses);
3
      Serial.println(" gedrueckt");
... in diesem konkreten Fall eben über die Serielle ausgeben.

: Bearbeitet durch User
von biede1987 (Gast)


Lesenswert?

1
// Lichtschranke ist ein Taster und alle Segmente werden angesteuert bei 0 und bei 1 gehen sie aus
2
3
    int Lichtschranke = 11; // oder Taster
4
    int var; // Variable für den Pin Zustand 
5
    int buttonState; // Variable für den letzten Schalterzustand 
6
    int Runde = 0; // Wie oft ist der Schalter gedrückt   
7
8
    int a = 2; // a
9
    int b = 3;
10
    int c = 4;
11
    int d = 5;
12
    int e = 6;
13
    int f = 7;
14
    int g = 8;
15
16
17
18
    void setup(){
19
 
20
  Serial.begin(9600); // Start der seriellen Kommunikation mit 9600bps
21
  pinMode(Lichtschranke,INPUT);
22
  pinMode(a,OUTPUT);
23
  pinMode(b,OUTPUT);
24
  pinMode(c,OUTPUT);
25
  pinMode(d,OUTPUT);
26
  pinMode(e,OUTPUT);
27
  pinMode(f,OUTPUT);
28
  pinMode(g,OUTPUT);
29
  
30
  buttonState = digitalRead(Lichtschranke); // Start der seriellen Kommunikation mit 9600bps 
31
  
32
}
33
  
34
  void loop() { 
35
    
36
    var = digitalRead(Lichtschranke);
37
    if (var != buttonState) { // Der Zustand des Schalters hat sich verändert 
38
39
        if (var == HIGH) { // Ist der Schalter gedrückt? 
40
41
        Runde++; // Inkrementieren der Variablen Runde 
42
43
                                   // Serial.println(var,DEC);
44
                                     // if (var == HIGH)
45
        Serial.print("Schalter wurde ");
46
        Serial.print(Runde);
47
        Serial.println(" gedrueckt");
48
    
49
  
50
    if (Runde==0)
51
    {
52
      digitalWrite(a,1);
53
      digitalWrite(b,1);
54
      digitalWrite(c,1);
55
      digitalWrite(d,1);
56
      digitalWrite(e,LOW);
57
      digitalWrite(f,LOW);
58
      digitalWrite(g,HIGH);
59
      }
60
61
      if (Runde==1)
62
      {
63
      digitalWrite(a,1);
64
      digitalWrite(b,0);
65
      digitalWrite(c,0);
66
      digitalWrite(d,1);
67
      digitalWrite(e,1);
68
      digitalWrite(f,1);
69
      digitalWrite(g,1);
70
      }
71
      
72
      if (Runde==2)
73
      {
74
      digitalWrite(a,0);
75
      digitalWrite(b,0);
76
      digitalWrite(c,1);
77
      digitalWrite(d,0);
78
      digitalWrite(e,0);
79
      digitalWrite(f,1);
80
      digitalWrite(g,0);
81
      }
82
      
83
      if (Runde==3)
84
      {
85
      digitalWrite(a,0);
86
      digitalWrite(b,0);
87
      digitalWrite(c,0);
88
      digitalWrite(d,0);
89
      digitalWrite(e,1);
90
      digitalWrite(f,1);
91
      digitalWrite(g,0);
92
      }
93
      
94
      
95
      if (Runde==4)
96
      {
97
      digitalWrite(a,1);
98
      digitalWrite(b,0);
99
      digitalWrite(c,0);
100
      digitalWrite(d,1);
101
      digitalWrite(e,1);
102
      digitalWrite(f,0);
103
      digitalWrite(g,0);
104
      }
105
      
106
      if (Runde==5)
107
      {
108
      digitalWrite(a,0);
109
      digitalWrite(b,1);
110
      digitalWrite(c,0);
111
      digitalWrite(d,0);
112
      digitalWrite(e,1);
113
      digitalWrite(f,0);
114
      digitalWrite(g,0);
115
      }
116
      
117
      if (Runde==6)
118
      {
119
      digitalWrite(a,0);
120
      digitalWrite(b,1);
121
      digitalWrite(c,0);
122
      digitalWrite(d,0);
123
      digitalWrite(e,0);
124
      digitalWrite(f,0);
125
      digitalWrite(g,0);
126
      }
127
      
128
      if (Runde==7)
129
      {
130
      digitalWrite(a,0);
131
      digitalWrite(b,0);
132
      digitalWrite(c,0);
133
      digitalWrite(d,1);
134
      digitalWrite(e,1);
135
      digitalWrite(f,1);
136
      digitalWrite(g,1);
137
      }
138
      
139
      if (Runde==8)
140
      {
141
      digitalWrite(a,0);
142
      digitalWrite(b,0);
143
      digitalWrite(c,0);
144
      digitalWrite(d,1);
145
      digitalWrite(e,1);
146
      digitalWrite(f,1);
147
      digitalWrite(g,1);
148
      }
149
      
150
      if (Runde==9)
151
      {
152
      digitalWrite(a,0);
153
      digitalWrite(b,0);
154
      digitalWrite(c,0);
155
      digitalWrite(d,0);
156
      digitalWrite(e,1);
157
      digitalWrite(f,0);
158
      digitalWrite(g,0);
159
      }
160
      
161
        }
162
      }
163
      buttonState = var; //Den Zustand merken
164
    }

: Bearbeitet durch User
von biede1987 (Gast)


Lesenswert?

ja du hattest recht ich hab die "runde" als "var" geschrieben das war 
falsch,

jetzt hab ich buttonpresses ersetzt durch Runde,

und meine alte Runde ist jetzt einfach ein variabler Wert.

ich glaub jetzt wirds logischer oder was meinst

von Karl H. (kbuchegg)


Lesenswert?

Ja. Und funktionierts?

Weiter gehts!
Da gibt es noch viel zu tun und zu lernen.

von Karl H. (kbuchegg)


Lesenswert?

biede1987 schrieb:

> ich glaub jetzt wirds logischer oder was meinst

Ich seh noch nicht, inwiefern mir beim lesen des Codes ein Variablenname 
von 'var' etwas über die Funktion der Variablen innerhalb des Programmes 
verrät.

var ist reichlich nichtssagend. Wenn du eine Variable brauchst, deren 
Aussage darin besteht, ob die Lichtschranke unterbrochen ist oder nicht, 
dann sollte wohl der Variablenname das auch irgendwie andeuten. Ich 
würde da irgendwie die Begriffe 'Lichtschranke' bzw. 'Unterbrochen' bzw. 
'Status' ins Spiel bringen. Selbiges für 'buttonState'. Hast du denn 
einen Button (einen Drückknopf)? Nein, hast du nicht. Du hast eine 
Lichtschranke. Eine Lichtschranke ist aber kein Button.


Du magst das jetzt als kleinlich empfinden. Aber in größeren Programmen 
ist es unabdingbar, dass mir der Code selber etwas erzählt. Zb durch gut 
gewählte Variablennamen. Eine Codestelle
1
  NettoPreis = BruttoPreis + BruttoPreis * Steuersatz;
braucht keinen Kommentar. Die Variablennamen sind so gewählt, dass mir 
der Code selber erzählt, was hier passiert. Und genau das ist das Ziel: 
Kommentare überflüssig machen, indem der Kommentar schon in der 
Formulierung des Codes integriert ist.

: Bearbeitet durch User
von biede1987 (Gast)


Lesenswert?

jep funktioniert war noch ein fehler drin bei der

8

die hab falsch dargestellt,



und am anfang wenn 0 Runden sind,

zeigt er mir eine 8 statt eine 0 obwohl ich die ausgänge richtig gesetzt 
habe

weißt du warum?

von Karl H. (kbuchegg)


Lesenswert?

Wenn du deinen Code ordentlich Einrücken würdest, würdest du es auch 
sehen.

Wenn am Anfang alles auf 0 ist, ist den Ausgängen noch nie irgendetwas 
zugewiesen worden.
Erst mit dem ersten Puls, den dein Programm mittels Lichtschranke 
feststellt, steuert dein Programm das erste mal die 7-Segment Ausgänge 
an.
Deine Anzeige zeigt daher am Anfang deswegen '8' an, weil es so ist, 
dass der Default-Zustand der Ausgänge nun mal 0 ist. D.h. alle deine 
Ausgänge sind auf 0, womit alle Segmente leuchten und du das als 8 
fehlinterpretierst. Wäre der Dezimalpunkt deiner Anzeige auch 
angeschlossen, dann könntest du sehen, dass der genauso leuchtet.

deine Programmlogik sieht zur Zeit so aus
1
void loop()
2
{
3
  if( Puls an der Lichtschranke )
4
  {
5
    erhöhe Zähler
6
    gib den Zähler aus
7
  }
8
}

Aber was ist am Anfang? Wenn noch kein Puls von der Lichtschranke 
festgestellt wurde? Dann ist auch nie irgendetwas ausgegeben worden.



-> deutlicher Hinweis darauf, dass die Größe der Funktion loop schon das 
Mass überschritten hast, das du noch überblicken kannst.
Es wird Zeit, dass du die Ansteurung der 7_Segment Anzeige in eine 
eigene Funktion auslagerst.

: Bearbeitet durch User
von biede1987 (Gast)


Lesenswert?

ok ich versuch jetzt mal mit Hilfe eines zweiten Schalters die Runden 
immer am Anfang auf 0 zurücksetzten. Ein Resetschalter.


wenn das funktioniert, will ich mich informieren wie ich eine  4 
Segmentanzeige ansteuere.da kommen dann bestimmt wieder fragen auf!

ich versuch des jetzt mal mit dem Resettaster und tu nochmal mein 
Programm verbessern.

von biede1987 (Gast)


Lesenswert?

Vielen Dank für die Hilfe

 um 10.00 Uhr war ich noch am verzweifeln

von biede1987 (Gast)


Lesenswert?

was heißt !=

wenn sich der Zustand verändert oder?

von Karl H. (kbuchegg)


Lesenswert?

biede1987 schrieb:
> was heißt !=
>

Vergiss bitte ganz schnell die Idee, du könntest C (oder C++) mit einem 
Online-Tutorial lernen.
Du brauchst ein ordentliches C-Buch! Und zwar schnell!


!=   ist 'ungleich'

von biede1987 (Gast)


Lesenswert?

ok muss ich bei uns mal in der schule kucken,


ich hab mir das arduino kochbuch gekauft, ist super gut beschrieben.

macht echt spass

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.