besoin d'aide pour ligne de codes

Bonjour à tous,

j’ai fais l’acquisition d’une carte ARDUINO UNO pour me lancer dans la domotique.
sachant que je suis novice dans ce domaine (programmation). le projet que j’ai en tête et le controle d’une carte relais avec un affichage LCD.
pour l’instant j’utilise des LEDs, en lieu et place des relais.
Au niveau de ma programmation je suis bloqué.
ce que j’essaie de faire c’est d’allumé et d’éteindre une LED avec la même touche de ma télécommande.
j’arrive a allumer la LED avec la touche (ex1) mais je bloque pour l’éteindre avec cette même touche.
une idée pour moi svp smiley
voici mes ligne de code pour le moment :

/*
 * IR TEST LED & REMOTE
 * Copyleft Snootlab 2012
 */

#include <IRremote.h>
#include <LiquidCrystal.h>

#define RECV_PIN 9
#define LED_PIN1 6
#define LED_PIN2 7
#define LED_PIN3 8
#define LED_PIN4 10

#define ON_CODE 0xFF30CF // +
#define ON_CODE2 0xFF18E7
#define ON_CODE3 0xFF7A85
#define OFF_CODE 0xFFA25D // -
#define PLUS_CODE 0xFF906F

// initialize the library with the numbers of the interface pins



IRrecv irrecv(RECV_PIN);
decode_results results;
LiquidCrystal lcd (12,11,5,4,3,2); 
int heures,minutes,secondes;
char message[16] ="";

boolean led1 = false;
boolean led2 = false;
boolean led3 = false;
boolean led4 = false;

void setup()
{
  lcd.begin (16,2);
  heures = 17;
  minutes = 49;
  secondes =0;
  pinMode(LED_PIN1, OUTPUT);
  pinMode(LED_PIN2, OUTPUT);
  pinMode(LED_PIN3, OUTPUT);
  pinMode(LED_PIN4, OUTPUT);
  irrecv.enableIRIn(); // Start receiver
  Serial.begin(9600);
 
  lcd.print("bonjour");
  led4 = true;
}


void loop() {
  

  
    digitalWrite(LED_PIN1, led1);
    digitalWrite(LED_PIN2, led2);
    digitalWrite(LED_PIN3, led3);
    digitalWrite(LED_PIN4, led4);

  // If IR message is received
  if (irrecv.decode(&results)) {
 long int decCode = results.value;

Serial.println(decCode);

switch (results.value) {

 case 0xFF30CF:
Serial.println("SOURCE 1");
lcd.clear();
lcd.print("SOURCE 1 CD");
digitalWrite(LED_PIN1, HIGH); // sets the LED on
break;

case 0xFF18E7:
Serial.println("SOURCE 2");
lcd.clear();
lcd.print("SOURCE 2 DVD");
digitalWrite(LED_PIN2, HIGH); // sets the LED on
break;

 case 0xFF7A85:
Serial.println("SOURCE 3");
digitalWrite(LED_PIN3, HIGH); // sets the LED on
lcd.clear();
lcd.print("SOURCE 3 PS3");
break;

 case 0xFFA25D:
Serial.println("Stop");
lcd.setCursor (0,0);
lcd.print("Au revoir Gio");
delay (3000);
lcd.clear();
lcd.print("MATOS ETEINT"); 
digitalWrite(LED_PIN1, LOW); // sets the LED off
digitalWrite(LED_PIN2, LOW); // sets the LED off
digitalWrite(LED_PIN3, LOW); // sets the LED off
break; 

default:

 Serial.println("Waiting ...");

}

irrecv.resume(); // Receive the next value
      
  
}  //on commence par gérer le temps qui passe...
  if(secondes == 60) //une minutes est atteinte ?
  {
    secondes = 0; //on recompte à partir de 0
    minutes++; 
  }
  if(minutes == 60) //une heure est atteinte ?
  {
    minutes = 0;
    heures++;
  }
  if(heures == 24) //une journée est atteinte ?
  {
    heures = 0; 
  }
  
  //met le message dans la chaine à transmettre
  sprintf(message,"Il est %2d:%2d:%2d",heures,minutes,secondes);

  lcd.setCursor(0,1);           //met le curseur en position (0;0) sur l'écran
  
  lcd.write(message);   //envoi le message sur l'écran
  
  delay(1000);          //attend une seconde
  //une seconde s'écoule...
  secondes++;
 }

bonjour, évidemment puisque lorsque tu appuie sur une touhe, tu mets en HIGH donc, tu pourras appuyer autant que tu veux, ca sera toujours en HIGH ;)

digitalWrite(LED_PIN1, HIGH); // sets the LED on

ton boolean est a suivre http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.Boolean

Salut, ce que tu peux faire (ce que j'ai fait en attendant mieux), c'est d'appeler une fonction d'extinction "éteindre();" avant chaque allumage. Et dans la fonction tu mets tout à LOW: éteindre(){ digitalWrite(pin1,LOW); digitalWrite(pin2,LOW); ...ext; } Solution de newbee; Il doit y avoir mieux.

giovanny_galant: ce que j'essaie de faire c'est d'allumé et d'éteindre une LED avec la même touche de ma télécommande. j'arrive a allumer la LED avec la touche (ex1) mais je bloque pour l'éteindre avec cette même touche.

Il faut créer une variable qui mémorise l'état actuel de la LED. A chaque appuie sur la touche en question, tu testes l'état de la variable et tu la complémente. Tu te sers ensuite de cette variable pour allumer/éteindre la LED

Exemple de code

byte etatLed=LOW; // LED éteinte

void setup(void){
......
   digitalWrite(LED_PINx,etatLed);
......
}


void loop(void){
// code de réception des commandes
.......
switch(results.value) {

  case le_code_qui_va_bien:
          etatLed= ~etatLed; // complémente l'état de la variable
          digitalWrite(LED_PINx,etatLed);
          break;
.........
}

Bonjour a tous,

merci pour vos aides et j’ai pu finir mon mini projet grâce a vous, voici mon code final :

/*
 * IR TEST LED & REMOTE
 * Copyleft Snootlab 2012
 */

#include <IRremote.h>
#include <LiquidCrystal.h>

#define RECV_PIN 9
#define LED_PIN1 6
#define LED_PIN2 7
#define LED_PIN3 8
#define LED_PIN4 10

#define ON_CODE 0xFF30CF // +
#define ON_CODE2 0xFF18E7
#define ON_CODE3 0xFF7A85
#define OFF_CODE 0xFFA25D // -
#define PLUS_CODE 0xFF906F

// initialize the library with the numbers of the interface pins



IRrecv irrecv(RECV_PIN);
decode_results results;
LiquidCrystal lcd (12,11,5,4,3,2); 
int heures,minutes,secondes;
char message[16] ="";

boolean led1 = false;
boolean led2 = false;
boolean led3 = false;
boolean led4 = false;

void setup()
{
  lcd.begin (16,2);
  heures = 15;
  minutes = 30;
  secondes =30;
  pinMode(LED_PIN1, OUTPUT);
  pinMode(LED_PIN2, OUTPUT);
  pinMode(LED_PIN3, OUTPUT);
  pinMode(LED_PIN4, OUTPUT);
  irrecv.enableIRIn(); // Start receiver
  Serial.begin(9600);
 
  lcd.print("bonjour");
  led4 = true;

 digitalWrite(LED_PIN1, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, HIGH);
}


void loop() {
    
   
  


  // If IR message is received
  if (irrecv.decode(&results)) {
 long int decCode = results.value;

Serial.println(decCode);

switch (results.value) {

 case 0xFF30CF:
Serial.println("SOURCE 1");
digitalWrite(LED_PIN4, LOW);
lcd.clear();
{
if (digitalRead(led1) == HIGH);
{
  delay(100);  
led1 = !led1;
digitalWrite (LED_PIN1,led1);
}
if (digitalRead(LED_PIN1)==HIGH)
{
  lcd.print("CD");
}
else if (digitalRead(LED_PIN1)==LOW)
{
  lcd.clear();
lcd.print("CD OFF");
}
}
break;

case 0xFF18E7:
digitalWrite(LED_PIN4, LOW);
Serial.println("SOURCE 2");
lcd.clear();
{
if (digitalRead(led2) == HIGH);
{
  delay(100);  
led2 = !led2;
digitalWrite (LED_PIN2,led2);
}
if (digitalRead(LED_PIN2)==HIGH)
{
  lcd.print("TUNER");
}
else if (digitalRead(LED_PIN2)==LOW)
{
  lcd.clear();
lcd.print("TUNER OFF");
}
}
break;

case 0xFF7A85:
digitalWrite(LED_PIN4, LOW);
Serial.println("SOURCE 3");
lcd.clear();
{
if (digitalRead(led3) == HIGH);
{
  delay(100);  
led3 = !led3;
digitalWrite (LED_PIN3,led3);
}
if (digitalRead(LED_PIN3)==HIGH)
{
  lcd.print("PHONO");
}
else if (digitalRead(LED_PIN3)==LOW)
{
  lcd.clear();
lcd.print("PHONO OFF");
}
}
break;

 case 0xFFA25D:
Serial.println("ON/OFF");
{
  if (digitalRead(led4)==HIGH);
  {
    delay(100);
  led4 = !led4;
 digitalWrite (LED_PIN4,led4);
  }
  if (digitalRead(LED_PIN4)==LOW)
  {
    lcd.clear();
    lcd.print("Hello");
  }
  else if (digitalRead(LED_PIN4)==HIGH)
  {
    digitalWrite(LED_PIN1, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, HIGH);
    lcd.clear();
    lcd.print("Bye");
    delay(250);
    lcd.clear();
    lcd.print("OFF");
}
}
break;


default:

 Serial.println("Waiting ...");

}

irrecv.resume(); // Receive the next value
      
  
}  //on commence par gérer le temps qui passe...
  if(secondes == 60) //une minutes est atteinte ?
  {
    secondes = 0; //on recompte à partir de 0
    minutes++; 
  }
  if(minutes == 60) //une heure est atteinte ?
  {
    minutes = 0;
    heures++;
  }
  if(heures == 24) //une journée est atteinte ?
  {
    heures = 0; 
  }
  
  //met le message dans la chaine à transmettre
  sprintf(message,"Il est %2d:%2d:%2d",heures,minutes,secondes);

  lcd.setCursor(0,1);           //met le curseur en position (0;0) sur l'écran
  
  lcd.write(message);   //envoi le message sur l'écran
  
  delay(1000);          //attend une seconde
  //une seconde s'écoule...
  secondes++;
 }

Maintenant je souhaiterai contrôler un potentiomètre numérique pour le volume. car mon collègue et moi sommes entrain de réaliser une installation Hifi DIY. le code précédant été pour le contrôle des relais pour switcher entre les différentes source et maintenant il me faut la réalisation d'un code pour le contrôle du volume avec un potentiomètre numérique (a base de moteur pas à pas) . je serais prenant si un tel code existe ;) dans notre système Hifi, le préampli sera donc a base d'arduino :grin:

giovanny_galant: Maintenant je souhaiterai contrôler un potentiomètre numérique pour le volume. car mon collègue et moi sommes entrain de réaliser une installation Hifi DIY. le code précédant été pour le contrôle des relais pour switcher entre les différentes source et maintenant il me faut la réalisation d'un code pour le contrôle du volume avec un potentiomètre numérique (a base de moteur pas à pas) . je serais prenant si un tel code existe ;) dans notre système Hifi, le préampli sera donc a base d'arduino :grin:

les exemples de PAP, c'est pas ce qu'il manque sur le web.

infobarquee:

giovanny_galant: Maintenant je souhaiterai contrôler un potentiomètre numérique pour le volume. car mon collègue et moi sommes entrain de réaliser une installation Hifi DIY. le code précédant été pour le contrôle des relais pour switcher entre les différentes source et maintenant il me faut la réalisation d'un code pour le contrôle du volume avec un potentiomètre numérique (a base de moteur pas à pas) . je serais prenant si un tel code existe ;) dans notre système Hifi, le préampli sera donc a base d'arduino :grin:

les exemples de PAP, c'est pas ce qu'il manque sur le web.

C'est même plus fort que ça. La librairie Stepper fait partie de l'installation standard donc il suffit d'aller dans le menu Fichier/Exemples/Stepper/ il y a 4 exemples.

merci, je regarde ça