Go Down

Topic: Problème avec boucle while et millis pour porte de congélateur (Read 839 times) previous topic - next topic

piranha29

Bonjour,
voici mon problème, ma femme oublie souvent la porte du congélateur ouverte...j'ai donc décidé de me lancer dans un petit programme pour éviter d'autres déconvenues!
Voici ce que je veux faire: Si porte fermée: une led verte allumée, sinon une led bleue pendant 30 secondes, puis si porte toujours pas fermée, led bleue + led rouge (un buzzer sera mis plus tard). A tous moment je veux que quand la porte se ferme la led verte soit allumée et que bleue et rouge s'éteigne. J'ai fait plusieurs programmes qui ne marchent pas et j'en suis arrivé à celui-ci mais je n'arrive pas à le compiler, il indique sur la ligne du premier while:
exit status 1
lvalue required as left operand of assignment
Quelqu'un pourrait-il m'aider à garder le froid dans mon congél s'il vous plait??? :( Merci pour votre aide
Voici le programme (j'ai mis la tempo à 5 secondes)
Code: [Select]

int VERTE = 2;
int BLEUE = 3;
int ROUGE = 4;
unsigned long PREVIOUSMILLIS= 0;
unsigned long CURRENTMILLIS =0;
int switchState = 8;



void setup() {
pinMode (8, INPUT);
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
}
void loop() {
  switchState = digitalRead(8);
if (switchState == HIGH){
digitalWrite (2, HIGH);
digitalWrite (3, LOW);
digitalWrite (4, LOW);
}
else {

PREVIOUSMILLIS = millis();
while ((CURRENTMILLIS - PREVIOUSMILLIS <= 5000) && (switchState = LOW))
{
  digitalWrite (2, LOW);
  digitalWrite (3, HIGH);
  digitalWrite (4, LOW);
  CURRENTMILLIS = millis();
}
while (switchState = LOW){
    digitalWrite (2, LOW);
    digitalWrite (3, HIGH);
    digitalWrite (4, HIGH);
    switchState = digitalRead(8);
}
   
}

}}



piranha29

En fait je viens de reussir à finaliser ce mini projet en utilisant le logiciel ardublock, pour les nullos en programmation comme moi, je vous donne directement le code. Petite précision: led verte sur broche 2, bleue sur 3, rouge sur 4, le bouton du congélateur sur 8 et j'ai rajouté un bouton pour le frigo sur 9. Il faut donc les 2 boutons appuyés pour allumer la led verte. Le buzzer est sur 10. La tempo est sur 5 secondes quand je mettrai tout en place, je la réglerai sur 30 ou 45 secondes. Je pense utiliser des capteurs à languettes pour détecter les ouvertures:
Code: [Select]

int _ABVAR_2_VARIABLETEMPS;
int _ABVAR_3_MAINTENANT;
int _ABVAR_1_PORTE;

void setup()
{
_ABVAR_2_VARIABLETEMPS = 0;
_ABVAR_3_MAINTENANT = 0;
pinMode( 8 , INPUT);
_ABVAR_1_PORTE = 0;
pinMode( 2 , OUTPUT);
pinMode( 9 , INPUT);
pinMode( 3 , OUTPUT);
pinMode( 4 , OUTPUT);
}

void loop()
{
if (( digitalRead( 8) && digitalRead( 9) ))
{
_ABVAR_1_PORTE = 1 ;
}
else
{
_ABVAR_1_PORTE = 0 ;
}
if (( ( _ABVAR_1_PORTE ) == ( 1 ) ))
{
digitalWrite( 2 , HIGH );
digitalWrite( 3 , LOW );
digitalWrite( 4 , LOW );
noTone(10);
}
else
{
_ABVAR_2_VARIABLETEMPS = ( millis() + 5000 ) ;
_ABVAR_3_MAINTENANT = millis() ;
while ( ( ( ( _ABVAR_3_MAINTENANT ) <= ( _ABVAR_2_VARIABLETEMPS ) ) && ( !( digitalRead( 8) ) || !( digitalRead( 9) ) ) ) )
{
digitalWrite( 2 , LOW );
digitalWrite( 3 , HIGH );
digitalWrite( 4 , LOW );
_ABVAR_3_MAINTENANT = millis() ;
}

while ( ( !( digitalRead( 8) ) || !( digitalRead( 9) ) ) )
{
digitalWrite( 2 , LOW );
digitalWrite( 3 , HIGH );
digitalWrite( 4 , HIGH );
tone(10, 440);
_ABVAR_3_MAINTENANT = millis() ;
}

}
}



piranha29

Oui, merci pour les conseils, mais le but c'était aussi de s'amuser et de découvrir l'arduino

Go Up