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() {}
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() {}
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
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.