Forum: Mikrocontroller und Digitale Elektronik boolescher ausdruck


von peter (Gast)


Lesenswert?

Nur ganz kurz:

Folgender code:
bool schalte_LED(bool an_aus)
{

  if (an_aus)
  {
    myGLCD.drawBitmap(75,90,96,160,tuer_versuch2);

  }
  else
  {
    myGLCD.drawBitmap(80,80,72,160,tuer_zu);

  }
};

jetzt möchte ich noch eine clearScreen-mehtode einfügen, sobald ein 
neues bild reinkommt. kann mir da jemand kurz sagen wie ich das machen 
soll?
es kommen zyklisch can nachrichten rein und bisher wird mein bild bei 
jeder neuen nachricht immer wieder gelöscht. ich möchte aber dass sobald 
die 1.neue nachricht reinkommt, das bild verändert wird und dann auch 
bleibt

von Ingo L. (corrtexx)


Lesenswert?

peter schrieb:
> kann mir da jemand kurz sagen wie ich das machen soll?
Mit den Infos nicht...
Deine Funktion heißt "schalte_LED", aber offensichtlich malst du da was 
auf nem GLCD!? Auch deine Problemstellung lässt nur mutmaßen was du 
willst und was du hast.

> Nur ganz kurz:
funktioniert hier nicht, sag was los ist und versuch mal dein Problem 
klar zu formulieren.
1
bool schalte_LED(bool an_aus)
2
{
3
  static uint8_t temp = 0;
4
  if (temp != an_aus){
5
    if (an_aus)
6
    {
7
      myGLCD.drawBitmap(75,90,96,160,tuer_versuch2);
8
9
    }
10
    else
11
    {
12
      myGLCD.drawBitmap(80,80,72,160,tuer_zu);
13
    }
14
  }
15
  temp = an_aus;
16
};

von peter (Gast)


Lesenswert?

Ok sorry
also im moment wird bei einer can nachricht mit der botschaft 1 das 
bitmap tuer_versuch2 und bei einer nachricht mit botschaft 0 das bitmap 
tuer_zu abgebildet.

möchte die bilder bei einer neuen ankommenden nachricht zunächst 
löschen, damit nur das aktuelle bild zu sehen ist. das bekomm ich nicht 
hin

von Ingo L. (corrtexx)


Lesenswert?

Temp muss auf 2 initialisiert werden statt auf 0, für den allerersten 
Durchlauf.

von peter (Gast)


Lesenswert?

ich hab auch eine methode clrScr();.
frag mich nur ob ich das mit einem bool oder iwie anders lösen soll

von Ingo L. (corrtexx)


Lesenswert?

1
void schalte_LED(bool an_aus)
2
{
3
  static uint8_t temp = 2;
4
  if (temp != an_aus){
5
    clrScr();
6
    if (an_aus)
7
    {
8
      myGLCD.drawBitmap(75,90,96,160,tuer_versuch2);
9
    }
10
    else
11
    {
12
       myGLCD.drawBitmap(80,80,72,160,tuer_zu);
13
    }
14
  }
15
  temp = an_aus;
16
};

von peter (Gast)


Lesenswert?

Ingo L. schrieb:
> void schalte_LED(bool an_aus)
> {
>   static uint8_t temp = 2;
>   if (temp != an_aus){
>     clrScr();
>     if (an_aus)
>     {
>       myGLCD.drawBitmap(75,90,96,160,tuer_versuch2);
>     }
>     else
>     {
>        myGLCD.drawBitmap(80,80,72,160,tuer_zu);
>     }
>   }
>   temp = an_aus;
> };

Ingo, überragend, vielen herzlichen dank dir!!!!=)

temp wird am anfang auf 2 gesetzt, weil false mit 0 und true schon mit 1 
belegt sind oder warum?

von Jodel (Gast)


Lesenswert?

Ingo L. schrieb:
> Temp muss auf 2 initialisiert werden statt auf 0, für den
> allerersten Durchlauf.

Und am Besten alle Compiler-Warnings abschalten, die nerven sowieso nur. 
:-(

von jibi (Gast)


Lesenswert?

>temp wird am anfang auf 2 gesetzt, weil false mit 0 und true schon mit 1
>belegt sind oder warum?

Genau, du brauchst einfach einen 3. Zustand zur Initialisierung...

von Ingo L. (corrtexx)


Lesenswert?

Jodel schrieb:
> Und am Besten alle Compiler-Warnings abschalten, die nerven sowieso nur.
Öh, ja, du hast Recht.
Die Funktion muss natürlich auch einen uint8_t übergeben bekommen.
1
void schalte_LED(uint8_t an_aus)
Trotzdem kannst du ja statt dummer Kommentare auch was Sinnvolles 
posten.

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.