[ARDUINO] Simulation proteus

hello
tu avais raison, je n'adressais pas les bonnes cases das les tableaux
voici le code qui fonctionne comme je l'ai compris ( compilé et testé sur maquette)
ouvres le moniteur à 115200 bauds et appuies sur tes touches.
attention à l'affecttion des pins

//on suppose que les BP actionnés ammenent GND sur leur entrée
// les LEDS sont sur 3, 4, 5, 6
int LED5   =  3;
int LED10  =  4;
int LED20  =  5;
int LED30  =  6;
// les BP sont sur 7, 8, 9, 10
int REED5  =  7;
int REED10 =  8;
int REED20 =  9;
int REED30 = 10;
// les Relais sont sur 11,12
int Relais[] = {0,11, 12};//case 0 non utilisée

int tempo[] {5000, 10000, 20000, 30000};//tableau des temps désirés

void MINUTES(byte relais, int tempo)
{
  digitalWrite(Relais[relais], HIGH);
  Serial.print("appel relais ");Serial.print(relais); Serial.print(" pendant "); Serial.println(tempo);
  delay(tempo);
  Serial.print("relachement relais "); Serial.println(Relais[relais]);
  digitalWrite(Relais[relais], LOW);
}

void setup() {
  Serial.begin(115200);
  pinMode(REED5,   INPUT_PULLUP);
  pinMode(REED10,  INPUT_PULLUP);
  pinMode(REED20,  INPUT_PULLUP);
  pinMode(REED30,  INPUT_PULLUP);
  pinMode(LED5,  OUTPUT); digitalWrite(LED5, LOW);
  pinMode(LED10, OUTPUT); digitalWrite(LED10, LOW);
  pinMode(LED20, OUTPUT); digitalWrite(LED20, LOW);
  pinMode(LED30, OUTPUT); digitalWrite(LED30, LOW);
  pinMode(Relais[1], OUTPUT); digitalWrite(Relais[1], LOW);//RelaisM1 sur 13
  pinMode(Relais[2], OUTPUT); digitalWrite(Relais[2], LOW);//Relaism2 sur 9

  //test des leds
  for ( byte f = 3; f <= 6; f++)
  { Serial.print("allumage led "); Serial.println(f);
    digitalWrite(f , HIGH);//allumes les 4 leds
  }
  delay(500);
  for ( byte f = 3; f <= 6; f++)
  { Serial.print("extintion led "); Serial.println(f);
    digitalWrite(f , LOW);//eteinds les 4 leds
  }
}

void loop()
{
  for ( byte f = 3; f <= 6; f++)
  { Serial.print("extintion led "); Serial.println(f);
    digitalWrite(f, LOW);                      //eteinds les leds
  }
  for ( byte f = 7; f <= 10; f++)
  { Serial.print("lecture BP "); Serial.println(f);
    if (digitalRead(f) == LOW)                    //lecture des BP chacun à son tour
    {
      Serial.print("touche "); Serial.print(f); Serial.println(" pressee");
      Serial.print("allumage led  "); Serial.println(f - 4);
      Serial.print("appel tempo de  "); Serial.println(tempo[(f - 7)]);
      digitalWrite(f , HIGH); MINUTES(1,tempo[(f - 7)]); //et si BP actionné, appel de la tempo correspondante
    }
  }
}

nota: tu n'as pas précisé si tu avais besoin de coller deux relais en meme temps 
si c'est avec des tempos differentes
et das ton code, tu ne commandes pas le relais 2
1 Like