Forum: Mikrocontroller und Digitale Elektronik fortlaufend zählen m. Ausgabe auf LCD (18F2550)


von Kathleen Z. (Gast)


Lesenswert?

Hallo,

ich häng grad total an meinem Programm. hier geht´s darum die 
Sensorwerte von 5 Sensoren - hängen an folgendem PIC 18F2550, an den 
PINs 2, 3, 4, 5 & 7.
Werte einlesen geht ja mittlerweile schon - diese über RS232 auf LCD 
ausgeben - auch kein Problem...ABER nun kommt´s:
Am Display soll folgendes stehen:
Sensor "NR"
"Wert" Pa
(zweizeilig - da auch zweizeiliges Display)
"Sensor"; "Wert" u. "Pa" wird schon brav angezeigt - nur die 
"fortlaufende" Nummer, welche neben "Sensor" hingehört will einfach 
nicht richtig raus - entweder kommen da so zahlen wie 0, 2, 4, 8, 1 oder 
einfach nur "0"...
wer kann mir denn bitte kurz weiterhelfen? hab schon ´nen mächtigen 
Knoten im Gehirn... :-(

von Tom (Gast)


Lesenswert?

Ohne Programmcode wirds schwierig

von Volker S. (vloki)


Lesenswert?

Kathleen Z. schrieb:
> entweder kommen da so zahlen wie 0, 2, 4, 8, 1 oder
> einfach nur "0"...

Dir ist schon klar, dass du keine Zahlen schicken kannst,
sondern Zeichen ?

von spontan (Gast)


Lesenswert?

Weiterhelfen?
Knoten im Hirn werden durch Rauchen entknotet (das richtige Zeug aber), 
Alkohol oder Frauen sind auch hilfreich.

Wie war die konkrete Frage nochmal?

von Kathleen Z. (Gast)


Lesenswert?

sry - hab´s vergessen - aber mittlerweile hat es sich bisschen gebessert 
- mittlerweile zählt er so:
0, 1, 2, 3, 4, 8

-> wie schaff ich nun diesen "8"er wegzu"programmieren"?

hier ein ausschnitt des codes:
1
...
2
  if (act_sensor_number<=3)
3
      act_sensor_number++;
4
      else {
5
        if (act_sensor_number==4)
6
        act_sensor_number=8;
7
        else
8
        act_sensor_number=0;
9
      }

von Kathleen Z. (Gast)


Lesenswert?

spontan schrieb:
> Alkohol oder Frauen sind auch hilfreich

?!?!? 1. sitz ich in der firma - da gibt´s keinen alkohol
 u. 2. ich bin ´ne frau...da kann mir eine weitere frau auch nicht 
weiterhelfen... :-P

von Stefan (Gast)


Lesenswert?

Naja du setzt ja deine act_sensor_number auf 8 falls 
act_sensor_number==4.

von Kathleen Z. (Gast)


Lesenswert?

Stefan schrieb:
> Naja du setzt ja deine act_sensor_number auf 8 falls
> act_sensor_number==4.

ah jo...hoppla...VIELEN DANK! - jetz is der Knoten auch weg...

von Linksammler (Gast)


Lesenswert?

Kathleen Z. schrieb:
> -> wie schaff ich nun diesen "8"er wegzu"programmieren"?

Einfach:

Kathleen Z. schrieb:
> if (act_sensor_number<=3)
>       act_sensor_number++;
>       else {
>         if (act_sensor_number==4)
>         act_sensor_number=8;
>         else
>         act_sensor_number=0;
>       }

Ersetzen durch:
1
 if (act_sensor_number<=3) {
2
   act_sensor_number++;
3
 } else {
4
   act_sensor_number=0;
5
 }

von Volker S. (vloki)


Lesenswert?

Kathleen Z. schrieb:
> -> wie schaff ich nun diesen "8"er wegzu"programmieren"?

Lösch doch einfach die Zeilen
        if (act_sensor_number==4)
        act_sensor_number=8;
        else

von BeastyK (Gast)


Lesenswert?

Gugu Kathleen,

etwas mehr Code wäre schick, damit man auch weiß wie die Variablen 
definiert sind und so weiter...
Anstatt mit IF-Anweisung würde ich eventuell mal die CASE-Anweisung 
probieren.
Wenn

if (act_sensor_number==4)
        act_sensor_number=8;

nochmal etwas überdacht wird...
Lustig wäre wenn er Primzahlen ausspuckt, aber man kann ja nicht alles 
haben!

Gruß
dat
Beast

von Karl H. (kbuchegg)


Lesenswert?

Kathleen Z. schrieb:
> Stefan schrieb:
>> Naja du setzt ja deine act_sensor_number auf 8 falls
>> act_sensor_number==4.
>
> ah jo...hoppla...VIELEN DANK! - jetz is der Knoten auch weg...

Das wundert mich ehrlich gesagt nicht.
Denn deine Code-Formatierung ist, ganz ehrlich und frei gesagt, 
ziemliche Scheisse.

Dass du in
1
  if (act_sensor_number<=3)
2
      act_sensor_number++;
3
      else {
4
        if (act_sensor_number==4)
5
        act_sensor_number=8;
6
        else
7
        act_sensor_number=0;
8
      }

die Logik nicht mehr auf einen Blick erkennen kannst, verwundert nicht 
wirklich. Mit einer konsistenten Einrückung und ein paar Leerzeichen an 
strategischen 'Lese'-Punkten ...
1
  if (act_sensor_number <= 3)
2
    act_sensor_number++;
3
4
  else {
5
    if (act_sensor_number == 4)
6
      act_sensor_number = 8;
7
    else
8
      act_sensor_number = 0;
9
  }

sieht das alles gleich viel besser aus. und wenn man dann auch noch das 
else mit dem if zu einem 'else if' zusammenzieht
1
  if (act_sensor_number <= 3)
2
    act_sensor_number++;
3
4
  else if (act_sensor_number == 4)
5
    act_sensor_number = 8;
6
7
  else
8
    act_sensor_number = 0;

dann sieht man eigentlich das 'Problem' recht schnell.

Fazit: arbeite an deiner Code-Formatierung!
Dein Problem gehörte zu den Dingen, die nicht notwendig sind, wenn man 
seinen Code sauber hält.


Obwohl: Manchmal hat man wirklich Tomaten auf den Augen. Ist uns allen 
schon so gegangen.

von Kathleen Z. (Gast)


Lesenswert?

danke für die Info - bin aber erst seit kurzem unter den 
C-Programmierern bzw. MUSS ich es machen um die Abendschule positiv 
abschließen zu können.

tdm DANKE für das Feedback und die Infos... ;-)

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.