- LiFePO4 Speicher Test         
Seite 7 von 8 ErsteErste ... 5678 LetzteLetzte
Ergebnis 61 bis 70 von 78

Thema: Programmier Fragen

  1. #61
    Benutzer Stammmitglied
    Registriert seit
    20.02.2007
    Alter
    36
    Beiträge
    45
    Anzeige

    Powerstation Test
    ja genau dass will ich ja !
    aber nach einem mal aufrufen ist sense !
    und wenn ich es anders mache wird es immer aufgerufen !?!?!?!?!

    gibt es irgendwelche andere funktionen die switch beeinflussen könnten ?
    ich hab schön langsam alle mir erdenklichen varianten durch ?!?!
    Wissen ist Macht!
    Ich weis nichts ... macht nichts

  2. #62
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    @bloodyDragon
    Dein Programm wartet nicht auf das loslassen des Tasters um dann wieder auf das Drücken zu warten.
    Eventuell hilft folgendes:
    Code:
    StartSwitch();
    while(1) {
          PrintInt(switched);
          if(switched == TRUE) { // Tastendruck
    
             t1 = PollSwitch();
             t2 = PollSwitch();
    
             PrintInt(t1);
             PrintInt(switched);
             SerPrint ("\n\r");
             
             while (switched == TRUE) {
                switched = FALSE;
                StartSwitch();
                Sleep (10);      // muesste ueberfluessig sein
             }
          }
    }
    oder 'logisch' lesbarer:
    Code:
    switched = FALSE;
    StartSwitch();
    while(1) {
    
          while (switched == FALSE)
              ;                // warte auf druecken
    
          t1 = PollSwitch();
          t2 = PollSwitch();
    
          PrintInt(t1);
          SerPrint ("\n\r");
             
          while (switched == TRUE) {  // warte auf loslassen
                switched = FALSE;
                StartSwitch();
                Sleep (10);      // muesste ueberfluessig sein
          }
    }
    Der sleep in der inneren while-Schleife hat nichts mit dem oben angesprochenen warten zu tun. Hab ich nur mal vorsichtshalber da hingeschrieben, da ja auch der Interrupt Zeit braucht bis er die switched-Variable gesetzt hat.
    Das 'PrintInt(switched);' habe ich mal entfernt, da ich glaube, dass du das nur zum testen eingebaut hast.
    Lieber Asuro programieren als arbeiten gehen.

  3. #63
    Benutzer Stammmitglied
    Registriert seit
    20.02.2007
    Alter
    36
    Beiträge
    45
    ahh danke !

    eine frage noch ..
    gibt es eine möglichkeit das ganze ohne poiling zu realisieren ?
    ( ich habe alles in state machines realisiert )
    und wenn mein asuro an die wand gefahren ist sollte er sofort wieder zurückfahren oder ? )
    Wissen ist Macht!
    Ich weis nichts ... macht nichts

  4. #64
    Benutzer Stammmitglied
    Registriert seit
    20.02.2007
    Alter
    36
    Beiträge
    45
    0switched 4
    0switched 1 // nach dem einschalten
    0switched 4
    0switched 1
    11switched 2 // taste eins gedrückt
    1switched 3
    1switched 1
    1switched 3
    1switched 1
    1switched 3
    1switched 1
    1switched 3
    1switched 1
    1switched 3
    1switched 1 // schon seit langem taste ausgelassen ..
    1switched 3
    1switched 1
    1switched 3 // wtf ?
    1switched 1


    Code:
    void tastenCheck(void)
    {
    	static unsigned char pressed = 0;
    	unsigned int t1,t2;
    	PrintInt(switched);
    	SerPrint("switched 1 \n\r");
        if(switched == TRUE && pressed == 0) { // Tastendruck
    		pressed = 1;
            t1 = PollSwitch();
            t2 = PollSwitch();
    		taste = (t1+t2+1)/2;
    		PrintInt(taste);
    				
    				
    		PrintInt(switched);
    		SerPrint("switched 2 \n\r");
        }
    
    	if(pressed == 1 && switched == TRUE) {
    		StopSwitch();
    		switched == 0;
    		PrintInt(switched);
    		SerPrint("switched 3 \n\r");
    	}
    
    	if(switched == 0) {
    		pressed = 0;
    		StartSwitch();
    		PrintInt(switched);
    		SerPrint("switched 4 \n\r");
    	}
    
    }
    kann mir jemand erklären wo der fehler liegt ?

    es ist nichtmehr meine ursprüngliche static versuchsvariante da ich herumprobiert habe

    .. das ergebnis war immer das selbe ?!?!

    whats wrong ?
    Wissen ist Macht!
    Ich weis nichts ... macht nichts

  5. #65
    Neuer Benutzer Öfters hier
    Registriert seit
    22.02.2007
    Ort
    Hannover
    Alter
    47
    Beiträge
    12
    Hab den Code nur Überflogen, glaube es ist die Zeile:
    if(pressed == 1 && switched == TRUE) {
    StopSwitch();
    switched == 0; <---------------------------------da

  6. #66
    Benutzer Stammmitglied
    Registriert seit
    20.02.2007
    Alter
    36
    Beiträge
    45
    thx ^^
    immer wieder die noobie fehler oO


    yehaaaa das GEHT
    ich hab die letzte if jetzt noch an den anfang gestellt
    ändert eigentlich nix und es gibt fix keine probs mit startswitch()

    0switched 1
    0switched 4
    0switched 1
    0switched 4
    0switched 1
    0switched 4
    321switched 2
    1switched 3
    1switched 1
    1switched 3
    1switched 1
    1switched 3
    1switched 1
    1switched 3
    1switched 1
    1switched 3
    1switched 1
    0switched 3
    0switched 1
    0switched 4
    0switched 1
    Code:
    void tastenCheck(void) 
    { 
            // Switched 1
    	static unsigned char pressed = 0; 
    	unsigned int t1,t2; 
    	if(switched == FALSE) { 
    		pressed = 0; 
    		StartSwitch();  
                    // Switched 4
    	} 
    	if(switched == TRUE && pressed == 0) { // Tastendruck 
    	pressed = 1; 
    	t1 = PollSwitch(); 
    	t2 = PollSwitch();
    	taste = (t1 > t2) ? t1:t2; 
            // Switched 2
    	} 
    	if(pressed == 1 && switched == TRUE) { 
            // Switched 3
    	switched = FALSE; 
    	StartSwitch(); 
    	} 
    }

    ich kann mich täuschen aber es wäre vl praktisch eine leserlichere version hiervon bei der dokumentation von der asurolibary zuzufügen...

    ( als anfänger ( wie ich *g* ) vergisst mann schnell mal dass eine taste auch bei einem mal drücken mehrmals abgefragt wird )

    naja .. nur ein vorschlag =)
    Wissen ist Macht!
    Ich weis nichts ... macht nichts

  7. #67
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    @bloodyDragon: Freut mich, dass das Prinzip funktioniert.
    Nepi hat deinen Fehler ja schon gefunden. (Und ich sehe gerade, dass du es schon umgebaut hast)

    Mit dem Polling ist das so eine Sache.
    Zum einen wird dein Hauptprogramm ja immer die berühmte while(1)-Schleife haben in der alles zum leben des Asuros getan wird.

    Innerhalb dieser Haupt-Schleife prüfst du mit deiner Funktion tastenCheck() die Tasten. Das Ergebnis steht dir ja danach in der globalen Variable taste zur verfügung. (Bestimmt startes du darüber die Motoren um mal ein Stück geradeaus zu fahren.)
    Wenn du zum Fahren z.B. die Funktion Go() aus der Lib (dank an stochri für die Funktion) benutzt, wirst du jetzt Pech haben mit den Tasten.
    Die Go()-Funktion kommt nämlich erst dann in deine Haupt-Schleife zum nächsten Tastenlesen zurück, wenn die komplette Strecke gefahren wurde.

    Hier wäre es nun deine Aufgabe die Go()-Funktion auch noch in eine Status-Maschine umzubauen, so dass auch sie zurückkommt nachdem sie sich z.B. 'nur' mal eben um das Geradeausfahren gekümmert hat. Ein weiterer Status in der Funktion müsste dann natürlich auch noch das erfolgreiche Abfahren der gewünschten Strecke anzeigen und bearbeiten.

    Wäre bestimmt eine interessante Lösung für die Lib. Dann aber bitte auch gleich für die Turn()-Funktion

    Falls du nicht Go() und/oder Turn() benutzt, würde es mich (und die anderen Helfer bestimmt auch) sehr stark interessieren was du bis jetzt komplett programmiert hast. Da bekommt man dann doch eher eine Übersicht was du so treibst und wo dann evl. geholfen werden kann.
    Lieber Asuro programieren als arbeiten gehen.

  8. #68
    Benutzer Stammmitglied
    Registriert seit
    20.02.2007
    Alter
    36
    Beiträge
    45
    Die Go() funktion habe ich kopiert und in eine state machine umgewandelt
    wenn meine drive funkion das 1. mal aufgerufen wird wird sie mit den benötigten werten initialisiert ( hat auchnoch den vorteil dass ich die standardabweichung der motoren von anfang an großteils korrigiert habe ) und fährt solange gerade aus bis eine andere funktion aufgerufen wird

    turn habe ich auch in einer state machine variante aber bei mir dreht sich nur ein rad

    ^^ ich erkläre mich gerne bereit die turn und go umzubauen

    vermutlich mache ich dann eine LoadGo und eine LoadTurn
    mit der man die distanz und speed bestimmen kann .

    naja ich bin momentan bei 1120 zeilen code
    iss schon einiges mittlerweile und da ich am samstag fertig sein sollte und momentan meine i2c_modis aus irgendeinem grund nicht genau so machen wie ich möchte hab ich etwas stress -> wenn ich das machen soll/kann/darf mach ichs nächste woche

    eine frage noch
    Code:
    position = (i2c_lLine>i2c_rLine) ? OFF_RIGHT : OFF_LEFT;
    wenn true ist positon = OFF_RIGHT wenn FALSE ist position = OFF_LEFT oder ?
    Wissen ist Macht!
    Ich weis nichts ... macht nichts

  9. #69
    Benutzer Stammmitglied
    Registriert seit
    20.02.2007
    Alter
    36
    Beiträge
    45
    test.c:449: error: 'for' loop initial declaration used outside C99 mode

    (was heisst das ?? )
    die for ist in einer if in einer state machine ... ?

    EDIT: scheinbar darf man in einer for(
    kein for(int i = 0; etc. machen
    Wissen ist Macht!
    Ich weis nichts ... macht nichts

  10. #70
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    richtig, das darf nur in einer schleife der obersten ebene gemacht werden. also musst du die variablen vorher deklarieren...
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Seite 7 von 8 ErsteErste ... 5678 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress