Sensor-Werte im Arduino due berechnen und per I2C übertragen

hello everyone
I have a Projekt and am new in Arduino World
i have for this projekt
1- Arduino Due
2- sensor mpu6050
3- BLCD -Motoren

i alread read the sensor value accel x y z and gro(angle) x y z , and then i want to compute the value in arduino due as PID then the result send to the Microcontroller form the BLCD- MOtoren throught the I2C. I2C is the only way to communicate with the microcontronter to the motoren

my Proplem is, i dont know how to compute the value and how i do the timer and interrupt on arduino due . -confuse:
and i dont now how to send compute the PWM-signal on it

please help me

#include <Wire.h>
#include "MPU6050.h"
#include <I2Cdev.h>

//byte error;
#define address  0x68
# define motor_left 0x47
# define motor_right 0x48

int nDevices =0; 
int16_t AcX, AcY, AcZ;    //Accelometer
int16_t GyX, GyY, GyZ;    //Gyroscope
  /*-------------------------------------------------------------------------
                   Setup-Schleife* 
   --------------------------------------------------------------------------*/
void setup()
  {
    Wire.begin();
    Serial.begin(115200);
}
void loop()
  {
   read_Sensor();
   Sensor_initialize();
   pid_calc();
          }

/---------------------------------------------------------------------------
Sensor-initialize
-------------------------------------------------------------------------
/

/*---------------------------------------------------------------------------
                            Sensor-initialize
   -------------------------------------------------------------------------*/
 void Sensor_initialize()
   {
    Wire.beginTransmission(address);       //  Sensor wird gestartet
    Wire.write(0x6B);                      // PWR_MGMT_1 register wird zurückgesetzt
    Wire.write(0x40);                      // indem ein 0x40 geschrieben wird 
    Wire.write(0);                         // SETZ NULL für Sleepmodus ein 
    Wire.endTransmission(true);            //  Ende des Übertragung          
    }

/-------------------------------------------------------------------------------------
read-Sensor
-------------------------------------------------------------------------------------
/

void read_Sensor(){
       Wire.beginTransmission(address);
       Wire.write(0x3B);                         // starting with register 0x3B (ACCEL_YOUT_H)
       Wire.endTransmission(false);
       Wire.requestFrom(address,14,true);       // request a total of 14 registers
   
     AcX=Wire.read()<<8|Wire.read();             // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) 
     AcY=Wire.read()<<8|Wire.read();             // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
     AcZ=Wire.read()<<8|Wire.read();             // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
     //Tmp=Wire.read()<<8|Wire.read();          // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
     GyX=Wire.read()<<8|Wire.read();            // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
     GyY=Wire.read()<<8|Wire.read();            // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
     GyZ=Wire.read()<<8|Wire.read();             // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
     
      Serial.print("AcX = "); Serial.print(AcX);
      Serial.print(" | AcY = "); Serial.print(AcY);
      Serial.print(" | AcZ = "); Serial.print(AcZ);
    //Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53); // Berechnung der Tempertaur in Degrees C 
     Serial.print(" | GyX = "); Serial.print(GyX);
     Serial.print(" | GyY = "); Serial.print(GyY);
     Serial.print(" | GyZ = "); Serial.println(GyZ);
     delay(5000);                                                 // Jede 5ms wird abgelesen
      }
/*------------------------------------------------------------------------------------
                                      PID-Regler 
 -------------------------------------------------------------------------------------*/
  float Setpoint=0;
  float delta_t=0;
  float error;
  float error_alt=0;
  float t_alt=0;
  float diff_term= 0;
  float  int_term;
  float  positions;
  float agressive;
  float guard;
 // int error_value;
  int16_t Sensor_read=0;
  float Kp=200;
  float Ki=100;
  float Kd=50;

 void pid_calc(){
   delta_t = micros() - t_alt;   
   Wire.beginTransmission(address);
  // Sensor_read = digtalread(GyY);
   error = Setpoint - Sensor_read ;
   float esum = esum + (error * delta_t);                   //berechnt error integration
   float e_dif = error - error_alt;                     //berechnt error diffrentiation
   esum=0;
   int_term = esum ;                                       //berechnt itegrator term
 //--------------------------------------------------------------------
  if (delta_t != 0){                                             
       diff_term = e_dif / delta_t ;                                        //(winkel)berechnt ableitung term
        }
     else { diff_term = 0;}                                                 //winkel wird hier abglesen von sensor
  if (e_dif < agressive){
    guard = 1;
  } else { guard = 0 ;} 
  
 float y = (Kp* error/2) + (guard * Ki * int_term/256) + (Kd * diff_term) ;

 if ( y < 0 ){  //reverse
            y=0;
             }                         //Begrenzung Stellgröße
 if (y > 255) {y = 255;}                  
  float time_alt = delta_t;                                                    //save old timer value
  error_alt = error;
Wire.beginTransmission(motor_right);                //motor_right the pin which the right motor is connected
 Wire.write(abs(y));          //write PID to the pin
}

Hi,

vielleicht fragst du das mal in etwas klarerem Deutsch im deutschen Forum-Bereich. Hier im englischsprachigen Teilwird dich kaum jemand mit deinem Englisch verstehen; jedenfalls konnte ich deinem Textinhalt nicht folgen.

Hi,

sorry, aber dein Englisch ist nicht gerade verständlich. Vielleicht fragst du das mal in etwas klarerem Deutsch im deutschen Forum-Bereich.

Hier im englischsprachigen Teil wird dich kaum jemand mit deinem Englisch verstehen; jedenfalls konnte ich deinem Textinhalt nicht folgen.

rpt007: Hi,

vielleicht fragst du das mal in etwas klarerem Deutsch im deutschen Forum-Bereich. Hier im englischsprachigen Teilwird dich kaum jemand mit deinem Englisch verstehen; jedenfalls konnte ich deinem Textinhalt nicht folgen.

zum erstem mal weiß ich das hier zwei Bereiche gäbe englisch und deutsch aber gut zu wissen.

Das Problem ist die abgelesenen Werte von dem mpu6050-Sensor in arduino due zu rechnen und an die Microkontroller per I2C zu übermitteln

rpt007: Hi,

sorry, aber dein Englisch ist nicht gerade verständlich. Vielleicht fragst du das mal in etwas klarerem Deutsch im deutschen Forum-Bereich.

Hier im englischsprachigen Teil wird dich kaum jemand mit deinem Englisch verstehen; jedenfalls konnte ich deinem Textinhalt nicht folgen.

Das Problem ist die abgelesenen Werte von dem mpu6050-Sensor in arduino due zu rechnen und an die Microkontroller per I2C zu übermitteln

zum erstem mal weiß ich das hier zwei Bereiche gäbe englisch und deutsch aber gut zu wissen.

Einfach in der Foren-Übersicht weiter nach unten scrollen; da kommen noch viele Kategorien und dann der internationale Teil mit dem deutschsprachigen Forum.

ich habe veranlasst, dass dieser Thread ins deutsche Forum verschoben wird. Bitte ändere die Überschrift ab, so dass man dann auch direkt weiß, um was es sich handelt. Dass jemand, der hier postet, Hilfe braucht, ist selbstredend.

Deine Überschrift könnte lauten: "Sensor-Werte im Arduino berechnen und per I2C übertragen"

rpt007: Einfach in der Foren-Übersicht weiter nach unten scrollen; da kommen noch viele Kategorien und dann der internationale Teil mit dem deutschsprachigen Forum.

ich habe veranlasst, dass dieser Thread ins deutsche Forum verschoben wird. Bitte ändere die Überschrift ab, so dass man dann auch direkt weiß, um was es sich handelt. Dass jemand, der hier postet, Hilfe braucht, ist selbstredend.

Deine Überschrift könnte lauten: "Sensor-Werte im Arduino berechnen und per I2C übertragen"

Ich habe es in deutschen Forum schon erläutert aber ich ändere die Überschrift gleich. danke für dein Tipps