Il y a un truc bizarre, le bouton de tir est lu
etattir = digitalRead(boutonTir);
if (etattir == LOW)
donc avec une initialisation pinMode(boutonTir, INPUT_PULLUP);
j'en déduis que ton bouton est NO.
Est ce que tout ces 3 contacts sont bien d'un côté à GND et l'autre sur une entrée de l'Arduino?
Etrange 
J'ai repris ton programme en lisant les contacts actifs à LOW pour qu'il fonctionne à peu près bien.
Ensuite j'ai ajouté 2 variables d'état:
boolean electrovanneOuverte = false;
boolean etatArmeOk = false;
et les 3 conditions
if (etatair == LOW) {
if (etatarm == LOW) {
et
if (etattir == LOW) {
sont maintenant indépendantes.
Essaies ça:
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel leds(12, 7, NEO_GRB + NEO_KHZ800);
const int boutonAir = 5;
const int evAir = 9;
const int armTir = 2;
const int evTir = 10;
const int boutonTir = 3;
const int pinSon = 12;
int etatair = LOW;
int etatarm = LOW;
int etattir = HIGH;
boolean electrovanneOuverte = false;
boolean etatArmeOk = false;
void setup() {
Serial.begin(115200);
leds.begin();
leds.setBrightness(50);
leds.show();
//initialisation des modes
pinMode(boutonAir, INPUT_PULLUP);
pinMode(evAir, OUTPUT);
pinMode(armTir, INPUT_PULLUP);
pinMode(evTir, OUTPUT);
pinMode(boutonTir, INPUT_PULLUP);
pinMode(pinSon, OUTPUT);
}
void loop() {
if (!electrovanneOuverte) // Si pas ouverte
{
leds.fill(leds.Color(255, 0, 0), 0, 12); // allume toutes les leds en rouge (anneau de 12 leds)
leds.show();
}
etatair = digitalRead(boutonAir); // lecture du contact de vanne air, quand l'on ouvre la culasse pour introduire la balle de tennis un aimant actionne un ILS
// ce qui permet, via un relais d'ouvrir une electrovanne.
if (etatair == LOW) {
digitalWrite(evAir, HIGH); // ILS est en contact, la vanne est s'ouvre et l'air entre dans le reservoir de tir, elle doit rester ouverte entre 4 et 6''
Serial.println("etatair");
leds.setPixelColor(0, leds.Color(0, 255, 0)); // allume une leds sur 2 les autres sont rouges (Anneau de 12 leds)
leds.show();
delay(300);
leds.setPixelColor(2, leds.Color(0, 255, 0));
leds.show();
delay(300);
leds.setPixelColor(4, leds.Color(0, 255, 0));
leds.show();
delay(300);
leds.setPixelColor(6, leds.Color(0, 255, 0));
leds.show();
delay(300);
leds.setPixelColor(8, leds.Color(0, 255, 0));
leds.show();
delay(300);
leds.setPixelColor(10, leds.Color(0, 255, 0));
leds.show();
delay(300);
leds.setPixelColor(12, leds.Color(0, 255, 0));
leds.show();
delay(300);
electrovanneOuverte = true;
// Ici il faudrait que les leds restent allumées en fixe (une rouge, une verte...)???????
// alors que etatair est peut etre encore sur HIGH, ou sur LOW ???????
}
etatarm = digitalRead(armTir); // Quand l'on a mis la balle et que l'on referme la culasse, lecture du contact ILS d'armement
if (etatarm == LOW) {
digitalWrite(evTir, LOW); //envoi la tension sur la borne du contact de tir par l'intermediare d'un relais
Serial.println("etatarm");
leds.setPixelColor(0, leds.Color(0, 255, 0)); // maintient les leds vertes allumée
leds.show();
leds.setPixelColor(2, leds.Color(0, 255, 0));
leds.show();
leds.setPixelColor(4, leds.Color(0, 255, 0));
leds.show();
leds.setPixelColor(6, leds.Color(0, 255, 0));
leds.show();
leds.setPixelColor(8, leds.Color(0, 255, 0));
leds.show();
leds.setPixelColor(10, leds.Color(0, 255, 0));
leds.show();
leds.setPixelColor(12, leds.Color(0, 255, 0));
leds.show();
leds.setPixelColor(1, leds.Color(0, 255, 0)); //passe en vertes les leds qui sont encore en rouges
leds.show();
delay(300);
leds.setPixelColor(3, leds.Color(0, 255, 0));
leds.show();
delay(300);
leds.setPixelColor(5, leds.Color(0, 255, 0));
leds.show();
delay(300);
leds.setPixelColor(7, leds.Color(0, 255, 0));
leds.show();
delay(300);
leds.setPixelColor(9, leds.Color(0, 255, 0));
leds.show();
leds.setPixelColor(11, leds.Color(0, 255, 0));
leds.show();
delay(300);
digitalWrite(evAir, LOW); // ferme l'electrovanne de remplissage du reservoir de tir
leds.fill(leds.Color(0, 255, 0), 0, 11); // maintient allumé toutes les leds en vert
leds.show();
etatArmeOk = true;
// Ici il faudrait que evTir reste sur HIGH et que toutes les leds soient allumées en vertes fixes, en attente de l'appui sur le bouton
// de tir (bouton double NF et NO) qui va ouvrir l'electrovanne de Tir (fontion NO de 1 à 0)?????????
}
etattir = digitalRead(boutonTir); // lecture du bouton de tir. quand il y a un appui sur le bouton de tir l'electrovanne de tir s'ouvre
// directement par le bouton, sans effet sur le programme par contre la fonction NF du bouton de tir passe de 1 à 0
// ce qui doit renvoyer au debut du programme et couper le relais allimenté par evtir???????
if (etattir == LOW) {
if (electrovanneOuverte && etatArmeOk)
{
Serial.println("Tir !!!");
digitalWrite(evTir, LOW);
electrovanneOuverte = false;
etatArmeOk = false;
}
}
}
Je n'ai pas essayé de presser les divers contacts dans tout les sens, mais, fait dans l'ordre, pas de problème. A toi d'assurer la sécurité d'emploi.
Pour l'allumage de tes LED tu pourrais simplifier le code en utilisant une boucle, mais ça pourrait une prochaine étape.
Il y a des indications quand au déroulement du programme dans la console à 115200, c'est très pratique pour chercher des disfonctionnements, tu peur supprimer ces print quand ton programme tournera à satisfaction.
A+
Cordialement
jpbbricole