Faire un Shifumi avec une main imprimé en 3D

Bonjour,
Je suis en train de fabriquer une main en 3D et je souhaite pouvoir faire un Shifumi contre elle.
Chaque doigt est dirigé par un moteur.
Il faudrait qu'elle fasse aléatoirement pierre, feuille ou ciseaux.

Voici mon programme pour l'instant :

#include <Servo.h>

Servo servoindex;          
Servo servopouce;
Servo servomajeur;
Servo servoannulaire;
Servo servoauriculaire;

void setup() {
  Serial.begin(9600);
  servopouce.attach(3);
  servoindex.attach(4);  
  servomajeur.attach(5);
  servoannulaire.attach(6); 
}

void loop() {   
  pierre ();
  delay (4000);
  feuille();
  delay (4000);
  ciseaux();
  delay (4000);         
}

void pierre() {
  servopouce.write(180);
  servoindex.write(180);
  servomajeur.write(180);
  servoannulaire.write(180);
  servoauriculaire.write(180);
}

void feuille() {
  servopouce.write(0);
  servoindex.write(0);
  servomajeur.write(0);
  servoannulaire.write(0);
  servoauriculaire.write(0);
}

void ciseaux() {
  servopouce.write(0);
  servoindex.write(180);
  servomajeur.write(180);
  servoannulaire.write(0);
  servoauriculaire.write(0);  
}

Pouvez-vous m'aider à faire la fonction random please ?
Merci d'avance :slight_smile:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone".

elle existe déjà ➜ random() - Arduino Reference

vous tirez un nombre aléatoire 0, 1 ou 2 et vous appelez la fonction pierre () , feuille() ou ciseaux() en fonction de ce nombre.

switch() / case serait pas mal pour cela

Pouvez-vous m'expliquer que faire car je n'y arrive pas..

Bonjour @akiin
Un tuto plutôt bien fait sur random() :
https://arduino-france.site/fonction-random/

Bonne bidouilles

Amitiés
Pandaroux007

un truc du genre

void loop() {
  switch(random(3)) {           // on tire un nombre aléatoire entre 0 et 2 (3 possibilités donc)
    case 0: pierre ();  break;  // si c'est 0 on fait pierre
    case 1: feuille (); break;  // si c'est 1 on fait feuille 
    case 2: ciseaux (); break;  // si c'est 2 on fait ciseaux
    default: break;             // ne peut pas arriver mais c'est bien de mettre toujours un default  à son switch/case
  } 
  delay (4000);
}

Super merci, je termine la main et je vous redis si ça fonctionne !

Attention, sans randomSeed la série est toujours la même. Si on joue en 20 points, on peut retenir les 20 premières mains et gagner à coup sûr.

Avec randomSeed(analogRead(A1)); c'est un peu mieux, mais la valeur retournée ne va pas donner un vrai départ au hasard, mais donne pas plus d'une dizaine de série. Moins si c'est dans un bon boîtier. L'idéal serait d'initialiser avec une horloge en temps réel ou d'initialiser avec ce que retourne millis() quand on appuie sur un bouton "démarrer le jeu".