- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Programierung mit bool

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173

    Programierung mit bool

    Anzeige

    Praxistest und DIY Projekte
    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


    Code:
    #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;
    }

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Code:
     #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;
    }
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    oder noch kürzer:
    Code:
    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);

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173
    Wow

    Danke das ging ja schnell

    Ich wede es am Abend gleich probieren

    Lg

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173
    Hy

    Code:
     #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
    Code:
    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)
    Wenn jemand einen Tipp hat .....bitte....


    Lg

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    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
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173
    Ok

    Danke
    was ist der unterschied

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


    Wenn ich es ändere:

    Code:
    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

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173
    Zitat Zitat von Problem

    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

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    Das = ist der Zuweisungsoperator, das == ist zum Vergleichen da. Deshalb auch die Warnung "... around assignment ....

    MfG Mark

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173
    Zitat Zitat von radbruch
    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:


    Code:
    	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
    Code:
    #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)

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad