1 servo 2 switchs

Bonjour,

étant toujours un peu débutant en Arduino, je demande conseils pour mon cas de figure:

Configuration:
J'ai une carte at mega 2560 CH340
1 servo SG90
2 switchs temporaire
(le tout est connecté sur les zones de pins PWM 0 à 13)

j'ai mon servo (alimenté séparément de la carte) connecté au PIN 8
1 switch sur le pin 9
1 switch sur le pin 10

Je voudrais que mon servo fasse ceci, suivant les conditions des 2 switchs:

switch 9 HIGH
switch 10 HIGH
servo à 90°

switch 9 HIGH
switch 10 LOW
servo à 90°

switch 9 LOW
Switch 10 HIGH
servo à 135°

switch 9 LOW
switch 10 LOW
servo à 45°

Et ceci, avec une ligne de code au préalable pour paramétrer la vitesse de rotation du servo.

Je sais que mon problème n'a pas l'air très compliqué pour tous les aficionados de ce forum, mais j'aime les programmes pro et bien fait!
Si quelqu'un peut m'aider en me faisant un bout de code, je lui serais reconnaissant, car j'apprends sur le vif...
Je vais éviter d'insérer mes lignes de code test ici,(et qui fonctionne plus ou moins) pour repartir de zéro
avec quelque chose de propre.

Merci d'avance à tous...

c'est un peu facile... postez votre code de base au moins...

Voilà le code: :slight_smile:

Dans le setup vous définissez le servo et les pins des switch
Dans la loop vous lisez l'état des switch et décidez de la position du servo

Ok, je préviens, j'applique le principe du rasoir d'Ockham, (et même, je suis limite application militaire! :smiley: )
Il s'agit là de la beta du programme final.
Ma configuration finale est de 6 servos et 4 switch temporaires

A savoir que le delay de 2 sec est là pour laisser un temps morts entre les 4 premiers servos (FL, FR, BL, BR) et les 2 derniers (DRL et DRR)
Et de plus j'ai une erreur avec mes accolades...je trouve pas où!!! ( I know, I'm a stupid guy...)
voici mon code au complet:

#include <Servo.h>
int button21 = 21; //button pin,  F
int press21 = 0;
int button22 = 22; //button pin,  L
int press22 = 0;
int button23 = 23; //button pin,  B
int press23 = 0;
int button24 = 24; //button pin,  R
int press24 = 0;

Servo servoFL,servoFR,servoBL,servoBR,servoDRL,servoDRR;

void setup()
{
  pinMode(button21, INPUT);
  pinMode(button22, INPUT);
  pinMode(button23, INPUT);
  pinMode(button24, INPUT);
  servoFL.attach(8);
  servoFR.attach(9);
  servoBL.attach(10);
  servoBR.attach(11);
  servoDRL.attach(12);
  servoDRR.attach(13);
  digitalWrite(21, HIGH); //enable pullups to make pin high
  digitalWrite(22, HIGH); //enable pullups to make pin high
  digitalWrite(23, HIGH); //enable pullups to make pin high
  digitalWrite(24, HIGH); //enable pullups to make pin high
}

void loop()
{
  press21 = digitalRead(button21); //move F
  if (press21 == LOW)
  {
    servoFL.write(90);
    servoFR.write(90);
    servoBL.write(90);
    servoBR.write(90);
    delay(2000);
    servoDRL.write(85);
    servoDRR.write(95);
    if (press21 == HIGH)
    }
    
  press21 = digitalRead(button21); //move F
  if (press21 == LOW)
  press22 = digitalRead(button22); //move L
  if (press22 == LOW)
  {
    servoFL.write(51);
    servoFR.write(39);
    servoBL.write(141);
    servoBR.write(129);
    delay(2000);
    servoDRL.write(85);
    servoDRR.write(132);
    if (press21 == HIGH)
    if (press22 == HIGH)
    }
  press22 = digitalRead(button22); //move L
  if (press22 == LOW)
  {
    servoFL.write(141);
    servoFR.write(39);
    servoBL.write(39);
    servoBR.write(141);
    delay(2000);
    servoDRL.write(95);
    servoDRR.write(95);
    if (press22 == HIGH)
    }  
  press22 = digitalRead(button22); //move L
  if (press22 == LOW)
  press23 = digitalRead(button23); //move B
  if (press23 == LOW)
  {
    servoFL.write(51);
    servoFR.write(39);
    servoBL.write(141);
    servoBR.write(129);
    delay(2000);
    servoDRL.write(85);
    servoDRR.write(132);
    if (press22 == HIGH)
    if (press23 == HIGH)
      } 
  press23 = digitalRead(button23); //move B
  if (press23 == LOW)
  {
    servoFL.write(90);
    servoFR.write(90);
    servoBL.write(90);
    servoBR.write(90);
    delay(2000);
    servoDRL.write(95);
    servoDRR.write(85);
    if (press23 == HIGH)
    }
  press23 = digitalRead(button23); //move B
  if (press23 == LOW)
  press24 = digitalRead(button24); //move R
  if (press24 == LOW)
  {
    servoFL.write(129);
    servoFR.write(141);
    servoBL.write(51);
    servoBR.write(39);
    delay(2000);
    servoDRL.write(95);
    servoDRR.write(48);
    if (press23 == HIGH)
    if (press24 == HIGH)
      }
  press24 = digitalRead(button24); //move R
  if (press24 == LOW)
  {
    servoFL.write(141);
    servoFR.write(39);
    servoBL.write(39);
    servoBR.write(141);
    delay(2000);
    servoDRL.write(85);
    servoDRR.write(85);
    if (press24 == HIGH)
    }
  press21 = digitalRead(button21); //move F
  if (press21 == LOW)
  press24 = digitalRead(button24); //move R
  if (press24 == LOW)
  {
    servoFL.write(129);
    servoFR.write(141);
    servoBL.write(51);
    servoBR.write(39);
    delay(2000);
    servoDRL.write(48);
    servoDRR.write(95);
    if (press21 == HIGH)
    if (press24 == HIGH)
      }
 }
}

SOYEZ INDULGENT, je ne suis qu'un modeste apprentis misérable! :stuck_out_tongue:
Merci d'avance pour l'aide

hello
je t'ai préparé ce bout de code
à toi de mettre la ligne qui va bien pour la vitesse des servos :slight_smile:

#include <Servo.h>
// BPF sur  A8;  //car platine mega
// BPL sur  A9;  //car platine mega
// BPB sur A10;  //car platine mega
// BPR sur A11;  //car platine mega


Servo servoFL, servoFR, servoBL, servoBR, servoDRL, servoDRR;

void setup()
{ Serial.begin(1000000);
  DDRK   = 0b00000000;      
  PORTK  = 0b11111111;     
  servoFL.attach(8);
  servoFR.attach(9);
  servoBL.attach(10);
  servoBR.attach(11);
  servoDRL.attach(12);
  servoDRR.attach(13);
}

void loop()
{
  byte etat_portK = (PINK & 0b00001111) ^ 0b00001111;
  Serial.println(etat_portK);
  switch (etat_portK) 
  {
    case 0:
      {
        servoFL.write(51);
        servoFR.write(39);
        servoBL.write(141);
        servoBR.write(129);
        delay(2000);
        servoDRL.write(85);
        servoDRR.write(132);
      }
      break;
    case 1:
      {
        servoFL.write(90);
        servoFR.write(90);
        servoBL.write(90);
        servoBR.write(90);
        delay(2000);
        servoDRL.write(85);
        servoDRR.write(95);
      }
      break;
    case 2:
      {
        servoFL.write(141);
        servoFR.write(39);
        servoBL.write(39);
        servoBR.write(141);
        delay(2000);
        servoDRL.write(95);
        servoDRR.write(95);
      }
      break;
    case 6:
      {
        servoFL.write(51);
        servoFR.write(39);
        servoBL.write(141);
        servoBR.write(129);
        delay(2000);
        servoDRL.write(85);
        servoDRR.write(132);
      }
      break;
    case 4:
      {
        servoFL.write(90);
        servoFR.write(90);
        servoBL.write(90);
        servoBR.write(90);
        delay(2000);
        servoDRL.write(95);
        servoDRR.write(85);

      }
      break;
    case 12:
      {
        servoFL.write(129);
        servoFR.write(141);
        servoBL.write(51);
        servoBR.write(39);
        delay(2000);
        servoDRL.write(95);
        servoDRR.write(48);
      }
      break;
    case 8:
      {
        servoFL.write(141);
        servoFR.write(39);
        servoBL.write(39);
        servoBR.write(141);
        delay(2000);
        servoDRL.write(85);
        servoDRR.write(85);
      }
      break;
    case 9:
      {
        servoFL.write(129);
        servoFR.write(141);
        servoBL.write(51);
        servoBR.write(39);
        delay(2000);
        servoDRL.write(48);
        servoDRR.write(95);
      }
      break;
      default:
      {;}
      break;
  }
}

Cool, merci!
Mais juste une question, en quoi consiste ces lignes supplementaires? Pour mon apprentissage... :slight_smile:
Le serial.begin au debut du void setup? Ainsi que le DDRK et le PORTK ?? Ainsi qu'au debut du Void loop??
Merci...