- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 14

Thema: Stopp am Abgrund

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #7
    Benutzer Stammmitglied Avatar von Herbert A.
    Registriert seit
    24.02.2010
    Alter
    28
    Beiträge
    46
    vielleicht auch mit diesem Programm:
    PHP-Code:
    #include "asuro.h"

    #define STOP 1

    int main(void)

    {

    unsigned int lineData[2];

    unsigned int erst[2];

    int x;

    int i;

    Init();

    LineData(erst);

    for(
    0x<  100000000i++){

    for(
    0i<  3i++){


    FrontLED(ON);

    MotorDir (FWD,FWD);

    MotorSpeed(120,120);

        
    LineData(lineData);
        
        if ((
    lineData[0]- erst[0] < STOP ) && (lineData[1] - erst[1] <  STOP))  {
        
        
    MotorSpeed(120,120);
        
        
    MotorDir(RWD,RWD);
        
            for(
    0i<  200i++){
        
        
    Sleep(255);
        
        }
        
        
    MotorSpeed(140,0);
        
        
    MotorDir(RWD,BREAK);
            
        
    BackLED(ON,ON);
        
        for(
    0i<  400i++){
        
        
    Sleep(255);
        
        }
        
        
    BackLED(OFF,OFF);
        
        }
        
        else;
        
        {
        
        
    MotorSpeed(100,100);
        
        
    MotorDir(FWD,FWD);
        
        }
        
        }
        
        }
        
    while (
    1);

    return (
    0);


    mfG

    [Edit von radbruch]
    Hast du das Programm selbst mal ausprobiert? Mir ist nicht ganz klar wie das funktioniert:

    if ((lineData[0]- erst[0] < STOP )...

    Wenn ( der immer wieder mit Beleuchtung neu eingelesene Linienwert links) minus ( der beim Start ohne Beleuchtung eingelesene Linienwert links) insgesamt kleiner als STOP ist...

    Wäre nicht ein || sinnvoller als das && ? Wenn der Abgrund von einem Liniensensor erkannt wird würde dann gestoppt.

    Der else-Zwieg endet direkt nach dem ; hinter else, alles was danach kommt wird unabhängig von der if-Bedingung ausgeführt.

    Verschachtelte For-Schleifen dürfen nicht dieselbe Variable verwenden, i wird nie größer als 401. Maxwert einer Integervariable ist 32.767, 100000000 wird deshalb sowieso nie erreicht:

    for(i = 0; x< 100000000; i++){
    for(i = 0; i< 3; i++){
    ...
    for(i = 0; i< 200; i++)
    ...
    for(i = 0; i< 400; i++)

    Etwas umformatiert und mit allen Änderung sieht dein Programm dann so aus:
    PHP-Code:
    #include "asuro.h"

    #define STOP 1

    int main(void)
    {
        
    unsigned int ilineData[2], erst[2];

        
    Init();
        
    LineData(erst);   // die erste Lesung ist immer Schrott!
        
    LineData(erst);
        
    FrontLED(ON);
        
    Sleep(10);
        
    MotorDir (FWD,FWD); // vorwärts fahren
        
    MotorSpeed(120,120);

         while(
    1)
        {
            
    LineData(lineData);
            if ((
    lineData[0]- erst[0] < STOP ) && (lineData[1] - erst[1] <  STOP))
            {
                
    MotorSpeed(120,120); // zurückstoßen
                
    MotorDir(RWD,RWD);
                for(
    0i<  200i++)
                    
    Sleep(255);

                
    MotorSpeed(140,0); // drehen
                
    MotorDir(RWD,BREAK);
                
    BackLED(ON,ON);
                for(
    0i<  400i++)
                    
    Sleep(255);
                
    BackLED(OFF,OFF);
            }
            else
            {
                
    MotorDir (FWD,FWD); // vorwärts fahren
                
    MotorSpeed(120,120);
            }
        }
        return (
    0);

    (ungetestet)

    Ich hoffe, ich habe nichts übersehen.
    Geändert von radbruch (09.03.2011 um 21:43 Uhr)
    while (!asleep()) sheep++;

Berechtigungen

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

LiFePO4 Speicher Test