Probleme bei Initialisierung und while Schleife

OP #2716993
Lesenswert?

Hallo liebe Forengemeinde,

habe ein Problem, welches sich wie folgt darstellt:
Bei der Initialisierungsroutine geschehen Dinge die ich echt nicht 
nachvollziehen kann.
Dort werden Variablen gesetzt die ich vorher mit dem Wert 0 deklariert 
habe. Dadurch wird meine while Schleife quasi garnicht mehr beachtet.

Hier kurz der mainloop:
1
main()
2
{
3
    Init();
4
  t=0;
5
  z=0;
6
  y=0;
7
    code[0]=5;          // Code Stelle 1
8
  code[1]=8;          // Code Stelle 2
9
  code[2]=3;          // Code Stelle 3
10
  code[3]=4;          // Code Stelle 4
11

12
  
13
  
14
    while (1)
15
    {  
16
  
17
      while( t==0 && z==0);  // Wiederhole für 4 Durchläufe
18
    {
19
      Tastenlesen();            // Unterprogramm Tasteneinlesen
20
      if(value>0)
21
        {
22
        Fall();
23
                        // Unterprogramm Fallunterscheidung
24
        if (code[i] == code1[i])    // Feldvariablen der Arrays gleich?
25
        {
26
          if(i==0)
27
          {
28
          zahl1ok=1;
29
          x++;
30
          }
31
          if(i==1)
32
          {
33
          zahl2ok=1;
34
          x++;
35
          }
36
        
37
          
38
          if(zahl1ok==1 && zahl2ok==1)
39
          {
40
            PORTB=0x02;      //PB1
41
            z=1;
42
            x=0;
43
          }
44
          i++;
45
        }
46
        else              //wenn nicht
47
        {
48
        x++;
49
        }                // Erhöhe Alarmvariable um 1
50
          
51
          if(x>=2)
52
          {
53
            y++;
54
            PORTB=0x01;
55
            _delay_ms(1000);
56
            PORTB=0x00;      
57
            i=0;
58
            x=0;
59
          }
60
          if (y>=3)        // Alarmvariable kleine als 3?
61
          {
62
            test();
63
            t=1;
64
          }
65
        value=0;
66
      }
67
          
68
    }
69
    
70
    
71
  }
72
  
73
}

im Anhang befindet sich der kompltte Code.

Wäre echt nett, wenn mir jemand helfen könnte und mir sagt wo ich den 
Bock geschossen habe. Sitze da jetzt echt schon fast den halben Tag dran 
rum und sehe den Fehler einfach nicht.

Danke.
Angehängte Dateien:
#2717144
Lesenswert?

1
void Tastenlesen()
2
{
3
  
4
    wert1=messen(PC0);      //PC0 messen
5
    _delay_us(80);        //Warte
6
    wert=messen(PC0);      //PC0 messen
7

8
    if ((wert1-wert) < 20)    //Wertevergleich der eingelesenen Werte
9
    {
10
      if (wert1 > 0x07)       //Entprelle Taste andrücken
11
      {    
12
        _delay_us(100);
13
      }
14
      if((wert1 >=0x07) && (wert1 <0x12))    //Wertevergleich Taste 1
15
      {
16
        value = 1;
17
        if (wert1 <=0x07)        //Entprelle Taste loslassen
18
        {
19
          _delay_ms(100);
20
        }
21

22
      }
23

24
      if((wert1 >=0x12) && (wert1 <0x1C))    //Wertevergleich Taste 2
25
      {
26
...

Schreib doch deine Grenzwert-Zahlen mal in dezimaler Form auf. Das sieht 
das so aus, als ob das eine ganz einfache Reihe wäre. Sprich: Den 
'value' kann man aus dem 'wert1' durch eine einfache Formel berechnen. 
Und schon fallen wieder 4 Bildschirmseiten Code weg.
#2717149
Lesenswert?

Selbiges hier
1
void Fall()
2
{
3
  switch (value)
4
  {
5
    case 3:
6
      code1[i] = 1;
7
    break;
8
    case 2:
9
      code1[i] = 2;
10
    break;
11
...

das kann man alles viel kürzer schreiben.
In einem Array hältst du dir die Ergebnisse, mit 'value' indizierst du 
in dein Array und kriegst direkt den Wert für code1
1
void Fall()
2
{
3
                         //  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 
4
  static uint8_t Codes[] = { 0, 3, 2, 1, 6, 5, 4, 9, 8, 7, 12, 11, 10 };
5

6
  code1[i] = Codes[value];
7
}

und wieder eine Bildschirmseite Code weniger.

DU musst dir deinen Code übersichtlich machen. Wenn DU es nicht tust, 
tut es keiner für dich.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren