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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.