Saltar la navegación

Cuarto proyecto

En aquest projecte encendrem/apagarem, amb el comandament a distància, 8 leds -en una primera part- i posarem en marxa sons per cada botó.Per la part dels àudios farem referència al Shield d'Elechouse documentat en aquesta web.
Així doncs en aquest projecte ampliarem les informacions de les anteriors activitats amb el comandament Keys i li afegirem la part d'àudio: mp3 des del component d'Elechouse.


remote arxiu 2

Primera part. Sense Shiel MP3

imatge remote a

imatge remote b

Codi primera opció
Encendre i/o apagar 8 leds

//personalitzat per a comandament KEYES
//www.sacosta.org
//nomes llums
#include "IRLremote.h"
const int interruptIR = 0; // Arduino interrupcion 0: Pin 2

uint8_t IRProtocol = 0;  // Variables per a rebre les dades
uint16_t IRAddress = 0;
uint32_t IRCommand = 0;
int durada =100;
int b1=0;
int b2=0;
int b3=0;
int b4=0;
int b5=0;
int b6=0;
int b7=0;
int b8=0;
int b9=0;
int basterisc=0;
//int bcoixi=0;
int fav=0;
int fam=0;
int fd=0;
int fe=0;
//int benter=0;

void setup()
   {    
     Serial.begin(9600);          // canviada a 9600
delay (1000);
//int b1=0;
#define led1 3 //definim a quin pin connectam els leds
#define led2 4
#define led3 5
#define led4 6
#define led5 9
#define led6 10
#define led7 11
#define led8 12
#define led9 13
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led9, OUTPUT);
apagar_tot(); //apaga tots els leds
        IRLbegin<IR_NEC>(interruptIR);
        /*
        Pel que correspon al nostre comandament,
        per estalviar memòria i guanyar velocitat en la decodificació.
        protocolo 3 , IR_NEC hem posat:
        IRLbegin<IR_NEC >(interruptIR);
        per fer-ho més general s'ha de posar
        IRLbegin<IR_ALL>(interruptIR);
        */
   }

void loop() {   
    
     uint8_t oldSREG = SREG;  // aturar les interrupcions
        cli();
        if (IRProtocol)
          {  
              switch (IRCommand) // Clausula switch amb els seus case:
                  { case 0x6897:
                        if (b1==0){
                        Serial.println("1 encen led 1");
                        apagar_tot();
                        digitalWrite(led1, HIGH);
                        b1=1;
                        break;
                        }
                        else{
                         apagar_tot();
                         b1=0;
                         break;
                         }
                        
                    case 0x9867:
                      if (b2==0){
                        Serial.println("2 encen led 2");
                        apagar_tot();
                        digitalWrite(led2, HIGH);
                        b2=1;
                        break;
                      }
                        else{
                         apagar_tot();
                         b2=0;
                         break;
                         }
                    case 0xB04F:
                     if (b3==0){
                        Serial.println("3 encen led 3");
                        apagar_tot();
                        digitalWrite(led3, HIGH);
                        b3=1;
                        break;
                     }
                     else{
                         apagar_tot();
                         b3=0;
                         break;
                         }
                    case 0x30CF:
                     if (b4==0){
                        Serial.println("4 encen led 4");
                        apagar_tot();
                        digitalWrite(led4, HIGH);
                        b4=1;
                        break;
                     }
                        else{
                         apagar_tot();
                         b4=0;
                         break;
                         }
                    case 0x18E7:
                     if (b5==0){
                        Serial.println("5 encen led 5");
                        apagar_tot();
                        digitalWrite(led5, HIGH);
                        b5=1;
                        break;
                     }
                        else{
                         apagar_tot();
                         b5=0;
                         break;
                         }
                     case 0x7A85:
                      if (b6==0){
                        Serial.println("6 encen led 6");
                        apagar_tot();
                        digitalWrite(led6, HIGH);
                        b6=1;
                        break;
                      }
                        else{
                         apagar_tot();
                         b6=0;
                         break;
                         }
                      case 0x10EF:
                       if (b7==0){
                        Serial.println("7 encen led 7");
                        apagar_tot();
                        digitalWrite(led7, HIGH);
                       b7=1;
                        break;
                       }
                        else{
                         apagar_tot();
                         b7=0;
                         break;
                         }
                      case 0x38C7:
                       if (b8==0){
                        Serial.println("8 encen led 8");
                         apagar_tot();
                         digitalWrite(led8, HIGH);
                         b8=1;
                         break;
                       }
                         else{
                         apagar_tot();
                         b8=0;
                         break;
                         }
                     case 0x5AA5:
                      if (b9==0){
                         Serial.println("9 encen led 9");
                          apagar_tot();
                         digitalWrite(led9, HIGH);
                         b9=1;
                         break;
                      }
                      else{
                         apagar_tot();
                         b9=0;
                         break;
                         }
                      
                    case 0x4AB5:
               
                         Serial.println("0 apaga tot");
                         apagar_tot();
                         break;
                         
                      case 0x42BD:
                      if (basterisc==0){
                         Serial.println("Asterisc ho encen tot");
                         encendre_tot();
                          basterisc=1;
                         break;
                      }
                         else{
                         apagar_tot();
                         basterisc=0;
                         break;
                         }                       
                       case 0xC23D:
                         if (fd==0){
                         Serial.println("fletxa dreta encen parell");
                         encendre_parells();
                         fd=1;
                         break;
                         }
                         else{
                         apagar_tot();
                         fd=0;
                         break;
                         }                      
                      case 0x22DD:
                      if (fe==0){
                         Serial.println("fletxa esquerra encen senars");
                         encendre_senars();
                         fe=1;
                         break;
                      }
                      else{
                         apagar_tot();
                         fe=0;
                         break;
                         }
                       case 0x629D:
                       if (fam==0){
                         Serial.println("fletxa amut encen els 5 primers");
                         encendre_5primers();
                         fam=1;
                         break;
                       }
                         else{
                         apagar_tot();
                         fam=0;
                         break;
                         }                       
                      case 0xA857:
                         if (fav==0){
                         Serial.println("fletxa avall encen els 5 darrers");
                         encendre_5darrers();
                         fav=1;
                         break;
                  }
                         else{
                         apagar_tot();
                         fav=0;
                         break;
                         }
                  }
                 delay (durada);
              IRProtocol = 0;
          }
       SREG = oldSREG;
    }
void IREvent(uint8_t protocol, uint16_t address, uint32_t command)
   {
        IRProtocol = protocol;  // Recull valors
        IRAddress = address;
        IRCommand = command;
   }
   void encendre_tot(){//funció encendre tots els leds
   digitalWrite(led1, HIGH);
   digitalWrite(led2, HIGH);
   digitalWrite(led3, HIGH);
   digitalWrite(led4, HIGH);
   digitalWrite(led5, HIGH);
   digitalWrite(led6, HIGH);
   digitalWrite(led7, HIGH);
   digitalWrite(led8, HIGH);
   digitalWrite(led9, HIGH);
   }
    void apagar_tot(){//funció apagar tots els leds
   digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);
   digitalWrite(led3, LOW);
   digitalWrite(led4, LOW);
   digitalWrite(led5, LOW);
   digitalWrite(led6, LOW);
   digitalWrite(led7, LOW);
   digitalWrite(led8, LOW);
   digitalWrite(led9, LOW);
   
   }
   void encendre_parells(){//funció apagar tots els leds
   digitalWrite(led1, LOW);
   digitalWrite(led2, HIGH);
   digitalWrite(led3, LOW);
   digitalWrite(led4, HIGH);
   digitalWrite(led5, LOW);
   digitalWrite(led6, HIGH);
   digitalWrite(led7, LOW);
   digitalWrite(led8, HIGH);
   digitalWrite(led9, LOW);
   
   }
  void encendre_senars(){//funció encendre tots els leds
   digitalWrite(led1, HIGH);
   digitalWrite(led2, LOW);
   digitalWrite(led3, HIGH);
   digitalWrite(led4, LOW);
   digitalWrite(led5, HIGH);
   digitalWrite(led6, LOW);
   digitalWrite(led7, HIGH);
   digitalWrite(led8, LOW);
   digitalWrite(led9, HIGH);
   }
   void encendre_5primers(){//funció apagar tots els leds
   digitalWrite(led1, HIGH);
   digitalWrite(led2, HIGH);
   digitalWrite(led3, HIGH);
   digitalWrite(led4, HIGH);
   digitalWrite(led5, HIGH);
   digitalWrite(led6, LOW);
   digitalWrite(led7, LOW);
   digitalWrite(led8, LOW);
   digitalWrite(led9, LOW);
   
   }
    void encendre_5darrers(){//funció encendre tots els leds
  digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);
   digitalWrite(led3, LOW);
   digitalWrite(led4, LOW);
   digitalWrite(led5, HIGH);
   digitalWrite(led6, HIGH);
   digitalWrite(led7, HIGH);
   digitalWrite(led8, HIGH);
   digitalWrite(led9, HIGH);
   }
  

remote imatge

Si volem que els sons que s'han de sentir siguin els que volem, hem de tenir present que els sons que es posen a la tarja que pujarem al shield mp3 Elechouse han d'estar per ordre. Es a dir, el primer so que es copiarà serà el 0001, el seguent el 0002, etc. Això vol dir que hem d'estar molt segur de l'ordre de la copia de sons i el seu us a la programació

ordre dels sons

També teniu un arxiu per descarregar amb aquests son ja ordenats Link

Codi complet
Encendre/apagar 8 leds i posar en marxa sons per cada botó

//personalitzat per a comandament KEYES
//www.sacosta.org
#include <SoftwareSerial.h>
#include <MP3.h>
SoftwareSerial Geno(7,8); // Rx , Tx
/** defineix mp3 class */
MP3 mp3;

#include "IRLremote.h"
const int interruptIR = 0; // Arduino interrupcion 0: Pin 2

uint8_t IRProtocol = 0;  // Variables per a rebre les dades
uint16_t IRAddress = 0;
uint32_t IRCommand = 0;
int durada =100;

void setup()
   {    Serial.begin(9600);          // canviada a 9600
delay (1000); //s'ha de deixar un segon per estabilitzar shield
  mp3.begin(MP3_SOFTWARE_SERIAL);    // selecciona software serial
 
  /** fixa volum MAX */
 // mp3.volume(0x1F);
 
  /** selecciona MP3 Shield SINGLE mode */
  mp3.set_mode(MP3::SINGLE);

#define led1 3 //definim a quin pin connectam els leds
#define led2 4
#define led3 5
#define led4 6
#define led5 9
#define led6 10
#define led7 11
#define led8 12
#define led9 13
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led9, OUTPUT);
apagar_tot(); //apaga tots els leds
        IRLbegin<IR_NEC>(interruptIR);
        /*
        Pel que correspon al nostre comandament,
        per estalviar memòria i guanyar velocitat en la decodificació.
        protocolo 3 , IR_NEC hem posat:
        IRLbegin<IR_NEC >(interruptIR);
        per fer-ho més general s'ha de posar
        IRLbegin<IR_ALL>(interruptIR);
        */
   }

void loop() {   
    
     uint8_t oldSREG = SREG;  // aturar les interrupcions
        cli();
        if (IRProtocol)
          {  
              switch (IRCommand) // Clausula switch amb els seus case:
                  { case 0x6897:
                        Serial.println("1 encen led 1");
                        apagar_tot();
                        digitalWrite(led1, HIGH);
                        so_1();
                        break;
                    case 0x9867:
                        Serial.println("2 encen led 2");
                        apagar_tot();
                        digitalWrite(led2, HIGH);
                        so_2();
                        break;
                    case 0xB04F:
                        Serial.println("3 encen led 3");
                        apagar_tot();
                        digitalWrite(led3, HIGH);
                        so_3();
                        break;
                    case 0x30CF:
                        Serial.println("4 encen led 4");
                        apagar_tot();
                        digitalWrite(led4, HIGH);
                        so_4();
                        break;
                    case 0x18E7:
                        Serial.println("5 encen led 5");
                        apagar_tot();
                        digitalWrite(led5, HIGH);
                        so_5();
                        break;
                     case 0x7A85:
                        Serial.println("6 encen led 6");
                        apagar_tot();
                        digitalWrite(led6, HIGH);
                        so_6();
                        break;
                      case 0x10EF:
                        Serial.println("7 encen led 7");
                        apagar_tot();
                        digitalWrite(led7, HIGH);
                        so_7();
                        break;
                      case 0x38C7:
                        Serial.println("8 encen led 8");
                         apagar_tot();
                         digitalWrite(led8, HIGH);
                         so_8();
                         break;
                     case 0x5AA5:
                         Serial.println("9 encen led 9");
                          apagar_tot();
                         digitalWrite(led9, HIGH);
                         so_9();
                         break;
                         
                    case 0x4AB5:
                         Serial.println("0 apaga tot");
                         apagar_tot();
                         so_0();
                         break;
                      
                      case 0x42BD:
                         Serial.println("Asterisc ho encen tot");
                         encendre_tot();
                         so_asterisc();
                         break;
                       
                       case 0xC23D:
                         Serial.println("fletxa dreta encen parell");
                         encendre_parells();
                         so_dreta();
                         break;
                      
                      case 0x22DD:
                         Serial.println("fletxa esquerra encen senars");
                         encendre_senars();
                         so_esquerra();
                         break;
                       
                       case 0x629D:
                         Serial.println("fletxa amut encen els 5 primers");
                         encendre_5primers();
                         so_amunt();
                         break;
                      
                      case 0xA857:
                         Serial.println("fletxa avall encen els 5 darrers");
                         encendre_5darrers();
                         so_avall();
                         break;
                  }
                 delay (durada);
              IRProtocol = 0;
          }
       SREG = oldSREG;
    }
void IREvent(uint8_t protocol, uint16_t address, uint32_t command)
   {
        IRProtocol = protocol;  // Recull valors
        IRAddress = address;
        IRCommand = command;
   }
   void encendre_tot(){//funció encendre tots els leds
  digitalWrite(led1, HIGH);
   digitalWrite(led2, HIGH);
   digitalWrite(led3, HIGH);
   digitalWrite(led4, HIGH);
   digitalWrite(led5, HIGH);
   digitalWrite(led6, HIGH);
   digitalWrite(led7, HIGH);
   digitalWrite(led8, HIGH);
   digitalWrite(led9, HIGH);
   }
    void apagar_tot(){//funció apagar tots els leds
   digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);
   digitalWrite(led3, LOW);
   digitalWrite(led4, LOW);
   digitalWrite(led5, LOW);
   digitalWrite(led6, LOW);
   digitalWrite(led7, LOW);
   digitalWrite(led8, LOW);
   digitalWrite(led9, LOW);
   
   }
   void encendre_parells(){//funció apagar tots els leds
   digitalWrite(led1, LOW);
   digitalWrite(led2, HIGH);
   digitalWrite(led3, LOW);
   digitalWrite(led4, HIGH);
   digitalWrite(led5, LOW);
   digitalWrite(led6, HIGH);
   digitalWrite(led7, LOW);
   digitalWrite(led8, HIGH);
   digitalWrite(led9, LOW);
   
   }
  void encendre_senars(){//funció encendre tots els leds
   digitalWrite(led1, HIGH);
   digitalWrite(led2, LOW);
   digitalWrite(led3, HIGH);
   digitalWrite(led4, LOW);
   digitalWrite(led5, HIGH);
   digitalWrite(led6, LOW);
   digitalWrite(led7, HIGH);
   digitalWrite(led8, LOW);
   digitalWrite(led9, HIGH);
   }
   void encendre_5primers(){//funció apagar tots els leds
   digitalWrite(led1, HIGH);
   digitalWrite(led2, HIGH);
   digitalWrite(led3, HIGH);
   digitalWrite(led4, HIGH);
   digitalWrite(led5, HIGH);
   digitalWrite(led6, LOW);
   digitalWrite(led7, LOW);
   digitalWrite(led8, LOW);
   digitalWrite(led9, LOW);
   
   }
    void encendre_5darrers(){//funció encendre tots els leds
  digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);
   digitalWrite(led3, LOW);
   digitalWrite(led4, LOW);
   digitalWrite(led5, HIGH);
   digitalWrite(led6, HIGH);
   digitalWrite(led7, HIGH);
   digitalWrite(led8, HIGH);
   digitalWrite(led9, HIGH);
   }
   void so_1(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x0001);
   delay (2000);
   }
   void so_2(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x0002);
   delay (3000);
   }
   void so_3(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x0003);
   delay (3000);
   }
   void so_4(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x0004);
   delay (3000);
   }
    void so_5(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x0005);
   delay (3000);
   }
   void so_6(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x0006);
   delay (3000);
   }
   void so_7(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x0007);
   delay (3000);
   }
   void so_8(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x0008);
   delay (3000);
   }
    void so_9(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x0009);
   delay (3000);
   }
   void so_0(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x000A);
   delay (3000);
   }
   void so_asterisc(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x000B);
   delay (3000);
   }
   void so_coixi(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x000C);
   delay (3000);
   }
   void so_amunt(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x000D);
   delay (2000);
   }
   void so_avall(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x000E);
   delay (2000);
   }
   void so_dreta(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x000F);
   delay (2000);
   }
   void so_esquerra(){
   mp3.volume(0x1F);
   mp3.play_spi_flash(0x0010);
   delay (3000);
   }