, , 
- ( - IRRecvDump). ( , , — , ).
#include <Wire.h> 
#include <IRremote.h>
#include <EEPROM.h>
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
int RECV_PIN = 6; 
IRrecv irrecv(RECV_PIN);
decode_results results;
byte cfg[16] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
byte mp3stek[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
byte mp3stekpos = 0;
volatile byte busy = 1; 
volatile byte softbusy = 0; 
volatile byte nomer_mp3 = 1; 
volatile unsigned long micros_sp = 0;
volatile byte sz = 0; 
volatile unsigned int sp = 0; 
volatile unsigned int sp20 = 0; 
volatile boolean st = false; 
volatile byte ruka = 1; 
volatile byte dsvet = 0; 
volatile byte gaba = 0; 
volatile byte lastspeed = 0; 
volatile byte lastdsvet = 0; 
volatile byte lastgaba = 0; 
volatile byte lastgabaonoff = 0; 
volatile word gabaonofftimer = 0; 
volatile byte gabaonoffcounter = 0; 
volatile byte speed40 = 38; 
volatile byte speed60 = 58; 
volatile byte speed80 = 78; 
volatile byte speed110 = 108; 
volatile byte unspeed40 = 36; 
volatile byte unspeed60 = 56; 
volatile byte unspeed80 = 76; 
volatile byte unspeed110 = 106; 
volatile byte speed50 = 48; 
volatile byte unspeed50 = 46; 
volatile byte speed70 = 68; 
volatile byte unspeed70 = 66; 
volatile byte speed90 = 88; 
volatile byte unspeed90 = 86; 
volatile byte speed100 = 98; 
volatile byte unspeed100 = 96; 
volatile byte speed120 = 118; 
volatile byte unspeed120 = 116; 
volatile byte speed130 = 128; 
volatile byte unspeed130 = 126; 
volatile byte s40 = 0;
volatile byte s50 = 0;
volatile byte s60 = 0;
volatile byte s70 = 0;
volatile byte s80 = 0;
volatile byte s90 = 0;
volatile byte s100 = 0;
volatile byte s110 = 0;
volatile byte s120 = 0;
volatile byte s130 = 0;
float sensorValue = 0; 
float outputValue = 0;  
void setup()
{
       Serial.begin(9600);
       Serial.println("start programm NEXIA 1.0");
       
        irrecv.enableIRIn(); 
	
	
	
	
        
        pinMode(2, INPUT);	
        digitalWrite(2, HIGH);
        pinMode(3, INPUT);	
        digitalWrite(3, HIGH);
        pinMode(4, INPUT);	
        digitalWrite(4, HIGH);
        pinMode(5, INPUT);	
        digitalWrite(5, HIGH);
        lastgabaonoff = digitalRead(5); 
        attachInterrupt(0,speedometr, RISING);
        cfg[0]=EEPROM.read(5); 
        cfg[1]=EEPROM.read(6); 
        cfg[2]=EEPROM.read(7); 
        cfg[3]=EEPROM.read(8); 
        cfg[4]=EEPROM.read(9); 
        cfg[5]=EEPROM.read(10);
        cfg[6]=EEPROM.read(11);
        cfg[7]=EEPROM.read(12);
        cfg[8]=EEPROM.read(13);
        cfg[9]=EEPROM.read(14);
        cfg[10]=EEPROM.read(15);
        cfg[11]=EEPROM.read(16);
        cfg[12]=EEPROM.read(17);
        cfg[13]=EEPROM.read(18);
        cfg[14]=EEPROM.read(19);
        cfg[15]=EEPROM.read(20);
        
        pinMode(7, INPUT);  
        mp3_set_serial (Serial);    
        mp3setvol();
        delay (100); 
        add_mp3(32); 
       
       analogReference (INTERNAL);
    
        if (cfg[7]==0){voltmetertest();} 
}
void loop()
{
  
    dsvet = digitalRead(3); 
  
      ruka = digitalRead(4); 
  
      gaba = digitalRead(5); 
  
  
  if (sz != 0){sz--;}else{sp20=0;sp=0;};
  delay(50);
  
gabamute(); 
if ((sp20>0)&(ruka==0)) {rukabeep();}
else
{ 
if (dsvet==1) { if ( lastdsvet<200){lastdsvet=lastdsvet+1;};}
if (dsvet==1) { if ((lastdsvet>35)&(lastdsvet<38)){svetbeep();}; }
if (dsvet==0) {lastdsvet=0;};
if ((gaba==0)&&(sp20>0)) { if ( lastgaba<150){lastgaba=lastgaba+1;};}
if ((gaba==0)&&(sp20>0)) { if ((lastgaba>20)&(lastgaba<23)){DHO_beep();}; }
if (gaba==1) {lastgaba=0;};
if (sp20==0) {lastgaba=0;};
if ((lastspeed<speed40)&(sp>=speed40)) {
 if (s40<1) { svet1beep(); s40=1; }};
if ((lastspeed>=unspeed40)&(sp<unspeed40)) {
 if (s40>0) { nsvet1beep(); s40=0; }};
if ((lastspeed<speed50)&(sp>=speed50)) {
 if (s50<1) { svet50beep(); s50=1; }};
if ((lastspeed>=unspeed50)&(sp<unspeed50)) {
 if (s50>0) { nsvet50beep(); s50=0; }};
if ((lastspeed<speed60)&(sp>=speed60)) {
 if (s60<1) { svet2beep(); s60=1; }};
if ((lastspeed>=unspeed60)&(sp<unspeed60)) {
 if (s60>0) { nsvet2beep(); s60=0; }};
if ((lastspeed<speed70)&(sp>=speed70)) {
 if (s70<1) { svet70beep(); s70=1; }}; 
if ((lastspeed>=unspeed70)&(sp<unspeed70)) {
 if (s70>0) { nsvet70beep(); s70=0; }}; 
if ((lastspeed<speed80)&(sp>=speed80)) {
 if (s80<1) { svet3beep(); s80=1; }};
if ((lastspeed>=unspeed80)&(sp<unspeed80)) {
 if (s80>0) { nsvet3beep(); s80=0; }};
if ((lastspeed<speed90)&(sp>=speed90)) {
 if (s90<1) { svet90beep(); s90=1; }};
if ((lastspeed>=unspeed90)&(sp<unspeed90)) {
 if (s90>0) { nsvet90beep(); s90=0; }};
if ((lastspeed<speed100)&(sp>=speed100)) {
 if (s100<1) { svet100beep(); s100=1; }};
if ((lastspeed>=unspeed100)&(sp<unspeed100)) {
 if (s100>0) { nsvet100beep(); s100=0; }};
if ((lastspeed<speed110)&(sp>=speed110)) {
 if (s110<1) { svet4beep(); s110=1; }};
if ((lastspeed>=unspeed110)&(sp<unspeed110)) {
 if (s110>0) { nsvet4beep(); s110=0; }};
if ((lastspeed<speed120)&(sp>=speed120)) {
 if (s120<1) { svet120beep(); s120=1; }};
if ((lastspeed>=unspeed120)&(sp<unspeed120)) {
 if (s120>0) { nsvet120beep(); s120=0; }};
if ((lastspeed<speed130)&(sp>=speed130)) {
 if (s130<1) { svet130beep(); s130=1; }};
if ((lastspeed>=unspeed130)&(sp<unspeed130)) {
 if (s130>0) { nsvet130beep(); s130=0; }};
lastspeed=sp;
delay(50);
}
  
if (mp3stekpos != 0) 
{ busy = digitalRead(7); 
  if (softbusy > 0) softbusy = softbusy-1;
  if ((busy>0) && (softbusy ==0)) 
  {mp3stekpos = mp3stekpos-1;
   nomer_mp3 = mp3stek[1];
   if (cfg[15]==0) {mp3_play (mp3stek[1]);} else {mp3_play (mp3stek[1]+100);} 
   softbusy = 25;   delay(50);
   for (int i=1; i < 9; i++){mp3stek[i]=mp3stek[i+1]; }
   mp3stek[9]= 0;  };}
 if (irrecv.decode(&results)) 
  {
    Serial.println(results.value);
    
    
    
    if ((results.value==2255209021)|| (results.value==2255218711))
    {  cfg[0]=cfg[0]+1;
       if (cfg[0]>2) { cfg[0]=0; };    EEPROM.write(5,cfg[0]);
       if (cfg[0]==0) {add_mp3(5);}; 
       if (cfg[0]==1) {add_mp3(3);}; 
       if (cfg[0]==2) {add_mp3(4);}; }
    
    if ((results.value==2255188111)||(results.value==2155866645))
    {   cfg[1]=cfg[1]+1;
    if (cfg[1]>4) {cfg[1]=4;add_mp3(41);}
    if (cfg[1]==1) {add_mp3(38);}
    if (cfg[1]==2) {add_mp3(39);}
    if (cfg[1]==3) {add_mp3(40);}
    if (cfg[1]==4) {add_mp3(41);}
    mp3setvol();   EEPROM.write(6,cfg[1]);  }
    
    
    if ((results.value==2255210551)||(results.value==2155809015))  
    { if (cfg[1]<1)  {add_mp3(37); }  else  {cfg[1]=cfg[1]-1;}
      if (cfg[1]==1) {add_mp3(38);}
      if (cfg[1]==2) {add_mp3(39);}
      if (cfg[1]==3) {add_mp3(40);}
      mp3setvol();     EEPROM.write(6,cfg[1]);   }
    if (results.value==2255192191)  
    { if (cfg[15]==0){  cfg[15]=1;}  
      else  {           cfg[15]=0;} add_mp3(42);    
      EEPROM.write(20,cfg[15]);    }
    if (results.value==2255222791)    
    { if (cfg[2]==0) {  cfg[2]=1;   add_mp3(18);} 
      else {            cfg[2]=0;   add_mp3(19); }
      EEPROM.write(7,cfg[2]);    }
    if (results.value==2255220751)    
    { if (cfg[3]==0) {  cfg[3]=1;   add_mp3(36); }
      else  {           cfg[3]=0;   add_mp3(35); }
      EEPROM.write(8,cfg[3]);   }
    
    if (results.value==2255200351)    
    {  if (cfg[9]==0) { cfg[9]=1;   add_mp3(65); } 
       else  {          cfg[9]=0;   add_mp3(66); }
       EEPROM.write(14,cfg[9]);    }
    
    if (results.value==2255184031)    
    {  if (cfg[4]==0) { cfg[4]=1;   add_mp3(12); }
       else   {         cfg[4]=0;   add_mp3(13); }
       EEPROM.write(9,cfg[4]);   }
    
    if (results.value==2255171791)    
    {  if (cfg[10]==0) {cfg[10]=1;  add_mp3(45);} 
       else   {         cfg[10]=0;  add_mp3(46); }
       EEPROM.write(15,cfg[10]); }
    
    if (results.value==2255204431)   
    { if (cfg[5]==0) {  cfg[5]=1;   add_mp3(14); }
      else  {           cfg[5]=0;   add_mp3(15); }
      EEPROM.write(10,cfg[5]);   }
    if (results.value==2255179951)    
    { if (cfg[11]==0) {cfg[11]=1;  add_mp3(49);} 
      else {           cfg[11]=0;  add_mp3(50);} 
      EEPROM.write(16,cfg[11]);  }
    if (results.value==2255194231)    
    { if (cfg[12]==0) {cfg[12]=1;  add_mp3(53);} 
      else  {          cfg[12]=0;  add_mp3(54);} 
      EEPROM.write(17,cfg[12]);  }
    if (results.value==2255167711)    
    { if (cfg[6]==0) { cfg[6]=1;   add_mp3(16);} 
      else   {         cfg[6]=0;   add_mp3(17);} 
      EEPROM.write(11,cfg[6]);   }
    if (results.value==2255163631)    
    { if (cfg[13]==0) { cfg[13]=1;  add_mp3(57);} 
      else {            cfg[13]=0;  add_mp3(58);} 
      EEPROM.write(18,cfg[13]);   }
    if (results.value==2255175871)    
    { if (cfg[14]==0) { cfg[14]=1;  add_mp3(61);} 
      else   {          cfg[14]=0;  add_mp3(62);} 
      EEPROM.write(19,cfg[14]);   }
    if ((results.value==2255206471)||(results.value==2155829925)) 
    { if (cfg[7]==0)  { cfg[7]=1;   add_mp3(27);} 
      else    {         cfg[7]=0;   add_mp3(28);  voltmetertest(); }
      EEPROM.write(12,cfg[7]);   }
    
    if (results.value==2255190151)   
    { if (cfg[8]==0) {  cfg[8]=1;   add_mp3(31);} 
      else    {         cfg[8]=0;   add_mp3(30);} 
      EEPROM.write(13,cfg[8]);    }
     
    irrecv.resume(); 
  }
}
void sdisplay(){
 if (ruka==1) {  Serial.print("ruka=off ");}  else{ Serial.print("RUKA=ON  ");}; 
 if (dsvet==1) {  Serial.print("dsvet=off ");}  else{ Serial.print("DSVET=ON  ");};  
 if (gaba==1) {  Serial.print("gaba=off ");}  else{ Serial.print("GABA=ON  ");};  
 Serial.println(" ");
 Serial.print(" speed=");
 Serial.println(sp);
 Serial.println("++++++++++++++++++ END ++++++");
}
void speedometr(){ if (!st){micros_sp = micros();} else {sp20 = (12000000/(micros() - micros_sp));}  sp=sp20/20;  st = !st;  sz=10;}
void rukabeep()    { if  (cfg[2]!=2) {mp3_play (1);} delay(1000);}
void svetbeep()    { if ((cfg[2]==0)&&(cfg[0]==0))   {add_mp3(2);}}
void DHO_beep()    { if ((cfg[8]==0)&&(cfg[0]==0))   {add_mp3(29);}}
void svet1beep()   { if ((cfg[3]==0)&&(cfg[0]==0))   {add_mp3(33);}} 
void nsvet1beep()  { if ((cfg[3]==0)&&(cfg[0]==0))   {add_mp3(34);}} 
void svet50beep()  { if ((cfg[9]==0)&&(cfg[0]==0))   {add_mp3(63);}} 
void nsvet50beep() { if ((cfg[9]==0)&&(cfg[0]==0))   {add_mp3(64);}} 
void svet2beep()   { if ((cfg[4]==0)&&(cfg[0]==0))   {add_mp3(6);}}  
void nsvet2beep()  { if ((cfg[4]==0)&&(cfg[0]==0))   {add_mp3(7);}}  
void svet70beep()  { if ((cfg[10]==0)&&(cfg[0]==0))  {add_mp3(43);}} 
void nsvet70beep() { if ((cfg[10]==0)&&(cfg[0]==0))  {add_mp3(44);}} 
void svet3beep()   { if ((cfg[5]==0)&&(cfg[0]==0))   {add_mp3(8);}}  
void nsvet3beep()  { if ((cfg[5]==0)&&(cfg[0]==0))   {add_mp3(9);}}  
void svet90beep()  { if ((cfg[11]==0)&&(cfg[0]==0))  {add_mp3(47);}} 
void nsvet90beep() { if ((cfg[11]==0)&&(cfg[0]==0))  {add_mp3(48);}} 
void svet100beep() { if ((cfg[12]==0)&&(cfg[0]==0))  {add_mp3(51);}} 
void nsvet100beep(){ if ((cfg[12]==0)&&(cfg[0]==0))  {add_mp3(52);}} 
void svet4beep()   { if ((cfg[6]==0)&&(cfg[0]==0))   {add_mp3(10);}} 
void nsvet4beep()  { if ((cfg[6]==0)&&(cfg[0]==0))   {add_mp3(11);}} 
void svet120beep() { if ((cfg[13]==0)&&(cfg[0]==0))  {add_mp3(55);}} 
void nsvet120beep(){ if ((cfg[13]==0)&&(cfg[0]==0))  {add_mp3(56);}} 
void svet130beep() { if ((cfg[14]==0)&&(cfg[0]==0))  {add_mp3(59);}} 
void nsvet130beep(){ if ((cfg[14]==0)&&(cfg[0]==0))  {add_mp3(60);}} 
void add_mp3(byte nomermp3)
{  if ((mp3stekpos > 8)&&(cfg[0]<2))
  {  if (cfg[0]==0)  { tone (17,1000);  delay(200);  tone (17,1400);  delay(200);  noTone(17);  }}
     else   {  mp3stekpos = mp3stekpos+1;  mp3stek[mp3stekpos] = nomermp3;   }} 
void mp3setvol() 
{if(cfg[1]==0){mp3_set_volume(10);}if(cfg[1]==1){mp3_set_volume(15);}if(cfg[1]==2){mp3_set_volume(20);}if(cfg[1]==3){mp3_set_volume(25);}if(cfg[1]>3){mp3_set_volume(30);}}
void voltmetertest()
{ outputValue = 0; 
  int u_x10 =0 ; 
  int u_x1 =0 ; 
  int u_x0 =0 ;
  for (int iii=0; iii <10 ; iii++) {  outputValue =outputValue + float(analogRead(A0));  delay(100); }
  outputValue =  outputValue/620;
  u_x10=round(outputValue*10); 
  u_x1=floor(u_x10/10); 
  add_mp3(70+u_x1);
  u_x0=u_x10-(10*u_x1);   
  add_mp3(90+u_x0);
}
void gabamute()
{  if (lastgabaonoff==gaba)
{
gabaonofftimer=gabaonofftimer+1;
if (gabaonofftimer>250 ) 
 {
 gabaonofftimer=250;
 gabaonoffcounter=0;
 }
}
else
{
lastgabaonoff=gaba;
if (gabaonoffcounter==0) {gabaonofftimer=0;} 
if (gabaonofftimer<25)
 {
 gabaonoffcounter=gabaonoffcounter+1;
 gabaonofftimer=0;
 if (gabaonoffcounter>5) 
   {
    gabaonoffcounter=0;
    cfg[0]=cfg[0]+1;
    if (cfg[0]>2) { cfg[0]=0; };
    EEPROM.write(5,cfg[0]);
    if (cfg[0]==0) {add_mp3(5);}; 
    if (cfg[0]==1) {add_mp3(3);}; 
    if (cfg[0]==2) {add_mp3(4);}; 
   } }
 else  {   gabaonoffcounter=0;   gabaonofftimer=0; }
}}