Go Down

Topic: besoin d'aide pour ligne de codes (Read 1 time) previous topic - next topic

giovanny_galant

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 :

Code: [Select]


/*
* 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++;
}


           


 

infobarquee

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 ;)
Code: [Select]
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
AUCUNE AIDE PAR MP

Carolyne

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.

fdufnews



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
Code: [Select]

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;
.........
}

giovanny_galant

Bonjour a tous,

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

Code: [Select]


/*
* 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++;
}


           


 

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 :smiley-mr-green:

infobarquee


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 :smiley-mr-green:

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

fdufnews



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 :smiley-mr-green:

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.

giovanny_galant


Go Up