Bonjour,
J'ai un petit souci.
J'ai un programme pour un checkpoint d'airsoft. Le but est lorsque quelqu'un appuie sur un bouton de couleur une barre de chargement apparait et le point de checkpoint passe en cours de capture. Cela fonctione. Le problème est lorsque quelqu'un d'autre appuie sur un bouton d'une autre couleur, la barre devrait s'arrêter et la capture devrait recommencer à 0 mais avec la nouvelle couleur. Et là cela ne fonctionne pas.
J'ai refait mon code et essayé plusieurs choses mais je ne trouve pas. Mon code n'est pas des plus simples étant un débutant mais j'essaie de faire ce que je peux
Voici mon code:
void game()
{
temp_capture_flag=temp_capture_flag*60;
Serial.println("BP Bleu donc game");
lcd.setCursor(3,0);
lcd.print("Base neutre");
while ( y == 0)
{
Serial.println(y);
etat_boutonB = digitalRead(BP_PinB);
if((etat_boutonB==HIGH) or (change_capt==1))
{
change_capt=1;
Serial.println("BP Bleu");
color = 1;
Serial.println(color);
etat_boutonR=LOW;
etat_boutonY=LOW;
etat_boutonW=LOW;
tempo();
}
etat_boutonR = digitalRead(BP_PinR);
if((etat_boutonR==HIGH) or (change_capt==2))
{
change_capt=2;
Serial.println("BP Rouge");
color = 2;
Serial.println(color);
etat_boutonB=LOW;
etat_boutonY=LOW;
etat_boutonW=LOW;
tempo();
}
etat_boutonY = digitalRead(BP_PinY);
if((etat_boutonY==HIGH) or (change_capt==3))
{
change_capt=3;
Serial.println("BP Jaune");
color = 3;
Serial.println(color);
etat_boutonB=LOW;
etat_boutonR=LOW;
etat_boutonW=LOW;
tempo();
}
etat_boutonW = digitalRead(BP_PinW);
if((etat_boutonW==HIGH) or (change_capt==4))
{
change_capt=4;
Serial.println("BP Blanc");
color = 4;
Serial.println(color);
etat_boutonB=LOW;
etat_boutonR=LOW;
etat_boutonY=LOW;
tempo();
}
if(etat_base=="Base blanche")
{
lcd.setCursor(2,0);
lcd.print(etat_base);
}
else
{
lcd.setCursor(3,0);
lcd.print(etat_base);
}
if (digitalRead(BP_PinR)==HIGH and digitalRead(BP_PinB)==HIGH)
{
y =1;
etat_boutonB=LOW;
etat_boutonR=LOW;
}
}
if ( y == 1)
{
lcd.clear();
while (digitalRead(BP_PinR)==LOW)
{
lcd.setCursor(0,0);
lcd.print("R retour au menu");
if (digitalRead(BP_PinR)==HIGH)
{
menu();
}
}
delay(2000);
}
}
void tempo ()
{
barre_float=(temp_capture_flag/16);
if(barre_float<(barre+0,5))
{
barre=(temp_capture_flag/16)+1;
}
else
{
barre=(temp_capture_flag/16);
}
t=0;
Serial.print("barre float ");Serial.print(barre_float);Serial.print(" ");Serial.print("barre");Serial.print(barre);
if(color==1)
{
while( z<temp_capture_flag and change_capt==1)
{
if (digitalRead(BP_PinR)== LOW and digitalRead(BP_PinY)== LOW and digitalRead(BP_PinW)== LOW)
{
lcd.setCursor(0,0);
lcd.print("Capture en cours");
s= barre*t;
Serial.print("barre ");Serial.print(barre);Serial.print(" ");Serial.print("t ");Serial.print(t); Serial.print(" ");Serial.print("s ");Serial.print(s);Serial.print(" ");
if(s==z) // barre= entier du timer / par 16 le nbr de carac du lcd
{
if (s>0)
{
lcd.setCursor((t-1),1);
lcd.print((char)255);
Serial.print(t);
}
t=t+1;
}
z=z+1;
delay(1000);
}
if(digitalRead(BP_PinR)==HIGH)
{
change_capt=2;
}
if(digitalRead(BP_PinY)==HIGH)
{
change_capt=3;
}
if(digitalRead(BP_PinW)==HIGH)
{
change_capt=4;
}
}
if (z==temp_capture_flag)
{
digitalWrite(led_PinW, LOW);
digitalWrite(led_PinY, LOW);
digitalWrite(led_PinR, LOW);
buzzer();
digitalWrite(led_PinB, HIGH);
lcd.clear();
etat_base="Base bleu";
}
else
{
z=0;
t=0;
}
}
if(color==2)
{
while( z<temp_capture_flag and (digitalRead(BP_PinB)== LOW or digitalRead(BP_PinY)== LOW or digitalRead(BP_PinW)== LOW))
{
Serial.print(" Couleur = ");Serial.print(color);Serial.print(" "); Serial.print(z);Serial.print(" ");
lcd.setCursor(0,0);
lcd.print("Capture en cours");
s= barre*t;
if(s==z) // barre= entier du timer / par 16 le nbr de carac du lcd
{
lcd.setCursor(t,1);
lcd.print((char)255);
t=t+1;
}
z=z+1;
delay(1000);
}
if (z==temp_capture_flag)
{
digitalWrite(led_PinB, LOW);
digitalWrite(led_PinY, LOW);
digitalWrite(led_PinW, LOW);
buzzer();
digitalWrite(led_PinR, HIGH);
lcd.clear();
etat_base="Base rouge";
}
else
{
z=0;
t=0;
}
}
if(color==3)
{
while( z<temp_capture_flag and (digitalRead(BP_PinB)== LOW or digitalRead(BP_PinR)== LOW or digitalRead(BP_PinW)== LOW))
{
Serial.print(" Couleur = ");Serial.print(color);Serial.print(" "); Serial.print(z);Serial.print(" ");
lcd.setCursor(0,0);
lcd.print("Capture en cours");
s= barre*t;
if(s==z) // barre= entier du timer / par 16 le nbr de carac du lcd
{
lcd.setCursor(t,1);
lcd.print((char)255);
t=t+1;
}
z=z+1;
delay(1000);
}
if (z==temp_capture_flag)
{
digitalWrite(led_PinW, LOW);
digitalWrite(led_PinB, LOW);
digitalWrite(led_PinR, LOW);
buzzer();
digitalWrite(led_PinY, HIGH);
lcd.clear();
etat_base="Base jaune";
}
else
{
z=0;
t=0;
}
}
if(color==4)
{
while( z<temp_capture_flag and (digitalRead(BP_PinB)== LOW or digitalRead(BP_PinR)== LOW or digitalRead(BP_PinY)== LOW))
{
Serial.print(" Couleur = ");Serial.print(color);Serial.print(" "); Serial.print(z);Serial.print(" ");
lcd.setCursor(0,0);
lcd.print("Capture en cours");
s= barre*t;
if(s==z) // barre= entier du timer / par 16 le nbr de carac du lcd
{
lcd.setCursor(t,1);
lcd.print((char)255);
t=t+1;
}
z=z+1;
delay(1000);
}
if (z==temp_capture_flag)
{
digitalWrite(led_PinB, LOW);
digitalWrite(led_PinY, LOW);
digitalWrite(led_PinR, LOW);
buzzer();
digitalWrite(led_PinW, HIGH);
lcd.clear();
etat_base="Base blanche";
}
else
{
z=0;
t=0;
}
}
color=0;
z=0;
}