INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
SunFounder 16 Channel 12 Bit PCA9685 PWM Servo I2C Driver Shield
20.12.2017, 07:18
Beitrag #25
RE: SunFounder 16 Channel 12 Bit PCA9685 PWM Servo I2C Driver Shield
Glückwunsch,
Und Video wäre auch toll um mal die Zusammenhänge zu sehen.
Gruß, Markus

Immer in Stress
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.12.2017, 22:25
Beitrag #26
RE: SunFounder 16 Channel 12 Bit PCA9685 PWM Servo I2C Driver Shield
Das Video mache ich sicher morgen fertig. Wollte erst noch Kopf und Arme seriell verbinden....Also die Bewegungen.....

EinenFrage. Ich versuche einen laufenden case zu stoppen.
Leider sind meine Versuche wohl bereits im Ansatz falsch und auch im Internet finde ich nichts was geht Sad

Hat hier jemand eine Idee?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.12.2017, 22:54
Beitrag #27
RE: SunFounder 16 Channel 12 Bit PCA9685 PWM Servo I2C Driver Shield
(22.12.2017 22:25)Bikandajyo schrieb:  Das Video mache ich sicher morgen fertig. Wollte erst noch Kopf und Arme seriell verbinden....Also die Bewegungen.....

EinenFrage. Ich versuche einen laufenden case zu stoppen.
Leider sind meine Versuche wohl bereits im Ansatz falsch und auch im Internet finde ich nichts was geht Sad

Hat hier jemand eine Idee?

Wie sollen wir ohne den aktuellen Sketch eine Idee haben?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.12.2017, 23:01 (Dieser Beitrag wurde zuletzt bearbeitet: 23.12.2017 08:02 von Bikandajyo.)
Beitrag #28
RE: SunFounder 16 Channel 12 Bit PCA9685 PWM Servo I2C Driver Shield
... hatte ich vergessen....sorry.
ABer jetzt:

Ich dachte ich könne einen Case mit einem neuen Case unterbrechen, geht aber nicht. Der Befehl kommt zwar seriell an doch wird er erst ausgeführt, wenn der cas fertig abgearbeitet ist. grrrrrrrrrrrrr

Code:
//Version 23.12
// NANO Board zum Betrieb des 16 Kanal Servo Treiber Shields mit serieller Anbindung
// Zum Betrieb beider Boards sind beide Libarys eingebunden (<SunFounder_PCA9685.h>  UND  <Adafruit_PWMServoDriver.h>
// Es kann also sowohl mit dem <SunFounder_PCA9685.h> betrieben werden als auch mit dem <Adafruit_PWMServoDriver.h>

#include <SunFounder_PCA9685.h>
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

const int LED = 7; // Kontroll Leuchte

#define SERVOMIN  800  // das ist die kleinste Pulslänge fuer sg90 Servo
#define SERVOMAX  2200 // das ist die groesste Pulslänge

PCA9685 pwm1 = PCA9685(0x40);

// Mit dieser Zahl wird die Stellgeschwindigkeit eingestellt. Je groesse dei Zahl desto langsamer laufen die Servos
int servoverzoegerung = 2;

int servo1_chn = 0;   // linker Arm - hoch / runter
int servo2_chn = 1;   // linker Arm - vor  / zurueck
int servo3_chn = 2;   // linker Ellenbogen
int servo4_chn = 3;   // rechter Arm - hoch / runter
int servo5_chn = 4;   // rechter Arm - vor  / zurueck
int servo6_chn = 5;   // rechter Ellenbogen

const int servo1grundsstellung = 1;    // je groesser desto weiter nach vorn ist der Arm  *** min=1  / Max= 130
const int servo2grundsstellung = 10;   // je groesser desto weiter oben ist der Arm       *** min=10 / Max= 130
const int servo3grundsstellung = 130;  // je groesser desto gestreckter ist der Unterarm  *** min=1  / Max= 130
const int servo4grundsstellung = 180;  // je groesser desto weiter nach vorn ist der Arm  *** min=1  / Max= 180
const int servo5grundsstellung = 10;   // je groesser desto weiter nach vorn ist der Arm  *** min=10 / Max= 130 ??????
const int servo6grundsstellung = 1;    // je kleiner desto gestreckter ist der Unterarm  *** min=1  / Max= 130

/*
int servo1ausgangsstellung = 1;    // je groesser desto weiter nach vorn ist der Arm  *** min=1  / Max= 130
int servo2ausgangsstellung = 10;   // je groesser desto weiter oben ist der Arm       *** min=10 / Max= 130
int servo3ausgangsstellung = 130;  // je groesser desto gestreckter ist der Unterarm  *** min=1  / Max= 130
int servo4ausgangsstellung = 180;  // je groesser desto weiter nach vorn ist der Arm  *** min=1  / Max= 180
int servo5ausgangsstellung = 10;   // je groesser desto weiter nach vorn ist der Arm  *** min=10 / Max= 130 ??????
int servo6ausgangsstellung = 1;    // je kleiner desto gestreckter ist der Unterarm  *** min=1  / Max= 130

int servo1zielstellung = 1;        // *** min=1  / Max= 130
int servo2zielstellung = 10;       // *** min=10 / Max= 130
int servo3zielstellung = 130;      // *** min=1  / Max= 130
int servo4zielstellung = 180;      // *** min=1  / Max= 180
int servo5zielstellung = 10;       // *** min=10 / Max= 130 ??????
int servo6zielstellung = 1;        // *** min=1  / Max= 130
*/

int servo1ausgangsstellung = servo1grundsstellung;    // je groesser desto weiter nach vorn ist der Arm  *** min=1  / Max= 130
int servo2ausgangsstellung = servo2grundsstellung;   // je groesser desto weiter oben ist der Arm       *** min=10 / Max= 130
int servo3ausgangsstellung = servo3grundsstellung;  // je groesser desto gestreckter ist der Unterarm  *** min=1  / Max= 130
int servo4ausgangsstellung = servo4grundsstellung;  // je groesser desto weiter nach vorn ist der Arm  *** min=1  / Max= 180
int servo5ausgangsstellung = servo5grundsstellung;   // je groesser desto weiter nach vorn ist der Arm  *** min=10 / Max= 130 ??????
int servo6ausgangsstellung = servo6grundsstellung;    // je kleiner desto gestreckter ist der Unterarm  *** min=1  / Max= 130

int servo1zielstellung = servo1grundsstellung;        // *** min=1  / Max= 130
int servo2zielstellung = servo2grundsstellung;       // *** min=10 / Max= 130
int servo3zielstellung = servo3grundsstellung;      // *** min=1  / Max= 130
int servo4zielstellung = servo4grundsstellung;      // *** min=1  / Max= 180
int servo5zielstellung = servo5grundsstellung;       // *** min=10 / Max= 130 ??????
int servo6zielstellung = servo6grundsstellung;        // *** min=1  / Max= 130


//bringe alle Servos in die Grundstellung
void bringeAlleServosInDieGrundstellung(int servo1_chn, int servo1ausgangsstellung,int servo2_chn, int servo2ausgangsstellung, int servo3_chn, int servo3ausgangsstellung, int servo4_chn, int servo4ausgangsstellung, int servo5_chn, int servo5ausgangsstellung, int servo6_chn, int servo6ausgangsstellung, int servoverzoegerung)
{
  Serial.print("bringe alle Servos in die Grundstellung");

        servo1zielstellung = servo1grundsstellung;
        servo2zielstellung = servo2grundsstellung;
        servo3zielstellung = servo3grundsstellung;
        servo4zielstellung = servo4grundsstellung;
        servo5zielstellung = servo5grundsstellung;
        servo6zielstellung = servo6grundsstellung;
        servoMitAngepassterGeschwindigkeit(servo1_chn, servo1ausgangsstellung, servo1zielstellung, servo2_chn, servo2ausgangsstellung, servo2zielstellung, servo3_chn, servo3ausgangsstellung, servo3zielstellung, servo4_chn, servo4ausgangsstellung, servo4zielstellung, servo5_chn, servo5ausgangsstellung, servo5zielstellung, servo6_chn, servo6ausgangsstellung, servo6zielstellung, servoverzoegerung);
        servo1ausgangsstellung=servo1zielstellung;
        servo2ausgangsstellung=servo2zielstellung;
        servo3ausgangsstellung=servo3zielstellung;
        servo4ausgangsstellung=servo4zielstellung;
        servo5ausgangsstellung=servo5zielstellung;
        servo6ausgangsstellung=servo6zielstellung;
}


//einige gezielte Bewegungen durchfuehren
void ichHampelMalSoRumEins(int anzahlschleifen, int servoverzoegerung)
{

  Serial.print("beginne mit dem Rumzappeln ");

  //fuehre die Uebergebene Anzahl Schleifen durch um ein gestigulieren während des Redens zu simulieren
  for(int startzaehler = 0; startzaehler < anzahlschleifen; startzaehler++)
  {
        servo1zielstellung=50;
        servo2zielstellung=110;
        servo3zielstellung=110;
        servo4zielstellung=110;
        servo5zielstellung=88;
        servo6zielstellung=89;
        servoMitAngepassterGeschwindigkeit(servo1_chn, servo1ausgangsstellung, servo1zielstellung, servo2_chn, servo2ausgangsstellung, servo2zielstellung, servo3_chn, servo3ausgangsstellung, servo3zielstellung, servo4_chn, servo4ausgangsstellung, servo4zielstellung, servo5_chn, servo5ausgangsstellung, servo5zielstellung, servo6_chn, servo6ausgangsstellung, servo6zielstellung, servoverzoegerung);
        servo1ausgangsstellung=servo1zielstellung;
        servo2ausgangsstellung=servo2zielstellung;
        servo3ausgangsstellung=servo3zielstellung;
        servo4ausgangsstellung=servo4zielstellung;
        servo5ausgangsstellung=servo5zielstellung;
        servo6ausgangsstellung=servo6zielstellung;

        servo1zielstellung=29;
        servo2zielstellung=18;
        servo3zielstellung=100;
        servo4zielstellung=110;
        servo5zielstellung=78;
        servo6zielstellung=99;
        servoMitAngepassterGeschwindigkeit(servo1_chn, servo1ausgangsstellung, servo1zielstellung, servo2_chn, servo2ausgangsstellung, servo2zielstellung, servo3_chn, servo3ausgangsstellung, servo3zielstellung, servo4_chn, servo4ausgangsstellung, servo4zielstellung, servo5_chn, servo5ausgangsstellung, servo5zielstellung, servo6_chn, servo6ausgangsstellung, servo6zielstellung, servoverzoegerung);
        servo1ausgangsstellung=servo1zielstellung;
        servo2ausgangsstellung=servo2zielstellung;
        servo3ausgangsstellung=servo3zielstellung;
        servo4ausgangsstellung=servo4zielstellung;
        servo5ausgangsstellung=servo5zielstellung;
        servo6ausgangsstellung=servo6zielstellung;

        servo1zielstellung=34;
        servo2zielstellung=15;
        servo3zielstellung=110;
        servo4zielstellung=90;
        servo5zielstellung=68;
        servo6zielstellung=110;
        servoMitAngepassterGeschwindigkeit(servo1_chn, servo1ausgangsstellung, servo1zielstellung, servo2_chn, servo2ausgangsstellung, servo2zielstellung, servo3_chn, servo3ausgangsstellung, servo3zielstellung, servo4_chn, servo4ausgangsstellung, servo4zielstellung, servo5_chn, servo5ausgangsstellung, servo5zielstellung, servo6_chn, servo6ausgangsstellung, servo6zielstellung, servoverzoegerung);
        servo1ausgangsstellung=servo1zielstellung;
        servo2ausgangsstellung=servo2zielstellung;
        servo3ausgangsstellung=servo3zielstellung;
        servo4ausgangsstellung=servo4zielstellung;
        servo5ausgangsstellung=servo5zielstellung;
        servo6ausgangsstellung=servo6zielstellung;

    servo1zielstellung=32;
        servo2zielstellung=22;
        servo3zielstellung=110;
        servo4zielstellung=110;
        servo5zielstellung=10;
        servo6zielstellung=10;
        servoMitAngepassterGeschwindigkeit(servo1_chn, servo1ausgangsstellung, servo1zielstellung, servo2_chn, servo2ausgangsstellung, servo2zielstellung, servo3_chn, servo3ausgangsstellung, servo3zielstellung, servo4_chn, servo4ausgangsstellung, servo4zielstellung, servo5_chn, servo5ausgangsstellung, servo5zielstellung, servo6_chn, servo6ausgangsstellung, servo6zielstellung, servoverzoegerung);
    servo1ausgangsstellung=servo1zielstellung;
        servo2ausgangsstellung=servo2zielstellung;
        servo3ausgangsstellung=servo3zielstellung;
        servo4ausgangsstellung=servo4zielstellung;
        servo5ausgangsstellung=servo5zielstellung;
        servo6ausgangsstellung=servo6zielstellung;


  }

  delay(250);

  //bringe jetzt alle Servos in die Grundstellung
   bringeAlleServosInDieGrundstellung(servo1_chn,servo1ausgangsstellung,servo2_chn,​servo2ausgangsstellung,servo3_chn,servo3ausgangsstellung,servo4_chn,servo4ausgan​gsstellung, servo5_chn,servo5ausgangsstellung,servo6_chn,servo6ausgangsstellung,servoverzoeg​erung);
}

//einzelnes Servo machen
void einzelnesServoEinenSchrittWeiterSteuern(int chn, int angleStart, int angleEnd, int servoverzoegerung)
{
  if(angleStart < angleEnd)//Wenn die Servostartposition kleiner ist als die Zielposition mache einen kleinen Schritt
  {
    pwm1.angleWrite(chn, angleStart);
        delay(servoverzoegerung);
  }
  else if(angleStart > angleEnd)   //wenn die Servostartposition groesser ist als die Zielposition mache einen kleinen Schritt
  {
    pwm1.angleWrite(chn, angleStart);
        delay(servoverzoegerung);
  }
  else
  {
    //nichts machen (ausser einer kleinen Pause), da Startposition des Servos gleich der Zielpositon ist
    delay(servoverzoegerung);
  }
}


//Servogeschwindigkeit
//void servoMitAngepassterGeschwindigkeit(int chn, int angleStart, int angleEnd, int delayTime)

void servoMitAngepassterGeschwindigkeit(int servo1_chn,int servo1ausgangsstellung, int servo1zielstellung,int  servo2_chn, int servo2ausgangsstellung, int servo2zielstellung, int servo3_chn, int servo3ausgangsstellung, int servo3zielstellung, int  servo4_chn, int servo4ausgangsstellung, int servo4zielstellung, int servo5_chn, int servo5ausgangsstellung, int servo5zielstellung, int  servo6_chn, int servo6ausgangsstellung, int servo6zielstellung, int servoverzoegerung)
{

      //fuehre 180 Schleifen durch um die maximalen Servoausschlaege abzudecken
  for(int startzaehler = 0; startzaehler < 130; startzaehler++)
    {
      //steuere jetzt jedes einzelne Servo an und passe die Ausgangsstellung an:

      //Servo 1
      einzelnesServoEinenSchrittWeiterSteuern(servo1_chn,  servo1ausgangsstellung,  servo1zielstellung, servoverzoegerung);
      if(servo1ausgangsstellung > servo1zielstellung)
      {
        //wenn die Ausgangsstellung des Servos groesser ist als die Zielstellung, verringere die Ausgangsstellung um 1
        servo1ausgangsstellung--;
      }
      else if (servo1ausgangsstellung < servo1zielstellung)
      {
        //wenn die Ausgangsstellung des Servos kleiner ist als die Zielstellung, erhoehe die Ausgangsstellung um 1
        servo1ausgangsstellung++;
      }


      //Servo 2
      einzelnesServoEinenSchrittWeiterSteuern(servo2_chn,  servo2ausgangsstellung,  servo2zielstellung, servoverzoegerung);
      if(servo2ausgangsstellung > servo2zielstellung)
      {
        //wenn die Ausgangsstellung des Servos groesser ist als die Zielstellung, verringere die Ausgangsstellung um 1
        servo2ausgangsstellung--;
      }
      else if (servo2ausgangsstellung < servo2zielstellung)
      {
        //wenn die Ausgangsstellung des Servos kleiner ist als die Zielstellung, erhoehe die Ausgangsstellung um 1
        servo2ausgangsstellung++;
      }


      //Servo 3
      einzelnesServoEinenSchrittWeiterSteuern(servo3_chn, servo3ausgangsstellung, servo3zielstellung, servoverzoegerung);
      if(servo3ausgangsstellung > servo3zielstellung)
      {
        //wenn die Ausgangsstellung des Servos groesser ist als die Zielstellung, verringere die Ausgangsstellung um 1
        servo3ausgangsstellung--;
      }
      else if (servo3ausgangsstellung < servo3zielstellung)
      {
        //wenn die Ausgangsstellung des Servos kleiner ist als die Zielstellung, erhoehe die Ausgangsstellung um 1
        servo3ausgangsstellung++;
      }


         //Servo 4
      einzelnesServoEinenSchrittWeiterSteuern(servo4_chn, servo4ausgangsstellung, servo4zielstellung, servoverzoegerung);
      if(servo4ausgangsstellung > servo4zielstellung)
      {
        //wenn die Ausgangsstellung des Servos groesser ist als die Zielstellung, verringere die Ausgangsstellung um 1
        servo4ausgangsstellung--;
      }
      else if (servo4ausgangsstellung < servo4zielstellung)
      {
        //wenn die Ausgangsstellung des Servos kleiner ist als die Zielstellung, erhoehe die Ausgangsstellung um 1
        servo4ausgangsstellung++;
      }


      //Servo 5
      einzelnesServoEinenSchrittWeiterSteuern(servo5_chn,   servo5ausgangsstellung,  servo5zielstellung,  servoverzoegerung);
      if(servo5ausgangsstellung > servo5zielstellung)
      {
        //wenn die Ausgangsstellung des Servos groesser ist als die Zielstellung, verringere die Ausgangsstellung um 1
        servo5ausgangsstellung--;
      }
      else if (servo5ausgangsstellung < servo5zielstellung)
      {
        //wenn die Ausgangsstellung des Servos kleiner ist als die Zielstellung, erhoehe die Ausgangsstellung um 1
        servo5ausgangsstellung++;
      }


      //Servo 6
      einzelnesServoEinenSchrittWeiterSteuern(servo6_chn, servo6ausgangsstellung,  servo6zielstellung, servoverzoegerung);
      if(servo6ausgangsstellung > servo6zielstellung)
      {
        //wenn die Ausgangsstellung des Servos groesser ist als die Zielstellung, verringere die Ausgangsstellung um 1
        servo6ausgangsstellung--;
      }
      else if (servo6ausgangsstellung < servo6zielstellung)
      {
        //wenn die Ausgangsstellung des Servos kleiner ist als die Zielstellung, erhoehe die Ausgangsstellung um 1
        servo6ausgangsstellung++;
      }


          //Servo 6
      einzelnesServoEinenSchrittWeiterSteuern(servo6_chn, servo6ausgangsstellung,  servo6zielstellung, servoverzoegerung);
      if(servo6ausgangsstellung > servo6zielstellung)
      {
        //wenn die Ausgangsstellung des Servos groesser ist als die Zielstellung, verringere die Ausgangsstellung um 1
        servo6ausgangsstellung--;
      }
      else if (servo6ausgangsstellung < servo6zielstellung)
      {
        //wenn die Ausgangsstellung des Servos kleiner ist als die Zielstellung, erhoehe die Ausgangsstellung um 1
        servo6ausgangsstellung++;
      }
    }   //Ende der Schleifen

}

void setup()
{
  Serial.begin(9600);
  pwm1.begin();

  Serial.print("beginne mit den Grundeinstellungen ");
  // Digitaler PIN mit der LED ist ein Ausgang
  pinMode(LED, OUTPUT);

  // default frequency is 50
  pwm1.setFreq(50);

  // Einstellungen min_pulse_width, max_pulse_width
  pwm1.setServo(SERVOMIN, SERVOMAX);

  //  SERVO Grundeinstellungen der Servos wo sie starten sollen

  pwm1.angleWrite(servo1_chn,servo1ausgangsstellung);
  pwm1.angleWrite(servo2_chn,servo2ausgangsstellung);
  pwm1.angleWrite(servo3_chn,servo3ausgangsstellung);
  pwm1.angleWrite(servo4_chn,servo4ausgangsstellung);
  pwm1.angleWrite(servo5_chn,servo5ausgangsstellung);
  pwm1.angleWrite(servo6_chn,servo6ausgangsstellung);


  Serial.println("Fertig! Alle Servos sind nun in die Grundstellung gefahren");
  delay(1000);
  digitalWrite(7, HIGH); //schalte LED 2 an;
}

void loop()
{

    if (Serial.available())
    {
        char serialData = Serial.read();
        Serial.print(serialData);

        
        switch (serialData)
        {
          
          
          case 'STOPP':
            Serial.println("Beende Schleife");
            bringeAlleServosInDieGrundstellung(servo1_chn,  servo1ausgangsstellung,  servo2_chn,   servo2ausgangsstellung,   servo3_chn,   servo3ausgangsstellung,   servo4_chn,   servo4ausgangsstellung,   servo5_chn,   servo5ausgangsstellung,   servo6_chn,   servo6ausgangsstellung,   servoverzoegerung);

              delay(1000);
            break;
                  
          case 's':
            Serial.println("Beende Schleife");
            bringeAlleServosInDieGrundstellung(servo1_chn,  servo1ausgangsstellung,  servo2_chn,   servo2ausgangsstellung,   servo3_chn,   servo3ausgangsstellung,   servo4_chn,   servo4ausgangsstellung,   servo5_chn,   servo5ausgangsstellung,   servo6_chn,   servo6ausgangsstellung,   servoverzoegerung);

              delay(1000);
            break;
          
          case '1':
        Serial.println("Starte Case 1");

                servo1zielstellung=10;
                servo2zielstellung=1;
                servo3zielstellung=100;
                servo4zielstellung=180;
                servo5zielstellung=10;
                servo6zielstellung=1;

                servoMitAngepassterGeschwindigkeit(servo1_chn, servo1ausgangsstellung, servo1zielstellung, servo2_chn, servo2ausgangsstellung, servo2zielstellung, servo3_chn, servo3ausgangsstellung, servo3zielstellung, servo4_chn, servo4ausgangsstellung, servo4zielstellung, servo5_chn, servo5ausgangsstellung, servo5zielstellung, servo6_chn, servo6ausgangsstellung, servo6zielstellung, servoverzoegerung);

                servo1ausgangsstellung=servo1zielstellung;
                servo2ausgangsstellung=servo2zielstellung;
                servo3ausgangsstellung=servo3zielstellung;
                servo4ausgangsstellung=servo4zielstellung;
                servo5ausgangsstellung=servo5zielstellung;
                servo6ausgangsstellung=servo6zielstellung;

                delay(2000);
                servo1zielstellung=1;
                servo2zielstellung=10;
                servo3zielstellung=130;
                servo4zielstellung=180;
                servo5zielstellung=10;
                servo6zielstellung=1;

                servoMitAngepassterGeschwindigkeit(servo1_chn, servo1ausgangsstellung, servo1zielstellung, servo2_chn, servo2ausgangsstellung, servo2zielstellung, servo3_chn, servo3ausgangsstellung, servo3zielstellung, servo4_chn, servo4ausgangsstellung, servo4zielstellung, servo5_chn, servo5ausgangsstellung, servo5zielstellung, servo6_chn, servo6ausgangsstellung, servo6zielstellung, servoverzoegerung);

                servo1ausgangsstellung=servo1zielstellung;
                servo2ausgangsstellung=servo2zielstellung;
                servo3ausgangsstellung=servo3zielstellung;
                servo4ausgangsstellung=servo4zielstellung;
                servo5ausgangsstellung=servo5zielstellung;
                servo6ausgangsstellung=servo6zielstellung;
                //ichHampelMalSoRumEins(3, servoverzoegerung);
                //bringeAlleServosInDieGrundstellung(servo1_chn,  servo1ausgangsstellung,  servo2_chn,   servo2ausgangsstellung,   servo3_chn,   servo3ausgangsstellung,   servo4_chn,   servo4ausgangsstellung,   servo5_chn,   servo5ausgangsstellung,   servo6_chn,   servo6ausgangsstellung,   servoverzoegerung);


                digitalWrite(7, LOW); //schalte LED 2 an;
                Serial.println("->CASE 1 ");
                delay(1000);
            break;


            case '2':
        Serial.println("Starte Case 2");

                servo1zielstellung=120;
                servo2zielstellung=120;
                servo3zielstellung=120;
                servo4zielstellung=120;
                servo5zielstellung=120;
                servo6zielstellung=120;

                servoMitAngepassterGeschwindigkeit(servo1_chn, servo1ausgangsstellung, servo1zielstellung, servo2_chn, servo2ausgangsstellung, servo2zielstellung, servo3_chn, servo3ausgangsstellung, servo3zielstellung, servo4_chn, servo4ausgangsstellung, servo4zielstellung, servo5_chn, servo5ausgangsstellung, servo5zielstellung, servo6_chn, servo6ausgangsstellung, servo6zielstellung, servoverzoegerung);

                servo1ausgangsstellung=servo1zielstellung;
                servo2ausgangsstellung=servo2zielstellung;
                servo3ausgangsstellung=servo3zielstellung;
                servo4ausgangsstellung=servo4zielstellung;
                servo5ausgangsstellung=servo5zielstellung;
                servo6ausgangsstellung=servo6zielstellung;
        delay(5);

                servo1zielstellung=130;
                servo2zielstellung=130;
                servo3zielstellung=130;
                servo4zielstellung=130;
                servo5zielstellung=130;
                servo6zielstellung=130;

                servoMitAngepassterGeschwindigkeit(servo1_chn, servo1ausgangsstellung, servo1zielstellung, servo2_chn, servo2ausgangsstellung, servo2zielstellung, servo3_chn, servo3ausgangsstellung, servo3zielstellung, servo4_chn, servo4ausgangsstellung, servo4zielstellung, servo5_chn, servo5ausgangsstellung, servo5zielstellung, servo6_chn, servo6ausgangsstellung, servo6zielstellung, servoverzoegerung);

                servo1ausgangsstellung=servo1zielstellung;
                servo2ausgangsstellung=servo2zielstellung;
                servo3ausgangsstellung=servo3zielstellung;
                servo4ausgangsstellung=servo4zielstellung;
                servo5ausgangsstellung=servo5zielstellung;
                servo6ausgangsstellung=servo6zielstellung;
                bringeAlleServosInDieGrundstellung(servo1_chn,  servo1ausgangsstellung,  servo2_chn,   servo2ausgangsstellung,   servo3_chn,   servo3ausgangsstellung,   servo4_chn,   servo4ausgangsstellung,   servo5_chn,   servo5ausgangsstellung,   servo6_chn,   servo6ausgangsstellung,   servoverzoegerung);

                //ichHampelMalSoRumEins(4, servoverzoegerung);

                digitalWrite(7, HIGH);           //schalte LED 2 AUS;
                Serial.println("->CASE 2 / 110 auf 122 PAUSE dann 120 auf  = 130  und LED aus");
                delay(1000);
          break;

            case '3':
        Serial.println("Starte Case 3");

                servo1zielstellung=140;
                servo2zielstellung=140;
                servo3zielstellung=140;
                servo4zielstellung=140;
                servo5zielstellung=140;
                servo6zielstellung=140;

                servoMitAngepassterGeschwindigkeit(servo1_chn, servo1ausgangsstellung, servo1zielstellung, servo2_chn, servo2ausgangsstellung, servo2zielstellung, servo3_chn, servo3ausgangsstellung, servo3zielstellung, servo4_chn, servo4ausgangsstellung, servo4zielstellung, servo5_chn, servo5ausgangsstellung, servo5zielstellung, servo6_chn, servo6ausgangsstellung, servo6zielstellung, servoverzoegerung);

                servo1ausgangsstellung=servo1zielstellung;
                servo2ausgangsstellung=servo2zielstellung;
                servo3ausgangsstellung=servo3zielstellung;
                servo4ausgangsstellung=servo4zielstellung;
                servo5ausgangsstellung=servo5zielstellung;
                servo6ausgangsstellung=servo6zielstellung;
        delay(1000);

                servo1zielstellung=20;
                servo2zielstellung=20;
                servo3zielstellung=100;
                servo4zielstellung=20;
                servo5zielstellung=20;
                servo6zielstellung=20;

                servoMitAngepassterGeschwindigkeit(servo1_chn, servo1ausgangsstellung, servo1zielstellung, servo2_chn, servo2ausgangsstellung, servo2zielstellung, servo3_chn, servo3ausgangsstellung, servo3zielstellung, servo4_chn, servo4ausgangsstellung, servo4zielstellung, servo5_chn, servo5ausgangsstellung, servo5zielstellung, servo6_chn, servo6ausgangsstellung, servo6zielstellung, servoverzoegerung);

                servo1ausgangsstellung=servo1zielstellung;
                servo2ausgangsstellung=servo2zielstellung;
                servo3ausgangsstellung=servo3zielstellung;
                servo4ausgangsstellung=servo4zielstellung;
                servo5ausgangsstellung=servo5zielstellung;
                servo6ausgangsstellung=servo6zielstellung;

                digitalWrite(7, HIGH);           //schalte LED 2 AUS;
                Serial.println("->CASE 3 auf = 45  und LED aus");
                delay(1000);
          break;

    case '4':
        Serial.println("Starte Case 4 also das rum Hampeln");
        ichHampelMalSoRumEins(4, servoverzoegerung);
                delay(1000);
          break;


    case '5':
        Serial.println("Starte Case 5 mit l�ngerem rum Hampeln");
        ichHampelMalSoRumEins(10, servoverzoegerung);
                delay(1000);
           break;



            case '6':
        Serial.println("Starte Case 6");
              bringeAlleServosInDieGrundstellung(servo1_chn,  servo1ausgangsstellung,  servo2_chn,   servo2ausgangsstellung,   servo3_chn,   servo3ausgangsstellung,   servo4_chn,   servo4ausgangsstellung,   servo5_chn,   servo5ausgangsstellung,   servo6_chn,   servo6ausgangsstellung,   servoverzoegerung);

                delay(1000);
            break;



          default:  ;
        };
    }
}

Es gibt einen case "case 'STOPP':" in Zeile 335 und alternativ einen case 's'
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.12.2017, 23:17
Beitrag #29
RE: SunFounder 16 Channel 12 Bit PCA9685 PWM Servo I2C Driver Shield
Ich glaube, Du hast die Funktionsweise des Arduino immer noch nicht voll verstanden.
Der arbeitet einen Befehl nach dem anderen ab.
Wenn Du einen Stop-Zustand haben willst, dann kann das nur dadurch passieren, dass der Loop nicht gebremst wird und Du den Stop-Zustad als boolean-Variable im Loop auswertest.
Einen anderen Weg gibt es nicht.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.12.2017, 00:24 (Dieser Beitrag wurde zuletzt bearbeitet: 23.12.2017 08:23 von Bikandajyo.)
Beitrag #30
RE: SunFounder 16 Channel 12 Bit PCA9685 PWM Servo I2C Driver Shield
wie genau könnte man das denn machen?
... boolean-Variable im Loop auswerten ?

Sollte ich also innerhalb des cases immer abfragen ob zB. Mein PIN auf 1 oder 0 steht?
Wie soll ich den denn seriell ändern, wenn der Case erst mal durchlaufen wird. Ich sende ja die seriellen Befehle von einem anderen Board.

Könnte ich es zB. So machen:
Im Case wird immer wieder zwischendurch gefragt ob an PIN X
eine Spannung anliegt. Rie Spannung selbst wird in einem aderen Board geschaltet. Verträgt das mein Board, also eine Spannung von einem zweiten Board?

Könnte man auch abfragen ob ein PIN eines anderen Arduinos auf gnd gesetzt ist oder nicht?

Wenn ja wäre das doch eine Lösing. Ich frage ab, ob ein Pin x auf dem spracherzeuger Board gnd hat oder nicht. Wenn nicht, dann stoppe den case 'Rumhampeln' und starte case 'STOPP'

Oder wäre es besser den Loop zeitlich zu begrenzen? Wobei das sehr aufwendig wäre weil die Laufzeit abhängig von der ausgegebenen Sprache ist.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.12.2017, 23:11 (Dieser Beitrag wurde zuletzt bearbeitet: 24.12.2017 06:58 von Bikandajyo.)
Beitrag #31
RE: SunFounder 16 Channel 12 Bit PCA9685 PWM Servo I2C Driver Shield
Yippppi

Danke für en Tip. Wink

Es geht. Ich lese nun eine Pin am anderen Board aus und kann den Case nun stoppen

Ich poste morgen den Code

Rolleyes
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.01.2018, 15:11
Beitrag #32
RE: SunFounder 16 Channel 12 Bit PCA9685 PWM Servo I2C Driver Shield
...Zu früh gefreut.......Hatte Probleme bereitet
Ich werds nun mit einer Transistorschaltung versuchen.......
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Spannung anlegen bei Servo herby 12 604 31.10.2018 23:51
Letzter Beitrag: Bitklopfer
  Shield Zeichnung in Eagle huber5093 7 663 27.09.2018 13:41
Letzter Beitrag: hotsystems
  Arduino shield zählt komisch hoch Flap 10 1.279 13.09.2018 18:59
Letzter Beitrag: ardu_arne
  I2C bus ( Nano + PCA9685 ) wie verbinden ? uweq 11 1.357 31.07.2018 21:27
Letzter Beitrag: uweq
  Seeedstudio Grove OLED Display (0.96") ansteuerung ohne Basis Shield möglich? Grooxy 5 848 22.05.2018 00:09
Letzter Beitrag: avoid
  Ethernet-Shield Ardusil 9 1.500 09.03.2018 18:09
Letzter Beitrag: hotsystems
  Arduino Mega mit TFT Shield Diskusguppy 6 1.400 16.02.2018 10:35
Letzter Beitrag: Tommy56
  Welches GSM Shield Kaufen ?? huber5093 7 1.087 19.12.2017 07:53
Letzter Beitrag: Chopp
  nano, micro oder? für LAN Shield sepp01 10 1.702 12.11.2017 11:30
Letzter Beitrag: sepp01
  Steckertyp von SD Card Shield V4.0? alpenpower 7 1.283 10.11.2017 10:04
Letzter Beitrag: SkobyMobil

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste