- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 43

Thema: strukturen, ein- und ausstieg

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    wenn schon mal einer schreibt "mach mal einfach" sträuben sich bei mir schon die nackenhaare. ich will aber keinen streit, also;

    in "standarad.c" und "standard.h" geändert von: uint8_t in: char.


    in der "RP6Control_I2CMasterLib.h" wird die zeile

    void BATTERY_setLowVoltageHandler(void (*lowVoltageHandler)(uint8_t));
    mit folgender fehlermeldung angemotzt:

    ../../RP6Lib/RP6control/RP6Control_I2CMasterLib.h|218|note: expected ‘void (*)(uint8_t)’ but argument is of type ‘void (*)(char)’|
    hast du noch ein paar ideen? Ich würde auch einen anderen ton sehr begrüßen...
    gruß inka

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    hast du noch ein paar ideen? Ich würde auch einen anderen ton sehr begrüßen...
    Sorry, aber als langer supporter in vielen Foren macht es mich einfach wütend, wenn Leute nach Hilfe fragen und sie dann aber nicht ausprobieren sondern mit irgendeiner Ausrede daherkommen. Noch schlimmer wirds dann, wenn die Lösung auf der 1 Seite steht, aber nach 5 Seiten der TE es das erste mal probiert und feststellt dass es doch funktioniert.

    in der "RP6Control_I2CMasterLib.h" wird die zeile


    void BATTERY_setLowVoltageHandler(void (*lowVoltageHandler)(uint8_t));


    mit folgender fehlermeldung angemotzt:


    ../../RP6Lib/RP6control/RP6Control_I2CMasterLib.h|218|note: expected ‘void (*)(uint8_t)’ but argument is of type ‘void (*)(char)’|


    hast du noch ein paar ideen? Ich würde auch einen anderen ton sehr begrüßen...
    Habe natürlich nicht gewusst, dass es hier noch abhängig ist. Hier bitte auch in "char" ändern. In der .c vermutlich auch.

    mfg

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Wsk8 Beitrag anzeigen
    Sorry, aber als langer supporter in vielen Foren macht es mich einfach wütend, wenn Leute nach Hilfe fragen und sie dann aber nicht ausprobieren sondern mit irgendeiner Ausrede daherkommen. Noch schlimmer wirds dann, wenn die Lösung auf der 1 Seite steht, aber nach 5 Seiten der TE es das erste mal probiert und feststellt dass es doch funktioniert.


    Habe natürlich nicht gewusst, dass es hier noch abhängig ist. Hier bitte auch in "char" ändern. In der .c vermutlich auch.

    mfg
    Ausrede! "natürlich nicht gewusst"!!

    und an wievielen stellen soll ich sonst noch ändern? Ich werde jetzt keinen uint8_t in einen char ändern. bevor man wütend wird sollte man sich informieren. Und man sollte dort supporten, wo man sich auskennt, hier im RP6 bereich habe ich auf jeden fall noch nicht so viel von dir gehört.

    Und jetzt werde ich wütend: geh aus der leitung!
    gruß inka

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Ok, einmal versuch ichs noch. Änder wieder alles in uint8_t.

    In der standard.h nach den ersten 2 zeilen:
    Code:
    #ifndef STANDARD_H_
    #define STANDARD_H_
    
    
    #include <stdint.h>
    mfg

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    ich habe es schon geschrieben - ich will keinen streit.

    Dieser vorschlag passt. Steht aber nicht auf der ersten seite (um deine worte mal zu nutzen), sondern war erst der dritte schuss. Trotzdem danke....

    Evtl. in zukunft weniger aus der hüfte schiessen, mehr zuhören und in ruhe lesen was die anderen schreiben. Und nicht vergessen, es gibt viele anfänger hier, für die ist nix "einfach"....
    gruß inka

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523

    Böse

    Ausrede! "natürlich nicht gewusst"!!
    Ich kenne weder die RP6 lib noch bin ich Gott. Ja, ich habe es nicht gewusst!

    Und man sollte dort supporten, wo man sich auskennt, hier im RP6 bereich habe ich auf jeden fall noch nicht so viel von dir gehört.
    Hier gehts um C. Ich kenne mich mit C aus, deshalb wüsste ich nicht warum ich mich nicht einmischen sollte.

    Dieser vorschlag passt. Steht aber nicht auf der ersten seite (um deine worte mal zu nutzen), sondern war erst der dritte schuss. Trotzdem danke....
    Nein, aber Peter hat zumindest schon auf der 2 Seite den Hinweis dazu gegeben, denn aber jeder ignoriert hat weil es ja ein sogenannter "RP6-Experte" aus dem RP6-Forum besser wusste.

    Evtl. in zukunft weniger aus der hüfte schiessen, mehr zuhören und in ruhe lesen was die anderen schreiben. Und nicht vergessen, es gibt viele anfänger hier, für die ist nix "einfach"....
    Tut mir Leid dass ich nicht Gott bin und alles beim ersten mal weiß. Ich muss auch alle möglichen Lösungen erst durchprobieren. Ein Schütze muss auch erst viele Schüsse abgeben, bevor er perfekt trifft.


    UND ICH WAR HIER DER LETZTE, DER STREIT GESUCHT HAT. DAS WARST NUR DU! ICH HABE NUR VERSUCHT DIR ZU HELFEN!
    ICH WAR AUCH NICHT IMMER PERFEKT, ABER ICH HABE DEN LEUTEN NICHT GESAGT, DASS SIE SICH HIER SOWIESO NICHT AUSKENNEN UND VERSCHWINDEN SOLLEN.
    SOWAS IST EINFACH NUR EINE FRECHHEIT DEINERSEITS!!!!
    DU BIST HIER EINFACH WIE EIN INKOMPETENTER B*ASTARD AUFGETRETEN UND GENAU DAS IST AB JETZT AUCH MEINE MEINUNG VON DIR. EINFACH UNGLAUBLICH SOWAS

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @ Peter(TOO):

    Zitat von Dirk: "uint8_t kennt der Compiler in diesem Fall."

    Woher ?

    ... aus der stdint.h, die bei den RP6 Libs immer mit eingebunden wird (in diesem Fall in der RP6Control.h).
    Gruß
    Dirk

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    hallo,

    eine lösung für den rücksprung aus dem jeweiligen zweig der programmstruktur - was ja der ursprung des threads war - habe ich nun für mich gefunden:

    Code:
    #include "RP6ControlLib.h"
    #include "RP6I2CmasterTWI.h"
    #include "RP6Control_MultiIOLib.h"
    #include "RP6Control_I2CMasterLib.h"
    
    #include "RP6ControlServoLib.h"
    #include "RP6Control_OrientationLib.h"
    #define I2C_RP6_BASE_ADR 10
    
    
    
    /*****************************************************************************/
    // Variables:
    
    uint8_t ch;
    char item[12];
    char dir[3];
    
    /*****************************************************************************/
    /**
     * Returns a 2 character string for the eighth
     * parts of the direction calculated from the
     * heading value.
     *
     * Input: heading -> Heading value [0..359]
     *
     */
    void calculateDir(char *dir, uint16_t heading)
    {
        dir[1] = ' ';
        dir[2] = '\0';
        if ((heading <= 22) || (heading >=338)) dir[0] = 'N';
        if ((heading >= 23) && (heading <= 67)) {dir[0] = 'N'; dir[1] = 'E';}
        if ((heading >= 68) && (heading <= 112)) dir[0] = 'E';
        if ((heading >= 113) && (heading <= 157)) {dir[0] = 'S'; dir[1] = 'E';}
        if ((heading >= 158) && (heading <= 202)) dir[0] = 'S';
        if ((heading >= 203) && (heading <= 247)) {dir[0] = 'S'; dir[1] = 'W';}
        if ((heading >= 248) && (heading <= 292)) dir[0] = 'W';
        if ((heading >= 293) && (heading <= 337)) {dir[0] = 'N'; dir[1] = 'W';}
    }
    
    /******************Write a floating point number to the LCD and terminal***********************/
    
    /**
     *
     *
     * Example:
     *
     *            // Write a floating point number to the LCD (no exponent):
     *            writeDoubleLCD(1234567.890, 11, 3);
     *
     * The value of prec (precision) defines the number of decimal places.
     * For 32 bit floating point variables (float, double ...) 6 is
     * the max. value for prec (7 relevant digits).
     * The value of width defines the overall number of characters in the
     * floating point number including the decimal point. The number of
     * pre-decimal positions is: (width - prec - 1).
     */
    void writeDoubleLCD(double number, uint8_t width, uint8_t prec)
    {char buffer[width + 1];
        dtostrf(number, width, prec, &buffer[0]);
        writeStringLCD(&buffer[0]);
    }
    
    void writeDouble(double number, uint8_t width, uint8_t prec)
    {char buffer[width + 1];
        dtostrf(number, width, prec, &buffer[0]);
        writeString(&buffer[0]);
    }
    
    
    
    /*********************I2C-fehlermeldungen******************/
    
    void I2C_transmissionError(uint8_t errorState) //gibt I2C fehlermeldungen über LCD aus
    {
        clearLCD();
        writeStringLCD_P("I2C ERROR -->");
        setCursorPosLCD(1, 0);        // line 2
        writeStringLCD_P("TWI STATE: 0x");
        writeIntegerLCD(errorState, HEX);
    }
    
    
    /*****************gyroscope***************/
    void gyroscope(void) //  L3GD20 gyroscope
    
        {
        mSleep(1000);
        task_I2CTWI();
        readL3GD20();                        // Get sensor values
    //    normalizeL3GD20();
        task_I2CTWI();
        clearLCD();
        setCursorPosLCD(0, 0);        // line 1
        writeStringLCD_P("X");
        writeIntegerLCD(x_axisg, DEC);
        setCursorPosLCD(0, 6);        // line 1 pos 6
        writeStringLCD_P("Y");
        writeIntegerLCD(y_axisg, DEC);
        setCursorPosLCD(0, 12);        // line1 pos 12
        writeStringLCD_P("Z");
        writeIntegerLCD(z_axisg, DEC);
    
    //    setCursorPosLCD(1, 0);        // line 2
    //    writeStringLCD_P("X");
        writeString_P("x: ");
        writeDouble(xg, 1, 1);
        writeString_P("\n");
    /*    setCursorPosLCD(1, 6);        // line 2 pos 6
        writeStringLCD_P("Y");
        writeIntegerLCD(yg, DEC);
        setCursorPosLCD(1, 12);        // line 2 pos 12
        writeStringLCD_P("Z");
        writeIntegerLCD(zg, DEC);*/
    
    /*********/
    /*        setServoPower(1);
            initSERVO(SERVO1);
            setServo(1, SERVO1_LT);
            mSleep(50);
            setServo(1, SERVO1_RT);
            mSleep(100);
            setServoPower(0);
            task_SERVO();
    
    */
    /*********/
    
    #ifdef GET_TEMP
        temperatureg = calcTempL3GD20(temperatureg) + 5;
        temperatureg += OFFSET_TEMP;
        setCursorPosLCD(1, 8);        // line 2 pos 9
        writeStringLCD_P("T");
        writeIntegerLCD(temperatureg, DEC);
        writeStringLCD_P("    ");
    #endif
        mSleep(2000);//3 sec
        clearLCD();
        task_I2CTWI();
        }
    
    /************accelerometer****************/
       void accelerometer(void) //  LSM303DLHC accelerometer
        {
        mSleep(1000);
        task_I2CTWI();
        readLSM303DLHC_A();                    // Get sensor values
    //    normalizeLSM303DLHC_A();
        task_I2CTWI();
        setCursorPosLCD(0, 0);        // line 1
        writeStringLCD_P("X");
        writeIntegerLCD(x_axisa, DEC);
        writeStringLCD_P("   ");
        setCursorPosLCD(0, 5);        // line 1 pos 6
        writeStringLCD_P("Y");
        writeIntegerLCD(y_axisa, DEC);
        writeStringLCD_P("   ");
        setCursorPosLCD(0, 10);        // line 1 pos 11
        writeStringLCD_P("Z");
        writeIntegerLCD(z_axisa, DEC);
        writeStringLCD_P("    ");
    //    normalizeLSM303DLHC_A();            // Normalize data
        positionLSM303DLHC_A();                // Calculate position
        setCursorPosLCD(1, 0);        // line 2
        writeStringLCD_P("P");
        writeDoubleLCD(pitch, 6, 1);
        writeStringLCD_P(" ");
        setCursorPosLCD(1, 8);        // line 2 pos 9
        writeStringLCD_P("R");
        writeDoubleLCD(roll, 6, 1);
        writeStringLCD_P(" ");
        mSleep(2000);
        clearLCD();
        task_I2CTWI();
        }
    
    /*****************magnetometer************/
    void magnetometer(void) //  LSM303DLHC magnetometer
        {
        mSleep(1000);
        task_I2CTWI();
        readLSM303DLHC_M();                    // Get sensor values
    //    normalizeLSM303DLHC_M();
        task_I2CTWI();
        setCursorPosLCD(0, 0);        // line 1
        writeStringLCD_P("X");
        writeIntegerLCD(x_axism, DEC);
        writeStringLCD_P("   ");
        setCursorPosLCD(0, 5);        // line 1 pos 6
        writeStringLCD_P("Y");
        writeIntegerLCD(y_axism, DEC);
        writeStringLCD_P("   ");
        setCursorPosLCD(0, 10);        // line 1 pos 11
    #ifndef GET_TEMP_M
        writeStringLCD_P(" Z");
        writeIntegerLCD(z_axism, DEC);
        writeStringLCD_P("    ");
    #else
        temperature_imu = (double) temperaturem / 8.0 + OFFSET_TEMP_M;
        writeStringLCD_P("T");
        writeDoubleLCD(temperature_imu, 5, 1);
    #endif
    
    //    normalizeLSM303DLHC_M();            // Normalize data
        headingm = headingLSM303DLHC_M();    // Calculate heading
        calculateDir(dir, headingm);
        setCursorPosLCD(1, 0);        // line 2
        writeStringLCD_P("H");
        writeIntegerLengthLCD(headingm, DEC, 3);
        writeStringLCD_P(" ");
        writeStringLCD(dir);
        headingtc = headingLSM303DLHC_TC();    // Calculate TILT COMPENSATED
        calculateDir(dir, headingtc);        // heading
        writeStringLCD_P(" C");
        writeIntegerLengthLCD(headingtc, DEC, 3);
        writeStringLCD_P(" ");
        writeStringLCD(dir);
        writeStringLCD_P(" ");
        mSleep(1000);
    //    clearLCD();
        task_I2CTWI();
        }
    
    
    /*************** hauptprogramm ***********/
    
    int main(void)
    {
    
    
    initRP6Control();
    multiio_init();
    initLCD();
    //orientation_init();
    
    
    setLEDs(0b1111);
    mSleep(500);
    setLEDs(0b0000);
    
    I2CTWI_initMaster(100);
    I2CTWI_setTransmissionErrorHandler(I2C_transmissionError); //aktiviert I2C fehlermeldungen
    
    showScreenLCD(" RP6Control M32", " calibrate_imu");
    mSleep(2500);
    clearLCD();
    
    orientation_init();
    
    while(true)
    {
    
    /*****************anzeige gedrückter buttons****************/
        clearLCD();
        pressedMultiIOButtonNumber = getMultiIOPressedButtonNumber();
        setCursorPosLCD(0, 0);
        writeStringLCD("Button: ");
        writeIntegerLCD(pressedMultiIOButtonNumber, DEC);
        mSleep(500);
    
        uint8_t key = getMultiIOPressedButtonNumber();
    
    
    /********************funktion der buttons*********************/
        if(key)
        {
        switch(key)
        {
        case 1://
        setLEDs(0b0001);
    
        while(true)
        {
        setLEDs(0b0001);
        gyroscope();
        mSleep(500);
        clearLCD();
    
        /**************************/
        uint8_t key_1 = getMultiIOPressedButtonNumber();
        key_1 = getMultiIOPressedButtonNumber();
        if(key_1 != 0)
        {
        break;
        }
        /**************************/
        }
    
        break;
    
        case 2://
        setLEDs(0b0010);
    
        while(true)
        {
        setLEDs(0b0010);
        accelerometer();
        mSleep(500);
        clearLCD();
    
        /**************************/
        uint8_t key_1 = getMultiIOPressedButtonNumber();
        key_1 = getMultiIOPressedButtonNumber();
        if(key_1 != 0)
        {
        break;
        }
        /**************************/
        }
    
        break;
    
        case 3://
        setLEDs(0b0100);
    
        while(true)
        {
        magnetometer();
        mSleep(50);
        clearLCD();
    
        /**************************/
        uint8_t key_1 = getMultiIOPressedButtonNumber();
        key_1 = getMultiIOPressedButtonNumber();
        if(key_1 != 0)
        {
        break;
        }
        /**************************/
        }
    
        break;
    
        case 4://
        setLEDs(0b1000);
    
        while(true)
        {
        setLEDs(0b1000);
        gyroscope();
        mSleep(50);
        clearLCD();
        accelerometer();
        mSleep(50);
        clearLCD();
        magnetometer();
        mSleep(50);
        clearLCD();
    
        /**************************/
        uint8_t key_1 = getMultiIOPressedButtonNumber();
        key_1 = getMultiIOPressedButtonNumber();
        if(key_1 != 0)
        {
        break;
        }
        /**************************/
        }
    
        break;
    
        }
        }
    
    
    }
    
    
        return 0;
    }
    damit kann ich jetzt z.b. den 3D-gyro (und seine einzelnen komponenten) testen und werte überprüfen ohne unnütz warten zu müssen bis nun die erwünschte einzelfunktion wiederkommt...

    nochmals dank an alle die mir hierbei geholfen haben...
    gruß inka

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 23.03.2012, 22:36
  2. Probleme feine Strukturen zu drucken für Platine
    Von Hellmut im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 12
    Letzter Beitrag: 20.12.2010, 13:35
  3. Antworten: 11
    Letzter Beitrag: 07.09.2008, 16:56
  4. Probleme bei Strukturen (Projekt Funkuhr)
    Von Wasserkäfer im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 19.07.2008, 15:10
  5. Ein Quarz für ein ATMEGA8 und ein ATMEGA16
    Von boeseTURBO-CT im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 14.06.2004, 16:07

Berechtigungen

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

Labornetzteil AliExpress