, ,
- ( - 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; }
}}