- 12V Akku mit 280 Ah bauen    Werbung      
Ergebnis 1 bis 3 von 3

Thema: Gesteuertes Vor- und Zurückfahren mit Hoch-und Tieflauframpe

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    63
    Beiträge
    5.799

    Gesteuertes Vor- und Zurückfahren mit Hoch-und Tieflauframpe

    Hallo mal wieder,

    wie angekündigt werde ich euch etwas nerven. *grins*

    Die Ausbeute dieser Nacht ist ein gesteuertes Pendeln von Drehzahl 0 bis Max und zurück auf 0 mit einstellbaren Drehzahlen und Rampen. Wunderbar Motoren und Getriebe schonend ermöglicht es ein komfortables Fahren ohne zusätzliche Interrupt-Funktionen. Darauf lege ich im Moment noch Wert. Der Weg zum ersten Nicklaushäuschen ist steil und steinig. Hier mein Code, diesmal ungeputzt, aber dafür so wie er auf meinem asuro läuft:
    Code:
    /* Gesteuertes Vor- und Zurueckpendeln mit einstellbaren Geschwindigkeiten und Rampen
       mic 7.1.2006
    */
    #include <asuro.h>
    
    unsigned char sw_data, i, tmp_char, step, speed_min, speed_max, rampe_v, rampe_r;
    unsigned int data[2], j, tmp_int;
    unsigned long loop_count, rampe_delay;
    unsigned char odo_bit_l, odo_bit_r;
    unsigned int odo_min_l, odo_max_l, odo_low_l, odo_high_l;
    unsigned int odo_min_r, odo_max_r, odo_low_r, odo_high_r;
    unsigned int count_l, count_r, count_soll_l, count_soll_r;
    unsigned int speed_l, speed_r, speed_soll_l, speed_soll_r;
    
    int MotorRampe(unsigned char sp_l, unsigned char sp_r, unsigned int r) {
    
        if (loop_count > rampe_delay) {
            if (sp_l != speed_l) {                                         
                if (sp_l > speed_l) speed_l ++;
                if (sp_l < speed_l) speed_l --;
                rampe_delay=loop_count+r*10;
            }
            if (sp_r != speed_r) {
                if (sp_r > speed_r) speed_r ++;
                if (sp_r < speed_r) speed_r --;
                rampe_delay=loop_count+r*10;
            }
        MotorSpeed(speed_l,speed_r);
        }
        return ((sp_l == speed_l) && (sp_r == speed_r));
    }
    
    int main(void) {
    Init();
    SerWrite("\nHallo\nBatterie: ",17);
    PrintInt(Batterie());
    
    step=loop_count=rampe_delay=speed_l=speed_r=0;
    speed_min=0; speed_max=250; rampe_v=30; rampe_r=50;
    
    do {
        loop_count ++;
        switch (step) {
            case (0): MotorDir(FWD,FWD); FrontLED(ON); BackLED(OFF,OFF); step++; break;
            case (1): if (MotorRampe(speed_max,speed_max,rampe_v)) step++; break;
            case (2): if (MotorRampe(speed_min,speed_min,rampe_r)) step++; break;
            case (3): MotorDir(RWD,RWD); FrontLED(OFF); BackLED(ON,ON); step++; break;
            case (4): if (MotorRampe(speed_max,speed_max,rampe_v)) step++; break;
            case (5): if (MotorRampe(speed_min,speed_min,rampe_r)) step=0; break;
            case (98): MotorDir(BREAK,BREAK); step++; break;
            case (99): FrontLED(OFF); BackLED(OFF,OFF); step=99; break;
        }
    } while (1);
    return 0;
    }
    Viel Spaß damit, es ist aber eigentlich nur eine Vorstufe zu meinen Odometrie-Versuchen die mit den gewöhnlichen MotorDir- und MotorSpeed-Funktionen nicht recht klappen.

    Gruß

    mic
    Angehängte Dateien Angehängte Dateien
    Bild  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Berechtigungen

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

    Werbung      Labornetzteil AliExpress