Archiv verlassen und diese Seite im Standarddesign anzeigen : Programierung mit bool
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;
}
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);
Wow
Danke das ging ja schnell
Ich wede es am Abend gleich probieren
Lg
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
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
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
Das = ist der Zuweisungsoperator, das == ist zum Vergleichen da. Deshalb auch die Warnung "... around assignment ....
MfG Mark
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
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.