PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programierung mit bool



Problem
10.12.2010, 11:00
Hallo

Da ich jetzt mit allen anderen selbstgeschreibenen Themen fertig bin habe ich ein neues erstellt.


Ich habe hier mit Hilfe von "bool"ein beispielprogramm geschreiben.

Ich möchte in Zukunft mit bool arbeiten, weil da kann ich längere Programme erstellen die sehr übersichtlich sind.

Ich habe da irgendwo einen Fehler könnt ihr mir bitte helfen?

Dieser Code kommt nach den compilieren "eine Warnung"
warning: suggest parentheses around assignment used as truth value



#include <stdbool.h>
#include <asuro.h>
int main(void)
{
Init();
bool blinken;
int LANG = 0,z = 0,x = 0, y = 0;


if (blinken = 1)

{
//Schalter
//Begin Blinktakt Backleds
x=x+1;
if (x > 1000)
LANG=LANG+1;
if (x > 1000)
x=0;
if((LANG > 0) && (LANG < 20))
BackLED(ON,OFF);
if((LANG > 20) && (LANG < 40))
BackLED(OFF,ON);
if ( LANG > 40)
LANG=0;
//Ende Blinktakt Backleds
}
if (blinken = 0)
BackLED(OFF,OFF);

while( 1 )
{
y++;
if (y > 1000)
z++;
if (y > 1000)
y=0;

if (z < 20) // Wenn z kleiner 20 ist blinkt er
blinken = 1;

if (z > 20)
{ blinken = 0;
StatusLED(RED);
}
if (z > 30)
z=0;
}
return 0;
}

radbruch
10.12.2010, 11:09
#include <stdbool.h>
#include <asuro.h>
int main(void)
{
Init();
bool blinken = true;
int LANG = 0,z = 0,x = 0, y = 0;


if (blinken == true)

{
//Schalter
//Begin Blinktakt Backleds
x=x+1;
if (x > 1000)
LANG=LANG+1;
if (x > 1000)
x=0;
if((LANG > 0) && (LANG < 20))
BackLED(ON,OFF);
if((LANG > 20) && (LANG < 40))
BackLED(OFF,ON);
if ( LANG > 40)
LANG=0;
//Ende Blinktakt Backleds
}
if (blinken == false)
BackLED(OFF,OFF);

while( 1 )
{
y++;
if (y > 1000)
z++;
if (y > 1000)
y=0;

if (z < 20) // Wenn z kleiner 20 ist blinkt er
blinken = true;

if (z > 20)
{ blinken = false;
StatusLED(RED);
}
if (z > 30)
z=0;
}
return 0;
}

askazo
10.12.2010, 11:27
oder noch kürzer:

if (blinken)

{
//Schalter
//Begin Blinktakt Backleds
x++;
if (x > 1000)
{
LANG++;
x=0;
}
if((LANG > 0) && (LANG < 20))
BackLED(ON,OFF);
else if((LANG > 20) && (LANG < 40))
BackLED(OFF,ON);
else if ( LANG > 40)
LANG=0;
//Ende Blinktakt Backleds
}
else
BackLED(OFF,OFF);

Problem
10.12.2010, 13:02
Wow

Danke das ging ja schnell

Ich wede es am Abend gleich probieren

Lg

Problem
10.12.2010, 19:02
Hy



#include <stdbool.h>
#include <asuro.h>
int main(void)
{
Init();
bool blinken = true;
int LANG = 0,z = 0,x = 0, y = 0;


if (blinken == true)

{
//Schalter
//Begin Blinktakt Backleds
x=x+1;
if (x > 1000)
LANG=LANG+1;
if (x > 1000)
x=0;
if((LANG > 0) && (LANG < 20))
BackLED(ON,OFF);
if((LANG > 20) && (LANG < 40))
BackLED(OFF,ON);
if ( LANG > 40)
LANG=0;
//Ende Blinktakt Backleds
}
if (blinken == false)
BackLED(OFF,OFF);

while( 1 )
{
y++;
if (y > 1000)
z++;
if (y > 1000)
y=0;

if (z < 20) // Wenn z kleiner 20 ist blinkt es
blinken = true;

if (z > 20)
{ blinken = false;
StatusLED(RED);
}
if (z > 30)
z=0;
}
return 0;
}


Ich habe es jetzt getestet aber es leuchtet immer die statusLED ROT

EDIT

Ich habe es jetzt so


LG
while( 1 )
{
y++;
if (y > 1000)
z++;
if (y > 1000)
y=0;


if (z < 20) // Wenn z kleiner 20 ist blinkt es
{ blinken = true;
StatusLED(OFF); //EDIT hinzugefügt
}
if (z > 20)
{ blinken = false;
StatusLED(RED);
}
if (z > 30)
z=0;
}
return 0;

Das blinkt immer die statusLED
Irgendwie nimmt er das mit dem bool nichtsorichtig war
will er mich verappeln(der roboter) O:)
Wenn jemand einen Tipp hat .....bitte....


Lg

radbruch
10.12.2010, 20:05
Hallo

Also jetzt muss ich dich echt mal rüffeln. Versuche doch selbst nachzudenken und lass dir nicht alles vorkauen.

if (blinken == true)... wird nur einmal vor der while-Schleife ausgeführt und dann nie wieder!

Gruß

mic

Problem
10.12.2010, 20:23
Ok

Danke
was ist der unterschied

Laut anleitung seite 60
== logischer Vergleich auf gleich
= ........................?


Wenn ich es ändere:


if (blinken == true)

{
//Schalter
//Begin Blinktakt Backleds
x=x+1;
if (x > 1000)
LANG=LANG+1;
if (x > 1000)
x=0;
if((LANG > 0) && (LANG < 20))
BackLED(ON,OFF);
if((LANG > 20) && (LANG < 40))
BackLED(OFF,ON);
if ( LANG > 40)
LANG=0;
//Ende Blinktakt Backleds
}
if (blinken = false)
BackLED(OFF,OFF);


kommt wieder diese meldung:

test.c:28: warning: suggest parentheses around assignment used as truth value

Problem
10.12.2010, 21:23
Ich habe es jetzt getestet aber es leuchtet immer die statusLED ROT

Lg

schuld ist weil der zähler so langsam ist (es dauert so lange bis es umschaltet)

D.h.

Dieser Teil funkt eigentlich
if (z < 20)
{ blinken = true;
StatusLED(RED);
}
if (z > 20)
{ blinken = false;
StatusLED(YELLOW);
}
if (z > 30)
z=0;

nur ignoriert der Asuro oder der compiler das mit blinken

Das mit den = und == (o.g.) macht mir das Problem das es dann eien warnung gibt
test.c:30: warning: suggest parentheses around assignment used as truth value

Ich habe da keine Ahnung mit den = und == und den Fehlercode

Lg

p_mork
10.12.2010, 22:34
Das = ist der Zuweisungsoperator, das == ist zum Vergleichen da. Deshalb auch die Warnung "... around assignment ....

MfG Mark

Problem
10.12.2010, 22:37
Hallo

Also jetzt muss ich dich echt mal rüffeln. Versuche doch selbst nachzudenken und lass dir nicht alles vorkauen.

if (blinken == true)... wird nur einmal vor der while-Schleife ausgeführt und dann nie wieder!

Gruß

mic

Ups

Auch wenn das so klingt wie ne ausrede es ist keine

Ich habe das von dir mit der while schleife gelesen

und dann habe ich gleich gedacht ich darf nur einmal zwei == machen udn dann ein =
(keine Ahnung wieso vlt Vorfreude)
so:



if (blinken == true) // zwei =
{
//Schalter
//Begin Blinktakt Backleds
if((LANG > 0) && (LANG < 20))
BackLED(ON,ON);
if((LANG > 20) && (LANG < 40))
BackLED(OFF,OFF);
if ( LANG > 40)
LANG=0;
//Ende Blinktakt Backleds
}
if (blinken = false) //ein =
BackLED(OFF,OFF);


Mit hilfe des Programmes

#include "asuro.h"
#include <stdio.h>

int main()
{
int x = 0, y=0, t=0;
char aC[2];
Init();
while(1)
{
x++;
if (x > 10)
y++;
if (x > 10)
x=0;
sprintf(aC, "%d", y);
SerWrite(aC, 2);
SerWrite (" aC\n\r", 5);
for (t=0; t< 20; t++) //Kurze Pause beim Übertragen
{
Sleep (72);
}
if (y < 10)
BackLED(ON,OFF);

if ((y > 10)&&(y < 20))
BackLED(OFF,ON);
if (y > 20)
{
BackLED(OFF,OFF);
StatusLED(RED);
}
else
StatusLED(GREEN);
if(y > 30)
y=0;
}
}



habe ich mitbekommen dass LANG immer 1 ns ist weil ................ist mir voll klar



Ich entschuldige mich für die doffe frage aber gotseidank habe ich es "übersehen"
Sowas mach ich nie wieder(aus fehlern lernt man)

Das wichtigste für mich ist das ich es verstehe und mich auskenne!!!

Liebe grüße Michael

(Juhu)

radbruch
10.12.2010, 23:57
Hallo

Du bist echt ein zäher Bursche. Wieso bringst du nun doch wieder Sleep() ins Spiel? Du wolltest doch ohne auskommen.

= ist ein Zuweisungsoperator. Das links vom = wird wie das rechts vom =

== ist ein Vergleich links ist gleich rechts.

Typischer Anfängerfehler ist dabei if(x = 3)... Nach diesem Befehl ist die 3 in x. Das Ergebniss ist true, denn 3 ist ungleich 0 (zu true und false solltest du ja alles wissen, wenn du bool verwendest ;)

Und noch zu der while(1)-Problematik in deinem Programm: Ein Programm, genauer die main()-Funktion, wird von oben nach unten abgearbeitet:

Init();
befehl1;
befehl2;
...

Dann kommt die while-Schleife
while(1)
{
befehl3;
befehl4;
...
}

Alles in der Schleife wird nun endlos ausgeführt, also nur befehl3 und befehl4. befehl1 und befehl2 wird nie mehr ausgeführt.

Bitte PN nur wenn's wirklich brennt! Danke.

Gruß

mic

Problem
11.12.2010, 09:41
OK

Hallo

Das mit Sleep ist so eine Sache

wenn ich das ganze Programm mit sleep aufbaue und es bleibt irgendwo hängen steht das ganze Programm aber wenn ich sleep nur von für eine Teil verwende der mit eien Zähler lauft und es bleibt hängen lauft es trotzdem weiter weil ja das dehler deswegen nicht stehen bleibt

Bei großen Programierungern für fabriksmaschninen darf nicht hängenbleiben und ich lerne es mir gleich so ein(ein bekannter macht sowas)
Darum

Lg