Forum: Mikrocontroller und Digitale Elektronik Verständnisproblem bei C - byte inkrementieren


von Oliver W. (oliver_w49)


Lesenswert?

Hallo zusammen,
ich habe eine kleine Frage zu meinem C-Programm:

Ich bewege einen Cursor über 5 Zahlen, um eine Schnell einzustellen 
(also zB 10k-Stelle auf 3, 1k-Stelle auf 2 -> 32000).

Dazu habe ich 5 bytes a-e, alle anfangs gleich 0.
Wenn ich nun a inkrementiere, inkrementiert sich auch b-e,
Wenn ich     b inkrementiere, inkrementiert sich auch c-e,
usw.
Wenn ich     e inkrementiere, inkrementiert sich      e.

Randinfo:
Button(x) gibt true zurück, wenn Button x gedrück (Abfrage von 
Widerstandsarray). lastpress ist ein kleiner Helfer zum Entprellen.

mein Code:
1
 
2
if(Button(3)) {
3
      lastpress = millis();
4
      switch (cursor) {
5
        case 0:
6
          a++;
7
          if(a>9) a = 0;
8
        case 1:
9
          b++;
10
          if(b>9) b = 0;
11
        case 2:
12
          c++;
13
          if(c>9) c = 0;
14
        case 3:
15
          d++;
16
          if(d>9) d = 0;
17
        case 4:
18
          e++;
19
          if(e>9) e = 0;
20
      }
21
      aktuell = 0;
22
    }

In der umschließenden While-Scheife passiert nicht viel:
1
while(1)                    //Auf Tastendruck Warten
2
  {
3
    if(aktuell == 0) {      //Wenn nicht aktuell
4
      
5
      /* Ausgabe */
6
7
      aktuell = 1;
8
      lcd.setCursor(7+cursor,0);
9
    }
10
    if(Button(5)) {        //Cursor nach rechts
11
      lastpress = millis();
12
      cursor++;
13
      cursor = cursor % 5;
14
      aktuell = 0;
15
    }
16
    if(Button(2)) {        //Cursor nach links
17
      lastpress = millis();
18
      cursor--;
19
      if(cursor > 4) cursor = 4;
20
      aktuell = 0;
21
    }
22
    if(Button(3)) {        //inkrementieren
23
      lastpress = millis();
24
      switch (cursor) {
25
        case 0:
26
          a++;
27
          if(a>9) a = 0;
28
        case 1:
29
          b++;
30
          if(b>9) b = 0;
31
        case 2:
32
          c++;
33
          if(c>9) c = 0;
34
        case 3:
35
          d++;
36
          if(d>9) d = 0;
37
        case 4:
38
          e++;
39
          if(e>9) e = 0;
40
      }
41
      aktuell = 0;
42
    }
43
  }

Sieht jemand meinen Fehler? Ich rauf mir hier die Haare :D

Danke, Olli

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

breaks vergessen. In jedem Case-Block muss am Ende ein break stehen.

Eigentlich sollte da eine Compiler-Warnung kommen.

: Bearbeitet durch User
von Oliver W. (oliver_w49)


Lesenswert?

LALALA *Kopf -> Wand*

Dnake Cyblord :)

Gelöst :)

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.