Forum: Mikrocontroller und Digitale Elektronik Rückgabewert funktioniert nicht richtig.


von Stefan (Gast)


Lesenswert?

Hallo,

ich habe eine Funktion  mit Rückgabewert geschrieben geschrieben:
1
uint8_t TasterDimmenAufAb (uint8_t Ein, uint8_t ArrNr)
2
{
3
static uint8_t raufrunter;    
4
  
5
  if (Ein)
6
  {
7
    // Wenn länger gedrückt wird
8
    if (ArrayCountTasterDimmer[ArrNr] <200){ArrayCountTasterDimmer[ArrNr]++;}
9
10
    if (ArrayCountTasterDimmer[ArrNr] >= 200) 
11
    {
12
      //Nach Zeit Licht Dimmwert erhöhen
13
      Array1[ArrNr]++;
14
15
        if (Array1[ArrNr] ==15)
16
        {
17
          
18
          
19
          if (u8SpeicherDimmwert[ArrNr] <=100 && !raufrunter)
20
          {
21
            u8SpeicherDimmwert[ArrNr]++;  
22
             
23
            // und runter zählen...
24
            if (u8SpeicherDimmwert[ArrNr] ==100)  raufrunter=1;    
25
          }
26
          
27
    
28
          
29
          if (u8SpeicherDimmwert[ArrNr] >=5 && raufrunter)
30
          {
31
            u8SpeicherDimmwert[ArrNr]--;  
32
                  
33
            // und wieder rauf zählen...          
34
            if (u8SpeicherDimmwert[ArrNr] ==5)raufrunter=0;
35
          }
36
          
37
          
38
        
39
        Array1[ArrNr] =0;
40
41
        }
42
    }
43
    
44
  }
45
  else 
46
  {
47
  ArrayCountTasterDimmer[ArrNr] =0;
48
  Array1[ArrNr] =0;
49
  }
50
  
51
  return u8SpeicherDimmwert[ArrNr];
52
}

dieser Funktion ist in der main.h abgelegt.

Wenn ich nun in der main.c diese Funktion so aufrufe:
1
if (Eingang[0] && licht_status[12]){
2
3
test23= TasterDimmenAufAb (Eingang[0], 12);
4
 
5
LichtDimmenAn (PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"),test23 );
6
}

wird die Ausgabe, auch wenn Eingang[0] immmer da ist, nicht hochgezählt.

Mache ich die Funktion ohne Rückgabewert und sende direkt in der 
Funktion (LichtDimmenAn sendet nur an die verschiedenen USART's) klappt 
alles.
1
void TasterDimmenAufAb (uint8_t Ein, uint8_t ArrNr)
2
{
3
static uint8_t raufrunter;    
4
  
5
  if (Ein)
6
  {
7
    // Wenn länger gedrückt wird
8
    if (ArrayCountTasterDimmer[ArrNr] <200){ArrayCountTasterDimmer[ArrNr]++;}
9
10
    if (ArrayCountTasterDimmer[ArrNr] >= 200) 
11
    {
12
      //Nach Zeit Licht Dimmwert erhöhen
13
      Array1[ArrNr]++;
14
15
        if (Array1[ArrNr] ==15)
16
        {
17
          
18
          
19
          if (u8SpeicherDimmwert[ArrNr] <=100 && !raufrunter)
20
          {
21
            u8SpeicherDimmwert[ArrNr]++;  
22
            LichtDimmenAn (PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"), u8SpeicherDimmwert[ArrNr]);          
23
            // und runter zählen...
24
            if (u8SpeicherDimmwert[ArrNr] ==100)  raufrunter=1;    
25
          }
26
          
27
    
28
          
29
          if (u8SpeicherDimmwert[ArrNr] >=5 && raufrunter)
30
          {
31
            u8SpeicherDimmwert[ArrNr]--;  
32
            LichtDimmenAn (PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"), u8SpeicherDimmwert[ArrNr]);          
33
            // und wieder rauf zählen...          
34
            if (u8SpeicherDimmwert[ArrNr] ==5)raufrunter=0;
35
          }
36
          
37
          
38
        
39
        Array1[ArrNr] =0;
40
41
        }
42
    }
43
    
44
  }
45
  else 
46
  {
47
  ArrayCountTasterDimmer[ArrNr] =0;
48
  Array1[ArrNr] =0;
49
  }
50
}

In der main siehts dann so aus:
1
if (Eingang[0] && licht_status[12]){
2
3
TasterDimmenAufAb (Eingang[0], 12);
4
}


Wie kriege ich das mit Rückgabewert hin?
Mit Rückgabewert bin ich flexibler, da dieser Part 
"(PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"). 
...  );" immer anders ist!

Danke

von Rene H. (Gast)


Lesenswert?

1
static uint8_t raufrunter;

ist nicht Initialisiert.

Grüsse,
R.

von Stefan (Gast)


Lesenswert?

Danke René, hab's zwar noch nicht getestet...erstmal danke.

Was meint der Andere mit "C-Rules" denn?

Was meint ihr, es gibt bestimmt viele Sachen die man generell verbessern 
könnte, oder?

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Stefan schrieb:
> Was meint ihr, es gibt bestimmt viele Sachen die man generell verbessern
> könnte, oder?

Jepp.

von Steel (Gast)


Lesenswert?

Stefan schrieb:
> dieser Funktion ist in der main.h abgelegt.

Da hat sie nichts zu suchen. Code gehört nur in C-Files!

von Stefan (Gast)


Lesenswert?

Leider klappt das noch nicht, hier der aktuelle Code in einem c.-File 
;-)
1
uint8_t TasterDimmenAufAb (uint8_t Ein, uint8_t ArrNr)
2
{
3
static uint8_t raufrunter=0;    
4
  
5
  if (Ein)
6
  {
7
    // Wenn länger gedrückt wird
8
    if (ArrayCountTasterDimmer[ArrNr] <200){ArrayCountTasterDimmer[ArrNr]++;}
9
10
    if (ArrayCountTasterDimmer[ArrNr] >= 200) 
11
    {
12
      //Nach Zeit Licht Dimmwert erhöhen
13
      Array1[ArrNr]++;
14
15
        if (Array1[ArrNr] ==15)
16
        {
17
          
18
          
19
          if (u8SpeicherDimmwert[ArrNr] <=100 && !raufrunter)
20
          {
21
            u8SpeicherDimmwert[ArrNr]++;  
22
            //LichtDimmenAn (PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"), u8SpeicherDimmwert[ArrNr]);          
23
            // und runter zählen...
24
            if (u8SpeicherDimmwert[ArrNr] ==100)  raufrunter=1;    
25
          }
26
          
27
    
28
          
29
          if (u8SpeicherDimmwert[ArrNr] >=5 && raufrunter)
30
          {
31
            u8SpeicherDimmwert[ArrNr]--;  
32
          //  LichtDimmenAn (PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"), u8SpeicherDimmwert[ArrNr]);          
33
            // und wieder rauf zählen...          
34
            if (u8SpeicherDimmwert[ArrNr] ==5)raufrunter=0;
35
          }
36
          
37
          
38
        
39
        Array1[ArrNr] =0;
40
41
        }
42
    }
43
    
44
  }
45
  else 
46
  {
47
  ArrayCountTasterDimmer[ArrNr] =0;
48
  Array1[ArrNr] =0;
49
  }
50
  
51
  return u8SpeicherDimmwert[ArrNr];
52
}

Prototoyp in der .h:
1
uint8_t TasterDimmenAufAb (uint8_t Ein, uint8_t ArrNr);


Wo liegt wohl der Fehler?!?

von Rene H. (Gast)


Lesenswert?

Hallo Stefan

Was heisst denn, es klappt nicht? Was wird zurückgegeben?

Mit dem Code Fragment ist es doch etwas schwierig einen Fehler im 
funktionalen Ablauf zu eruieren?

Hast Du schon mal den Debugger angeworfen?

Grüsse,
R.

von Stefan (Gast)


Lesenswert?

Hi Rene,

er zählt einfach nicht doe Variable hoch die er als Rückgabewert hat und 
übergeben soll.

Auf der USART sieht das z.B so bei Tastendruck aus (3 Sekunden gedrückt)

Man sieht, dass die letzte 5 "88|11|05|5" nicht erhöht wird
1
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
2
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
3
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
4
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
5
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
6
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
7
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
8
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
9
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
10
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
11
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
12
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
13
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
14
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
15
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
16
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
17
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
18
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
19
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
20
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
21
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
22
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
23
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
24
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
25
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
26
Recv: 89|11|05|01   -   19:34:57   -   14.10.2012
27
Recv: 88|11|05|5   -   19:34:57   -   14.10.2012
28
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
29
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
30
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
31
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
32
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
33
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
34
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
35
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
36
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
37
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
38
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
39
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
40
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
41
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
42
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
43
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
44
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
45
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
46
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
47
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
48
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
49
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
50
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
51
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
52
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
53
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
54
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
55
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
56
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
57
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
58
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
59
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
60
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
61
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
62
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
63
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
64
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
65
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
66
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
67
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
68
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
69
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
70
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
71
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
72
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
73
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
74
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
75
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
76
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
77
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
78
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
79
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
80
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
81
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
82
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
83
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
84
Recv: 89|11|05|01   -   19:34:56   -   14.10.2012
85
Recv: 88|11|05|5   -   19:34:56   -   14.10.2012
86
Recv: 89|11|05|01   -   19:34:55   -   14.10.2012
87
Recv: 88|11|05|5   -   19:34:55   -   14.10.2012
88
Recv: 89|11|05|01   -   19:34:55   -   14.10.2012
89
Recv: 88|11|05|5   -   19:34:55   -   14.10.2012
90
Recv: 89|11|05|01   -   19:34:55   -   14.10.2012
91
Recv: 88|11|05|5   -   19:34:55   -   14.10.2012
92
Recv: 89|11|05|01   -   19:34:55   -   14.10.2012
93
Recv: 88|11|05|5   -   19:34:55   -   14.10.2012
94
Recv: 89|11|05|01   -   19:34:55   -   14.10.2012
95
Recv: 88|11|05|5   -   19:34:55   -   14.10.2012
96
Recv: 89|11|05|01   -   19:34:55   -   14.10.2012
97
Recv: 88|11|05|5   -   19:34:55   -   14.10.2012
98
Recv: 89|11|05|01   -   19:34:55   -   14.10.2012
99
Recv: 88|11|05|5   -   19:34:55   -   14.10.2012
100
Recv: 89|11|05|01   -   19:34:55   -   14.10.2012
101
Recv: 88|11|05|5   -   19:34:55   -   14.10.2012
102
Recv: 89|11|05|01   -   19:34:55   -   14.10.2012
103
Recv: 88|11|05|5   -   19:34:55   -   14.10.2012
104
Recv: 89|11|05|01   -   19:34:55   -   14.10.2012
105
Recv: 89|11|05|00   -   19:34:54   -   14.10.2012

von Stefan (Gast)


Lesenswert?

Und wieder zurückgeschraubt funktionierts so: Also OK:
1
void TasterDimmenAufAb (uint8_t Ein, uint8_t ArrNr)
2
{
3
static uint8_t raufrunter=0;    
4
  
5
  if (Ein)
6
  {
7
    // Wenn länger gedrückt wird
8
    if (ArrayCountTasterDimmer[ArrNr] <200){ArrayCountTasterDimmer[ArrNr]++;}
9
10
    if (ArrayCountTasterDimmer[ArrNr] >= 200) 
11
    {
12
      //Nach Zeit Licht Dimmwert erhöhen
13
      Array1[ArrNr]++;
14
15
        if (Array1[ArrNr] ==15)
16
        {
17
          
18
          
19
          if (u8SpeicherDimmwert[ArrNr] <=100 && !raufrunter)
20
          {
21
            u8SpeicherDimmwert[ArrNr]++;  
22
            LichtDimmenAn (PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"), u8SpeicherDimmwert[ArrNr]);          
23
            // und runter zählen...
24
            if (u8SpeicherDimmwert[ArrNr] ==100)  raufrunter=1;    
25
          }
26
          
27
    
28
          
29
          if (u8SpeicherDimmwert[ArrNr] >=5 && raufrunter)
30
          {
31
            u8SpeicherDimmwert[ArrNr]--;  
32
            LichtDimmenAn (PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"), u8SpeicherDimmwert[ArrNr]);          
33
            // und wieder rauf zählen...          
34
            if (u8SpeicherDimmwert[ArrNr] ==5)raufrunter=0;
35
          }
36
          
37
          
38
        
39
        Array1[ArrNr] =0;
40
41
        }
42
    }
43
    
44
  }
45
  else 
46
  {
47
  ArrayCountTasterDimmer[ArrNr] =0;
48
  Array1[ArrNr] =0;
49
  }
50
  
51
  //return u8SpeicherDimmwert[ArrNr];
52
}

in der main.c
1
if (Eingang[0] && licht_status[12]){
2
3
TasterDimmenAufAb (Eingang[0], 12);
4
}
1
Recv: 88|11|05|18   -   19:40:09   -   14.10.2012
2
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
3
Recv: 88|11|05|17   -   19:40:09   -   14.10.2012
4
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
5
Recv: 88|11|05|16   -   19:40:09   -   14.10.2012
6
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
7
Recv: 88|11|05|15   -   19:40:09   -   14.10.2012
8
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
9
Recv: 88|11|05|14   -   19:40:09   -   14.10.2012
10
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
11
Recv: 88|11|05|13   -   19:40:09   -   14.10.2012
12
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
13
Recv: 88|11|05|12   -   19:40:09   -   14.10.2012
14
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
15
Recv: 88|11|05|11   -   19:40:09   -   14.10.2012
16
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
17
Recv: 88|11|05|10   -   19:40:09   -   14.10.2012
18
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
19
Recv: 88|11|05|9   -   19:40:09   -   14.10.2012
20
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
21
Recv: 88|11|05|8   -   19:40:09   -   14.10.2012
22
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
23
Recv: 88|11|05|7   -   19:40:09   -   14.10.2012
24
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
25
Recv: 88|11|05|6   -   19:40:09   -   14.10.2012
26
Recv: 89|11|05|01   -   19:40:09   -   14.10.2012
27
Recv: 88|11|05|5   -   19:40:07   -   14.10.2012
28
Recv: 89|11|05|01   -   19:40:07   -   14.10.2012

von Rene H. (Gast)


Lesenswert?

Hallo Stefan

Du veränderst im 1. Beispiel Dein u8SpeicherDimmwert noch, was Du im 
zweiten indirekt nicht machst. Versuch mal einen temporären Return Wert:

1
uint8_t TasterDimmenAufAb (uint8_t Ein, uint8_t ArrNr)
2
{
3
  static uint8_t raufrunter=0;    
4
  uint8_t ret = 0;
5
  
6
  if (Ein)
7
  {
8
    // Wenn länger gedrückt wird
9
    if (ArrayCountTasterDimmer[ArrNr] <200){ArrayCountTasterDimmer[ArrNr]++;}
10
11
    if (ArrayCountTasterDimmer[ArrNr] >= 200) 
12
    {
13
      //Nach Zeit Licht Dimmwert erhöhen
14
      Array1[ArrNr]++;
15
16
        if (Array1[ArrNr] ==15)
17
        {
18
          
19
          
20
          if (u8SpeicherDimmwert[ArrNr] <=100 && !raufrunter)
21
          {
22
            u8SpeicherDimmwert[ArrNr]++;  
23
            ret = u8SpeicherDimmwert[ArrNr];
24
            //LichtDimmenAn (PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"), u8SpeicherDimmwert[ArrNr]);          
25
            // und runter zählen...
26
            if (u8SpeicherDimmwert[ArrNr] ==100)  raufrunter=1;    
27
          }
28
          
29
    
30
          
31
          if (u8SpeicherDimmwert[ArrNr] >=5 && raufrunter)
32
          {
33
            u8SpeicherDimmwert[ArrNr]--;  
34
            ret = u8SpeicherDimmwert[ArrNr];
35
          //  LichtDimmenAn
36
 (PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"), u8SpeicherDimmwert[ArrNr]);          
37
            // und wieder rauf zählen...          
38
            if (u8SpeicherDimmwert[ArrNr] ==5)raufrunter=0;
39
          }
40
          
41
          
42
        
43
        Array1[ArrNr] =0;
44
45
        }
46
    }
47
    
48
  }
49
  else 
50
  {
51
  ArrayCountTasterDimmer[ArrNr] =0;
52
  Array1[ArrNr] =0;
53
  }
54
  
55
  return (ret);
56
}

Grüsse,
R.

von Rene H. (Gast)


Lesenswert?

Hallo Stefan

Du musst Dir das nochmals durchdenken. In der Variante 2 kann es sein, 
dass er pro Funktionsdurchlauf zwei mal LichDimmAn aufruft. Im Fall mit 
Return Value kannst Du nur ein return bekommen, da liegt vermutlich Dein 
Problem.

Ich kenne die Programmstruktur nicht im Ganzen aber vermutlich wird ein 
else if bereits ausreichen:
1
          if (u8SpeicherDimmwert[ArrNr] <=100 && !raufrunter)
2
          {
3
            u8SpeicherDimmwert[ArrNr]++;  
4
            ret = u8SpeicherDimmwert[ArrNr];
5
            //LichtDimmenAn (PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"), u8SpeicherDimmwert[ArrNr]);          
6
            // und runter zählen...
7
            if (u8SpeicherDimmwert[ArrNr] ==100)  raufrunter=1;    
8
          }
9
          
10
    
11
          
12
          else if (u8SpeicherDimmwert[ArrNr] >=5 && raufrunter)
13
          {
14
            u8SpeicherDimmwert[ArrNr]--;  
15
            ret = u8SpeicherDimmwert[ArrNr];
16
          //  LichtDimmenAn  (PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"), u8SpeicherDimmwert[ArrNr]);    
17
            // und wieder rauf zählen...          
18
            if (u8SpeicherDimmwert[ArrNr] ==5)raufrunter=0;
19
          }

Grüsse,
R.

von Stefan (Gast)


Lesenswert?

Ich hab's gerade nochmal ausprobiert und es klappte nicht.
Jetzt sehe ich aber, dass du das ret in Klammern gesetzt hast " 
return(ret)". Kann das wohl der Fehler sein? Kann's grad nicht testen...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan schrieb:
> Kann das wohl der Fehler sein?

Nein.

von (prx) A. K. (prx)


Lesenswert?

Rene H. schrieb:
1
> static uint8_t raufrunter;
2
>
>
> ist nicht Initialisiert.

Doch. Auf 0.

von Karl H. (kbuchegg)


Lesenswert?

Stefan schrieb:
> Ich hab's gerade nochmal ausprobiert und es klappte nicht.

Nachdem ich deinen Code jetzt schon ein paar mal studiert habe und 
nichts finden konnte, denke ich
a) dass die Funktion sehr unübersichtlich geschrieben ist
b) dass das Problem an anderer Codestelle sitzt, die du nicht gezeigt 
hast

von Rene H. (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> b) dass das Problem an anderer Codestelle sitzt, die du nicht gezeigt
> hast

Das vermute ich auch. Das wird im main sein. Da man aber die Strukturen 
nicht kennt ist es schwierig.
Klar ist, das seine Variante zwei für den Fall
1
u8SpeicherDimmwert[ArrNr] ==100

das zweite if ausführt.

@Stefan
Wenn Du das ganze Programm inkl. Headerfiles in einem Zip reinstellt, 
kann man Dir sicher helfen.

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.