Kleinsten Wert finden, Variablen vergleichen und auswerten

Gast #4420397
Lesenswert?
• ▲
▼
Hallo,

Sitze grade vor einem unverständlichen Problem:

Von 4 Double-Variablen soll die kleinste gefunden werden.
Wenn die andrern Varaiblen um > 0,2 größer sind soll eine Aktion 
ausgeführt werden.

Es kommt jedoch überall # raus.
-->Dass sollte eigentlich garnicht möglich sein.

Seht ihr den Fehler?
1
void autobalance(uint8_t ueb)
2
{
3
  if (ueb==0)  //Automatisches balancing
4
  {
5
    //Finden der kleinsten Spannung
6
    uint8_t spg_klein=0;
7
    if ((spg1<spg2) && (spg1<spg3) && (spg1<spg4))
8
    {
9
      spg_klein=spg1;
10
    }
11
    else if ((spg2<spg1) && (spg2<spg3) && (spg2<spg4))
12
    {
13
      spg_klein=spg2;
14
    }
15
    else if ((spg3<spg1) && (spg3<spg2) && (spg3<spg4))
16
    {
17
      spg_klein=spg3;
18
    }
19
    else
20
    {
21
      spg_klein=spg4;
22
    }
23
    //----------Ein/Abschalten der Balancing R's
24
    if (spg1>(spg_klein+0.2))
25
    {
26
      zeile1[6]='#';
27
      balance(0,1);
28
    }
29
    else
30
    {
31
      zeile1[6]=' ';
32
      balance(0,0);
33
    }
34
    if (spg2>(spg_klein+0.2))
35
    {
36
      zeile1[14]='#';
37
      balance(1,1);
38
    }
39
    else
40
    {
41
      zeile1[14]=' ';
42
      balance(1,0);
43
    }
44
    if (spg3>(spg_klein+0.2))
45
    {
46
      zeile2[6]='#';
47
      balance(2,1);
48
    }
49
    else
50
    {
51
      zeile2[6]=' ';
52
      balance(2,0);
53
    }
54
    if (spg4>(spg_klein+0.2))
55
    {
56
      zeile2[14]='#';
57
      balance(3,1);
58
    }
59
    else
60
    {
61
      zeile2[14]=' ';
62
      balance(3,0);
63
    }
64
  }
65
}
Gast #4420433
Lesenswert?
• ▲
▼
Es geht um ein Balancing-System, dabei soll die höchste Spannung nur 
0,2V größer als die anderen sein.

-->Im Bedarfsfall wird ein Parallelwiderstand geschaltet.
-->Dann soll dies durch ein '#' auf dem Display angezeigt werden.

Spg 1 = 7,88V
Spg 2 = 6,36V
Spg 3 = 6,52V
Spg 4 = 6,11V

Aktuell werden alle Spannungen außer Spg 1 mit '#' angezeigt und 
entladen.

Habe die Spannungen nun in ein Array gepackt, doch am Problem ändert 
sich nichts.
1
void autobalance(uint8_t ueb)
2
{
3
  if (ueb==0)  //Automatisches balancing
4
  {
5
    double spg_klein=100;
6
    for (int i=0;i<4;i++)
7
    {
8
      if (spg[i]<spg_klein)
9
      {
10
        spg_klein=spg[i];
11
      }
12
    }
13

14
    //----------Ein/Abschalten der Balancing R's
15
    if (spg[0]>(spg_klein+0.2))
16
    {
17
      zeile1[6]='#';
18
      balance(0,1);
19
    }
20
    else
21
    {
22
      zeile1[6]=' ';
23
      balance(0,0);
24
    }
25
    if (spg[1]>(spg_klein+0.2))
26
    {
27
      zeile1[14]='#';
28
      balance(1,1);
29
    }
30
    else
31
    {
32
      zeile1[14]=' ';
33
      balance(1,0);
34
    }
35
    if (spg[2]>(spg_klein+0.2))
36
    {
37
      zeile2[6]='#';
38
      balance(2,1);
39
    }
40
    else
41
    {
42
      zeile2[6]=' ';
43
      balance(2,0);
44
    }
45
    if (spg[3]>(spg_klein+0.2))
46
    {
47
      zeile2[14]='#';
48
      balance(3,1);
49
    }
50
    else
51
    {
52
      zeile2[14]=' ';
53
      balance(3,0);
54
    }
55
  }
56
}
Gast #4420453
Lesenswert?
• ▲
▼
Loddar schrieb:
> Matze schrieb:
>> Es geht um ein Balancing-System, dabei soll die höchste Spannung nur
>> 0,2V größer als die anderen sein.
>
> und warum suchst du dann nach der kleinsten Spannung?

Hab's falsch formuliert,
Es soll die kleinste Spannung ermittelt werden.
Alle anderen Spannungen sollen so geregent werden, dass sie maximal 0,2V 
größer sind.
Gast #4420472
Lesenswert?
• ▲
▼
Matze schrieb:
> if (spg[0]>(spg_klein+0.2))
>     {
>       zeile1[6]='#';
>       balance(0,1);
>     }
>     else
>     {
>       zeile1[6]=' ';
>       balance(0,0);
>     }

ändere das doch Mal in

 if ( spg[0]==spg_klein )
       zeile1[6]='#';
     else
       zeile1[6]=' ';

usw.
um zu kontrollieren was als kleinste Spannung gefunden wird,
Programmieren besteht zu einem großen Teil in systematischer Fehlersuche 
...

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.