Servo macht sich Eigenständig

Obwohl nirgends der Befehl dazu Steht fährt mein Arduino Uno Beim folgenden Sketch mit PWM Pin 3, 5, 6, 9, 10 eine Position an aber bei pin 11 nicht. Hier das Sketch:

#include <Servo.h>

Servo SM[6];
int SPin[6];
int Number;

boolean ToF[6]; // gibt an ob drehgeschwindigkeit oder zeitraum der drehung angegeben ist
int Unit[6];  // gibt einheit der zeit an sekunden minuten usw
int Period[6];  // gibt zeit an in der sich eine Bewegung vollziehen soll 
int MSpeed[6]; // gibt direkt geschwindigkeit einer Bewegung an
int PAlt[6]; // Gibt alte Position an 
int PNeu[6]; // Gibt geplante Position an 


void Allocation(int Number2, boolean a, int b, int c, int d, int e, int f)
{
  ToF[Number2] = a; 
  Unit[Number2] = b;
  Period[Number2] = c; 
  MSpeed[Number2] = d; 
  PAlt[Number2] = e; 
  PNeu[Number2] = f;
}

int MovingTime()
{
 int output;
 if(PNeu[Number] == PAlt[Number])
  {
  output = 0;
  }
 else
  {
   if (ToF[Number] == true)
     {
     output = MSpeed[Number]*Unit[Number];
      }
   if (ToF[Number] == false)
    {
     if (PAlt[Number] < PNeu[Number])
       {
       output = Period[Number]/(PNeu[Number]-PAlt[Number])*Unit[Number];
       }
     if (PAlt[Number] > PNeu[Number])
       {
       output = Period[Number]/(PAlt[Number]-PNeu[Number])*Unit[Number];
       }
     }
   }
   return output;
}


void setup() {

Serial.begin(9600);
Serial.println("Start");

SPin[1] = 3;
SPin[2] = 5;
SPin[3] = 6;
SPin[4] = 9;
SPin[5] = 10;
SPin[6] = 11;

Number = 1;
for(int i = 0; i < 6; i++){
SM[Number].attach(SPin[Number]);
Number++;}

Allocation(1, true, 1, 1000, 10, 0, 100);
Number = 1;
Serial.println(MovingTime());
}


void loop() {}

kann mir jemand helfen?

Ace_Dark:
kann mir jemand helfen?

Ich habe Deinen Sketch zumindest schon einmal mit Strg-T notbehandelt und in Code-Tags gefasst:

#include <Servo.h>


Servo SM[6];
int SPin[6];
int Number;

boolean ToF[6]; // gibt an ob drehgeschwindigkeit oder zeitraum der drehung angegeben ist
int Unit[6];  // gibt einheit der zeit an sekunden minuten usw
int Period[6];  // gibt zeit an in der sich eine Bewegung vollziehen soll
int MSpeed[6]; // gibt direkt geschwindigkeit einer Bewegung an
int PAlt[6]; // Gibt alte Position an
int PNeu[6]; // Gibt geplante Position an


void Allocation(int Number2, boolean a, int b, int c, int d, int e, int f) {
  ToF[Number2] = a; Unit[Number2] = b;
  Period[Number2] = c; MSpeed[Number2] = d; PAlt[Number2] = e; PNeu[Number2] = f;
}

int MovingTime() {
  int output;
  if (PNeu[Number] == PAlt[Number]) {
    output = 0;
  }
  else {
    if (ToF[Number] == true) {
      output = MSpeed[Number] * Unit[Number];
    }
    if (ToF[Number] == false) {
      if (PAlt[Number] < PNeu[Number]) {
        output = Period[Number] / (PNeu[Number] - PAlt[Number]) * Unit[Number];
      }
      if (PAlt[Number] > PNeu[Number]) {
        output = Period[Number] / (PAlt[Number] - PNeu[Number]) * Unit[Number];
      }
    }
  }
  return output;
}






void setup() {

  Serial.begin(9600);
  Serial.println("Start");

  SPin[1] = 3;
  SPin[2] = 5;
  SPin[3] = 6;
  SPin[4] = 9;
  SPin[5] = 10;
  SPin[6] = 11;

  Number = 1;
  for (int i = 0; i < 6; i++) {
    SM[Number].attach(SPin[Number]);
    Number++;
  }

  Allocation(1, true, 1, 1000, 10, 0, 100);
  Number = 1;
  Serial.println(MovingTime());
}


void loop() {}

Gruß

Gregor

Danke das mit Strg T kannte ich nicht nur hat leider nicht geholfen es liegt an diesen Code Zeilen:

Number = 1;
for (int i = 0; i < 6; i++) {
SM[Number].attach(SPin[Number]);
Number++;

aber KP warum

int SPin[6];
...
SPin[6] = 11;

Das Feld hat die Elemente 0 bis 5, 6 ist also außerhalb.

Dein Sketch ist schwer zu lesen, danke an Gregor für die Hilfestellung.
Das sollte der TO allerdings auch mit seinem Sketch machen: Code-Tags.

Definiert hast du die Pins mit 1 - 6, aber die for-Schleife geht von 0 - 5, das passt nicht zusammen.

THX

Ace_Dark:
Danke das mit Strg T kannte ich nicht nur hat leider nicht geholfen es liegt an diesen Code Zeilen:

Falsch, damit wird der Sketch für jeden besser lesbar und du findest deine Fehler schneller.

ihr habt mich auf ein noch größeres Problem hingewiesen währenddessen musste ich fest stellen das sobald man einen Servo attached dieser auch ohne den Befehl dazu eine Position hält
Vielen Dank

Hi

  • Variablen außerhalb des gültigen Bereich a[6] geht von a[0]...a[5] - ähnlich Dein Nummer=1;Nummer++;
  • Sobald Du ein Servo 'attached', kümmert sich ein Timer darum, dem Servo Impulse vor die Füße zu werfen. Je nach Länge dieser Impulse (1...2ms) nimmt das Servo den damit definierten Winkel an - so funktioniert ein (Modelbau-)Servo.
  • Du möchtest in Deiner FOR-Schleife Deine Zähl-Variable für die Auswahl der Werte-Variable benutzen - Nummer ist so unnötig, wie ein Kropf.

MfG