- Akku Tests und Balkonkraftwerk Speicher    Werbung      
Ergebnis 1 bis 10 von 255

Thema: IR-bake

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
    78
    Beiträge
    2.180
    Hi Dirk,
    Zitat Zitat von Dirk Beitrag anzeigen
    Die Feldvariable, die als uint8_t ir_value[1] deklariert ist, enthält letztlich nur EINE Variable, die heißt ir_value[0].
    So muss man sie auch ansprechen.
    Die beiden Variablen ir_value und ir_value[0] sind nicht identisch.
    das muss ich erstmal verarbeiten (und verstehen)...

    in meinem programm (die basis war das "Example_06_I2CMaster") ist z.b:
    Code:
    // Read all registers function 
     
    uint8_t RP6data[32]; // This array will contain all register values of RP6  
                         // after you called readAllRegisters() 
                          
                         // It is better to keep such big arrays GLOBAL as  
                         // they otherwise fill up the stack in memory... 
     
    /** 
     * This function reads ALL registers available in the standard I2C Bus Slave 
     * Example program for the Robot Base and outputs their values on the serial interface.  
     * You will see a lot of zeros when the Motors are not running. The main values that are not 
     * zero are the two Light Sensors and the two free ADC Channels. 
     */ 
    void readAllRegisters(void) 
    { 
        I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 0); // Start with register 0... 
        I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 30); // and read all 30 registers up to 
                                                        // register Number 29 ! 
     
        // Now we output the Data we have just read on the serial interface: 
        writeString_P("\nREADING ALL RP6 REGISTERS:"); 
        uint8_t i = 0; 
        for(i = 0; i < 30; i++) 
        { 
            if(i % 8 == 0)           // add some newline chars otherwise everything  
                writeChar('\n');  // is printed on ONE single line... 
            else 
                writeString_P(" | "); 
            writeChar('#'); 
            writeIntegerLength(i,DEC,2); 
            writeChar(':'); 
            writeIntegerLength(RP6data[i],DEC,3); 
        } 
        writeChar('\n'); 
    }
    die variable (array) "uint8_t RP6data[32]", die auch so definiert wird und dann in der zeile:

    I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 30);

    auch als RP6data beschrieben/gefüllt wird...

    aber wie gesagt, das muss ich erstmal verstanden haben...

    ein kleiner erfolg auf dem weg zu einer funktionierenden bake:

    es ist mir gelungen mit der einstellung an den beiden potis des blinkers und an der mSleep-verzögerung im programm das so einzustellen, dass über einen längeren zeitraum einmal pro sekunde das IRsignal gesendet UND auch vom RP6 empfangen wird. Ohne aussetzer, das war bisher nicht der fall, war mehr oder weniger zufällig, wenns mal geklapt hat, zumindest nicht so regelmäßig..
    gruß inka

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,

    die variable (array) "uint8_t RP6data[32]", die auch so definiert wird und dann in der zeile:
    I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 30);
    auch als RP6data beschrieben/gefüllt wird...
    aber wie gesagt, das muss ich erstmal verstanden haben...
    Das ist ja eine Funktion aus der RP6I2CmasterTWI-Library.
    Im Header der Lib ist die Funktion als Prototyp so deklariert:
    Code:
    void I2CTWI_readBytes(uint8_t targetAdr, uint8_t * messageBuffer, uint8_t numberOfBytes);
    Das heißt: Als 2. Parameter wird der messageBuffer als Adresse (im Speicher, also nicht als Wert) übergeben. In der Lib besteht der messageBuffer aus der Feldvariablen RP6data, so dass man die Funktion so aufrufen kann, wie du oben angeführt hast. Das geht so aber nur, wenn RP6data in der Parameterliste einer Funktion auftaucht.
    Grundsätzlich würde ich einer einzelnen Variablen nicht den Namen einer Feldvariable geben, dann bleibt's übersichtlich.

    Für dein Programm:
    Ich würde die read_IR_value() Funktion so ändern:
    Code:
    uint8_t read_IR_value(void)
    { uint8_t temp;
     I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); // Start with register 30
     I2CTWI_readBytes(I2C_RP6_BASE_ADR, temp, 1);
     return temp;
    }
    Die Funktion hat dadurch einen Byte-Rückgabewert und wird so aufgerufen: Wert = read_IR_value();
    Wenn du diese Werte dann in eine Feldvariable übernehmen willst:
    Code:
     i = 0;
    
     // Schleife:
     ir_value[i] = read_IR_value();
     i++;
    Wenn du diese zwei Zeilen mehrfach aufrufst (z.B. in einer Schleife), wird dein Wert (IR-Empfang ja oder nein) nacheinander in die Feldvariable ir_value gepackt.
    Du must natürlich dafür sorgen, das sie ausreichend dimensioniert ist und i also nicht zu hoch wird.


    ein kleiner erfolg auf dem weg zu einer funktionierenden bake
    Klingt gut! Bild  
    Gruß
    Dirk

Ähnliche Themen

  1. IR-Bake
    Von tornado im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 05.07.2007, 17:37
  2. IR-Bake
    Von Bernd-das-Brot im Forum Sensoren / Sensorik
    Antworten: 38
    Letzter Beitrag: 13.12.2005, 16:14
  3. ir-bake
    Von pebisoft im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 8
    Letzter Beitrag: 17.01.2005, 13:41
  4. ir-bake
    Von pebisoft im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 17.01.2005, 07:01
  5. Bake
    Von techboy im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 02.11.2004, 10:17

Berechtigungen

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

    Werbung      Labornetzteil AliExpress