- fchao-Sinus-Wechselrichter AliExpress         
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
    61
    Beiträge
    5.799
    Blog-Einträge
    8

    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 hier  
    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
  •  

Labornetzteil AliExpress