Frage um weitere Servo einbindung

Hallo
ich(Anfänger :grinning:) habe folgendes Problem, und zwar möchte ich gerne einen 2 Servo in den Code einfügen damit er das gleiche tut wie der andere jetzt weiß ich nicht wie ich den eibinden soll bez. wie schreibe ich den in den Code hinhein.
Danke!!!!

[code]
#include <Wire.h>
#include <I2Cdev.h>
#include <MPU6050.h>
#include<Servo.h>

MPU6050 ivme_sensor;
int16_t ax,ay,az;
int16_t gx,gy,gz;
Servo motor1;

void setup()
{
motor1.attach(3);
Wire.begin();
Serial.begin(9600);
Serial.println("I2C cihazlar baslatiliyor...");
ivme_sensor.initialize();
Serial.println("Test cihazi baglantilari...");
Serial.println(ivme_sensor.testConnection()?
"MPU6050 baglanti basarili":
"MPU6050 baglanti basarisiz");
}

void loop()
{
ivme_sensor.getMotion6(&ax,&ay,&az,&gx,&gy,&gz);
ay=map(ay,-17000,17000,0,180);
Serial.print(ay);
Serial.println("\t");
motor1.write(ay);
delay(10);
}

Das definiert eine Variable vom Typ Servo mit dem Namen motor1.
Wie definiert man eine weitere Variable vom gleichen Typ? (Sie braucht einen eigenen Namen)

Dann solltest du raten, was die anderen Zeilen, in denen motor1 vorkommt, machen.

Was die anderen Zeilen machen, wäre generell auch gut zu wissen.

habs jetzt so gemacht es läuft auch aber der 2 macht jetzt das gegenteil ?
#include <Wire.h>
#include <I2Cdev.h>
#include <MPU6050.h>
#include<Servo.h>

MPU6050 ivme_sensor;
int16_t ax,ay,az;
int16_t gx,gy,gz;
Servo motor1;
Servo motor2;

void setup()
{
motor1.attach(3);
motor2.attach(4);
Wire.begin();
Serial.begin(9600);
Serial.println("I2C cihazlar baslatiliyor...");
ivme_sensor.initialize();
Serial.println("Test cihazi baglantilari...");
Serial.println(ivme_sensor.testConnection()?
"MPU6050 baglanti basarili":
"MPU6050 baglanti basarisiz");
}

void loop()
{
ivme_sensor.getMotion6(&ax,&ay,&az,&gx,&gy,&gz);
ay=map(ay,-17000,17000,0,180);
Serial.print(ay);
Serial.println("\t");
motor1.write(ay);
motor2.write(ay);
delay(10);
}

Laut Software macht motor2 genau dasselbe. Hast also den 2. Servo anders angeschlossen. Was passiert, wenn du die Anschlüsse an Pin 3 und 4 vertauschst?

passiert das gleich, wenn der eine arm rauf geht dann geht der andere runter :slightly_smiling_face:

Achtung 2 Servo können die USB Schnittstelle (Spannungsversorgung) überlasten.
Grüße Uwe

habe die servos an extern power hängen :+1:

nicht vielleicht genau andersrum: der eine runter und der andere rauf ?

Ich hoffe du merkst, warum man dir nicht wirklich helfen kann?

Nachtrag:
Außerdem willst du ja langfristig den einen Servo an die y-Achse, den andern an die x-Achse hängen, richtig? Wie wär's, wenn du dich damit beschäftigst?

warum man mir nicht wirklich helfen kann keine ahnung, ich werde schon drauf kommen irgendwie
Danke trotzdem.

Sehe ich genauso.

@chris007aut : Um rauszufinden, was da schiefläuft kannst Du gerne "kreativ" rumprobieren und die Ergebnisse mitteilen.
Zum Beispiel:

  • Beim Pin-Tausch, den Du schon ausprobiert hast: Wandert da die Bewegungsrichtung rauf/runter mit?
  • Fährt Motor2 genauso "falsch", wenn Motor1 abgeklemmt (auskommentiert) ist?
  • Wie fährt Motor2 alleine am Pin 3?
  • Wie fahren sie, wenn Du Pins 5 und 6 verwendest?

Habe ich überlesen, was für Servos Du da in Betrieb hast? Es gibt (Digital-)Servos wo man die Drehrichtung programmieren kann.

Weil es vielleicht an Informationen fehlt?

Mach den hier:

#include<Servo.h>

Servo motor1;
Servo motor2;

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  motor1.attach(3);
  motor2.attach(4);
  for (byte b = 0; b < 90; b++)
  {
    motor1.write(b);
    motor2.write(b);
    delay(20);
  }
}

void loop()
{
}

Was passiert?
So und dann komm endlich mit Infos rum, was Du für Servos verwendest!

Entlich durch suchen habe ich den Code gefunden

beid auf Pitch gestellt und macht genau das was ich will und Experementier noch herum damit um es auch zu verstehen genial.
Danke nochmal.

(ServoX.write(ServoPitch):wink:
(ServoY.write(ServoPitch):wink:

// MPU6050 & Servo
// https://www.giuseppecaccavale.it/
// Giuseppe Caccavale

#include <SPI.h>
#include <Wire.h>
#include <Servo.h>
#define MPU 0x68 // I2C address of the MPU-6050

Servo ServoX, ServoY;
double AcX, AcY, AcZ;
int Pitch, Roll;

void setup() {
Serial.begin(9600);
ServoX.attach(8);
ServoY.attach(9);
init_MPU(); // Inizializzazione MPU6050
}

void loop()
{
FunctionsMPU(); // Acquisisco assi AcX, AcY, AcZ.

Roll = FunctionsPitchRoll(AcX, AcY, AcZ); //Calcolo angolo Roll
Pitch = FunctionsPitchRoll(AcY, AcX, AcZ); //Calcolo angolo Pitch

int ServoRoll = map(Roll, -90, 90, 0, 179);
int ServoPitch = map(Pitch, -90, 90, 179, 0);

ServoX.write(ServoPitch);
ServoY.write(ServoPitch);

Serial.print("Pitch: "); Serial.print(Pitch);
Serial.print("\t");
Serial.print("Roll: "); Serial.print(Roll);
Serial.print("\n");

}

void init_MPU() {
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
delay(1000);
}

//Funzione per il calcolo degli angoli Pitch e Roll
double FunctionsPitchRoll(double A, double B, double C) {
double DatoA, DatoB, Value;
DatoA = A;
DatoB = (B * B) + (C * C);
DatoB = sqrt(DatoB);

Value = atan2(DatoA, DatoB);
Value = Value * 180 / 3.14;

return (int)Value;
}

//Funzione per l'acquisizione degli assi X,Y,Z del MPU6050
void FunctionsMPU() {
Wire.beginTransmission(MPU);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU, 6, 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(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
}

Sehr schön, Glückwunsch!

Warum die Funktion FunctionsPitchRoll ein auf int getrimmtes double zurückliefert, habe ich allerdings nicht verstanden. Auch sind einige Kommentare falsch, falls du beim Verstehen Probleme hast.