اردوينو في السيارة. سبر لوحة القيادة

تم تصميم جهاز التحدث لأولئك الذين لا يلاحظون المصابيح الكهربائية على لوحة القيادة ، ويلتقطون أنفسهم بشكل دوري من حقيقة أنه يركب مع فرملة اليد أو شعاع عالي. أو أن سهم عداد السرعة زحف بهدوء إلى الأمام كثيرًا ... نعم ، لقد فعلته بنفسي.

تم اختباره على (على الأرض) Daewoo Nexia N150 ، ولكن يجب أن يعمل على أي جهاز مزود بمقياس سرعة إلكتروني (مستشعر السرعة - 6 نبضات لكل متر ، نوعًا ما مثل المعيار). الصور موحلة بعض الشيء (الهواة):

الصورة

الصورة

الوظيفة:
1. يتحدث بصوت (5 مستويات الصوت) حول الأحداث المختلفة (الأحداث موصوفة أدناه)

أ) ذكر
ب) أنثى

يتم تجميع الأصوات على جهاز كمبيوتر وتسجيلها كمجموعة من ملفات mp3 على بطاقة SD صغيرة. هذا يعني أنه يمكنك استبدالها أو حرقها.

2. يتم إجراء الإعدادات باستخدام جهاز التحكم عن بعد من التلفزيون (أو أي جهاز آخر به عدد كافٍ من الأزرار ، أوصي بشدة بجهاز التحكم عن بعد باستخدام الأزرار من 0 إلى 9). يتم تذكر الإعدادات في وقت التغيير.

3. في حالة تعطل / فقدان وحدة التحكم عن بعد ، يمكن تحويل الكاشف على الفور إلى وضعي "لا أصوات" أو "لا أصوات باستثناء فرملة اليد". لهذا ، يتم استخدام التضمين الثلاثي للأبعاد (الفكرة هي استخدام الأبعاد الوامضة كإشارة تحكم لتكوين المسح من بعض جهاز ضبط سطوع DRL).

أحداث صوتية (صامتة)
- فرملة اليد (إذا كان ضوء فرامل الانتظار مضاء أثناء القيادة)
- يتم تشغيل الضوء العالي (يتم تجاهل الضوء العالي الوامض ، ويحذر مرة واحدة بعد التشغيل ، ثم لا يذكّر حتى يتم تشغيل الضوء العالي)
- قم بتشغيل الأضواء الجارية (إذا بدأت الحركة بدون تشغيل الأبعاد ، فلن تعمل DRL والأخرى القريبة إذا لم يتم تشغيل الأبعاد).
- شبكة الجهد على متن الطائرة (الدقة حتى عشر فولت)
- تجاوز عتبة السرعة 40 ، 50 ، ... 120 ، 130 كم / ساعة.
- تخفيض عتبة السرعة 40 ، 50 ، ... 120 ، 130 كم / ساعة.
- تغيير مستوى الصوت ، تبديل الصوت ، إيقاف / تشغيل كل من الأحداث التي تم التعبير عنها (تشغيل الفولتميتر يؤدي إلى صوت في نفس الوقت).

فيديو مع الترسيم:



التوصيل بالسيارة
1. إلى عداد السرعة - ثلاثة أسلاك دفعة واحدة: الأرض ، +12 (من هنا نأخذ الطاقة إلى الجهاز وبيانات الفولتميتر) ، إشارة من مستشعر السرعة.

2. إلى المصابيح - فرامل الانتظار ، الشعاع الرئيسي ، إضاءة الصك (الأبعاد).

يتم تنسيق المستويات ببساطة شديدة - يتم سحب استنتاجات arduins بواسطة المقاوم الداخلي إلى "1" ، وإشارات مستوى 12V من لوحة العدادات تمر عبر الثنائيات. عندما تذهب اللوحة +12 ، يتم إغلاق الصمام الثنائي - على "log.1" في اردوينو. عندما تنطلق الإشارة من اللوحة - يتم فتح الصمام الثنائي ، يتم تجاهل المقاوم الداخلي ، عند إخراج "log.0" الخاص بـ arduino.

الفولتميتر هو ببساطة مقسم مقاوم لمدخلات تناظرية. النسبة تقريبًا 1:13 ، من الحساب أنه مع أقصى جهد للشبكة الموجودة على متن الطائرة 16 فولت (وضع الطوارئ) ، سيصل ADC إلى حده بإشارة مرجعية تبلغ 1.2 فولت.

تكوين الجهاز
1. Arduino nano v3

رابط علي

2. وحدة MP3 - DFplayer مصغرة

رابط علي

هذه الوحدة في دوائر الإنترنت متصلة باستخدام إشارات tx / rx ، أضفت تحليل إشارة مشغول لالتقاط لحظة انتهاء الصوت بحيث لا يقاطع تنبيه جديد التنبيه الحالي ، ولكنه يدخل في قائمة الانتظار.

3. مضخم PAM8403 (اختياري)

رابط علي

4. لوحة تطوير ، 5 مقاومات (2 على ADC من الفولتميتر ، و 3 على دبابيس DFplayer) ، 4 ديودات (مطابقة مع + 12 فولت) ، بالإضافة إلى زوج من المكثفات و 5 أمبير من نوع استقرار الدائرة الصغيرة LM7805 (لدي محول AMSR DC / DC 7805 ، لأنه كان في الاحتياطي ولم يسخن) ، جرس بيزو (صرير عند امتلاء قائمة انتظار ملفات MP3 ، والمزيد لاستكشاف الأخطاء وإصلاحها) ، وموصلات لتوصيل مستشعر الأشعة تحت الحمراء (مقبس 2.5 في حالتي ، ولكن هذا غير مبدئي) ومكبر الصوت ( أخذت RCA) ، حسنًا ، وموصل للوحة العدادات (أخذت IDC10 ، مع مزاليج على والدي - خفيفة الوزن ومتعددة الأطراف)

البرامج الثابتة:
من نص البرنامج الثابت ، يمكنك بسهولة معرفة مكان وجود جميع الإشارات التي تم تحليلها ، ومكان كتابة رموز وحدة التحكم عن بعد الخاصة بالأشعة تحت الحمراء (يمكنك الحصول عليها باستخدام رسم العرض التوضيحي IRRecvDump). أيضًا ، يتم توضيح لحظات استجابة التعليق الصوتي للسرعات بوضوح بواسطة الثوابت (لاحظ أن السرعات يتم التعبير عنها إلى حد ما في وقت أبكر مما تم تحقيقه بالفعل - من أجل الحصول على وقت للإبطاء دون تجاوز).

#include <Wire.h> //#include <LiquidCrystal_I2C.h> #include <IRremote.h> #include <EEPROM.h> #include <SoftwareSerial.h> #include <DFPlayer_Mini_Mp3.h> int RECV_PIN = 6; //  IR  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; //mp3 busy 0=play 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; //*10 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; //   DHO volatile byte lastgabaonoff = 0; //     volatile word gabaonofftimer = 0; //      volatile byte gabaonoffcounter = 0; //      volatile byte speed40 = 38; // 40 volatile byte speed60 = 58; // 60 volatile byte speed80 = 78; // 80 volatile byte speed110 = 108; // 110 volatile byte unspeed40 = 36; // no 40 volatile byte unspeed60 = 56; // no 60 volatile byte unspeed80 = 76; // no 80 volatile byte unspeed110 = 106; // no 110 volatile byte speed50 = 48; // 50 volatile byte unspeed50 = 46; // no 50 volatile byte speed70 = 68; // 70 volatile byte unspeed70 = 66; // no 70 volatile byte speed90 = 88; // 90 volatile byte unspeed90 = 86; // no 90 volatile byte speed100 = 98; // 100 volatile byte unspeed100 = 96; // no 100 volatile byte speed120 = 118; // 120 volatile byte unspeed120 = 116; // no 120 volatile byte speed130 = 128; // 130 volatile byte unspeed130 = 126; // no 130 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; //LiquidCrystal_I2C lcd(0x3F, 16, 2); float sensorValue = 0; //V float outputValue = 0; //V void setup() { Serial.begin(9600); Serial.println("start programm NEXIA 1.0"); //start IR reciver irrecv.enableIRIn(); // Start the receiver // initialize the LCD //lcd.begin(); // Turn on the blacklight and print a message. //lcd.backlight(); // lcd.print("Hello, world!"); //tone (17,3000); //    D3 pinMode(2, INPUT); //      speed digitalWrite(2, HIGH);//   pinMode(3, INPUT); //      digitalWrite(3, HIGH);//   pinMode(4, INPUT); //      digitalWrite(4, HIGH);//   pinMode(5, INPUT); //      digitalWrite(5, HIGH);//   // pinMode(13, OUTPUT); // lastgabaonoff = digitalRead(5); //gaba attachInterrupt(0,speedometr, RISING); cfg[0]=EEPROM.read(5); //0=all sound 1=no sound(ruka) 2=no sound all cfg[1]=EEPROM.read(6); //volume mp3 0..30 cfg[2]=EEPROM.read(7); //0 = dsvet sound? 1 = no dsvet sound cfg[3]=EEPROM.read(8); //0 = 40sound cfg[4]=EEPROM.read(9); //0 = 60sound cfg[5]=EEPROM.read(10);//0 = 80sound cfg[6]=EEPROM.read(11);//0 = 110 sound cfg[7]=EEPROM.read(12);//0 = Voltmetr sound cfg[8]=EEPROM.read(13);//0 = DHO sound cfg[9]=EEPROM.read(14);//0 = 50sound cfg[10]=EEPROM.read(15);//0 = 70sound cfg[11]=EEPROM.read(16);//0 = 90sound cfg[12]=EEPROM.read(17);//0 = 100sound cfg[13]=EEPROM.read(18);//0 = 120sound cfg[14]=EEPROM.read(19);//0 = 130sound cfg[15]=EEPROM.read(20);//0 = 0, 1=1 // 3 pinMode(7, INPUT); //busy mp3_set_serial (Serial); // mp3_set_volume (25); mp3setvol(); delay (100); add_mp3(32); //   //  analogReference (INTERNAL); // voltmeter(); if (cfg[7]==0){voltmetertest();} //  } void loop() { //   dsvet = digitalRead(3); //    : // if (dsvet==1) { lcd.setCursor(3, 0); lcd.print("DD ");} // else{lcd.setCursor(3, 0); lcd.print("_s ");}; ruka = digitalRead(4); //    : // if (ruka==1) { lcd.setCursor(0, 0); lcd.print("_r ");} // else{lcd.setCursor(0, 0); lcd.print("RR ");}; gaba = digitalRead(5); //    : // if (gaba==1) { lcd.setCursor(6, 0); lcd.print("GG");} // else{lcd.setCursor(6, 0); lcd.print("_g");}; //voltmetertest(); //  // digitalWrite(13, !digitalRead(2)); //  // lcd.setCursor(10, 0); // lcd.print(" "); // lcd.setCursor(10, 0); // lcd.print(sp); // lcd.setCursor(0, 1); // lcd.print(" "); // lcd.setCursor(0, 1); // lcd.print(sp20); if (sz != 0){sz--;}else{sp20=0;sp=0;}; delay(50); // sdisplay(); // 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;}; //    40, 60, 80, 110 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; }}; //.   66/    " 70" - .     . 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); //    }//     // voltmeter(); //  3 if (mp3stekpos != 0) { busy = digitalRead(7); //    7: if (softbusy > 0) softbusy = softbusy-1;// , .. busy    if ((busy>0) && (softbusy ==0)) //   3 {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); // lcd.setCursor(6, 1); // lcd.print(results.value); //  //       0-2 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);}; //sound on if (cfg[0]==1) {add_mp3(3);}; //sound off krome ruka if (cfg[0]==2) {add_mp3(4);}; }//sound off all // V+ -   3 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]); } // V- -   3 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) // sourse -    +100 { 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);} //no dsvet else { cfg[2]=0; add_mp3(19); }//dsvet on EEPROM.write(7,cfg[2]); } if (results.value==2255220751) // 4 -   40 { if (cfg[3]==0) { cfg[3]=1; add_mp3(36); }//40 off else { cfg[3]=0; add_mp3(35); }//40 on EEPROM.write(8,cfg[3]); } if (results.value==2255200351) // 5 -   50 { if (cfg[9]==0) { cfg[9]=1; add_mp3(65); } //50 off else { cfg[9]=0; add_mp3(66); }//50 on EEPROM.write(14,cfg[9]); } if (results.value==2255184031) // 6 -   60 { if (cfg[4]==0) { cfg[4]=1; add_mp3(12); }//60 off else { cfg[4]=0; add_mp3(13); }//60 on EEPROM.write(9,cfg[4]); } if (results.value==2255171791) // 7 -   70 { if (cfg[10]==0) {cfg[10]=1; add_mp3(45);} //70 off else { cfg[10]=0; add_mp3(46); }//70 on EEPROM.write(15,cfg[10]); } if (results.value==2255204431) // 8 -   80 { if (cfg[5]==0) { cfg[5]=1; add_mp3(14); }//80 off else { cfg[5]=0; add_mp3(15); }//80 on EEPROM.write(10,cfg[5]); } if (results.value==2255179951) // 9 -   90 { if (cfg[11]==0) {cfg[11]=1; add_mp3(49);} //90 off else { cfg[11]=0; add_mp3(50);} //90 on EEPROM.write(16,cfg[11]); } if (results.value==2255194231) // 0 -   100 { if (cfg[12]==0) {cfg[12]=1; add_mp3(53);} //100 off else { cfg[12]=0; add_mp3(54);} //100 on EEPROM.write(17,cfg[12]); } if (results.value==2255167711) // 1 -   110 { if (cfg[6]==0) { cfg[6]=1; add_mp3(16);} //110 off else { cfg[6]=0; add_mp3(17);} //110 on EEPROM.write(11,cfg[6]); } if (results.value==2255163631) // 2 -   120 { if (cfg[13]==0) { cfg[13]=1; add_mp3(57);} //120 off else { cfg[13]=0; add_mp3(58);} //120 on EEPROM.write(18,cfg[13]); } if (results.value==2255175871) // 3 -   130 { if (cfg[14]==0) { cfg[14]=1; add_mp3(61);} //130 off else { cfg[14]=0; add_mp3(62);} //130 on EEPROM.write(19,cfg[14]); } if ((results.value==2255206471)||(results.value==2155829925)) // ? -   { if (cfg[7]==0) { cfg[7]=1; add_mp3(27);} //no  else { cfg[7]=0; add_mp3(28); voltmetertest(); }// on EEPROM.write(12,cfg[7]); } if (results.value==2255190151) //  -  DHO { if (cfg[8]==0) { cfg[8]=1; add_mp3(31);} //no DHO else { cfg[8]=0; add_mp3(30);} //DHO on EEPROM.write(13,cfg[8]); } irrecv.resume(); // Receive the next value } } //      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);}} //40 void nsvet1beep() { if ((cfg[3]==0)&&(cfg[0]==0)) {add_mp3(34);}} //n40 void svet50beep() { if ((cfg[9]==0)&&(cfg[0]==0)) {add_mp3(63);}} //50 void nsvet50beep() { if ((cfg[9]==0)&&(cfg[0]==0)) {add_mp3(64);}} //n50 void svet2beep() { if ((cfg[4]==0)&&(cfg[0]==0)) {add_mp3(6);}} //60 void nsvet2beep() { if ((cfg[4]==0)&&(cfg[0]==0)) {add_mp3(7);}} //n60 void svet70beep() { if ((cfg[10]==0)&&(cfg[0]==0)) {add_mp3(43);}} //70 void nsvet70beep() { if ((cfg[10]==0)&&(cfg[0]==0)) {add_mp3(44);}} //n70 void svet3beep() { if ((cfg[5]==0)&&(cfg[0]==0)) {add_mp3(8);}} //80 void nsvet3beep() { if ((cfg[5]==0)&&(cfg[0]==0)) {add_mp3(9);}} //n80 void svet90beep() { if ((cfg[11]==0)&&(cfg[0]==0)) {add_mp3(47);}} //90 void nsvet90beep() { if ((cfg[11]==0)&&(cfg[0]==0)) {add_mp3(48);}} //n90 void svet100beep() { if ((cfg[12]==0)&&(cfg[0]==0)) {add_mp3(51);}} //100 void nsvet100beep(){ if ((cfg[12]==0)&&(cfg[0]==0)) {add_mp3(52);}} //n100 void svet4beep() { if ((cfg[6]==0)&&(cfg[0]==0)) {add_mp3(10);}} //110 void nsvet4beep() { if ((cfg[6]==0)&&(cfg[0]==0)) {add_mp3(11);}} //n110 void svet120beep() { if ((cfg[13]==0)&&(cfg[0]==0)) {add_mp3(55);}} //120 void nsvet120beep(){ if ((cfg[13]==0)&&(cfg[0]==0)) {add_mp3(56);}} //n120 void svet130beep() { if ((cfg[14]==0)&&(cfg[0]==0)) {add_mp3(59);}} //130 void nsvet130beep(){ if ((cfg[14]==0)&&(cfg[0]==0)) {add_mp3(60);}} //n130 //void svet1unbeep(){ tone (17,1000); delay(200); noTone(17);} 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() //    0-4  0-30 {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); // 10 u_x1=floor(u_x10/10); //   add_mp3(70+u_x1); u_x0=u_x10-(10*u_x1); // = 10U-10U 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;} //  // Serial.println(gabaonofftimer); 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);}; //sound on if (cfg[0]==1) {add_mp3(3);}; //sound off krome ruka if (cfg[0]==2) {add_mp3(4);}; //sound off all } } else { gabaonoffcounter=0; gabaonofftimer=0; } }} 


البرامج الثابتة لوحة الخيار
من أجل تصحيح الأخطاء وتصحيحها وعرضها ، تم استخدام أردوينو آخر - arduino uno ووحدة وأزرار شاشة LCD.

إنها تعرف كيفية إعطاء الإشارات - الأبعاد ، والشعاع الرئيسي ، والفرملة اليدوية ، وتغيير السرعة من 0 إلى 150 تقريبًا. من أوجه القصور - لا يوجد قمع لارتداد جهات الاتصال ، ولكن هذه اللحظة لا تزعجني حقًا.

 #include <Wire.h> //    #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7 ); const int rukaPin = 2; //  =  const int dsvetPin = 1; //  = . const int speedPin = 0; //  =   const int gabaPin = 11; // 6 =  int rukaState = 0; //    int dsvetState = 0; //    int speedState = 0; //    int gabaState = 0; //    int speedkm = 0; // / int lowdelay = 250; //     //   int button; const int BUTTON_NONE = 0; const int BUTTON_RIGHT = 1; const int BUTTON_UP = 2; const int BUTTON_DOWN = 3; const int BUTTON_LEFT = 4; const int BUTTON_SELECT = 5; int getPressedButton() { int buttonValue = analogRead(0); //     (A0) if (buttonValue < 60) { return BUTTON_RIGHT; } else if (buttonValue < 200) { return BUTTON_UP; } else if (buttonValue < 400){ return BUTTON_DOWN; } else if (buttonValue < 600){ return BUTTON_LEFT; } else if (buttonValue < 800){ return BUTTON_SELECT; } return BUTTON_NONE; } void setup() { pinMode(rukaPin, OUTPUT); //     pinMode(dsvetPin, OUTPUT); //     pinMode(speedPin, OUTPUT); //     pinMode(gabaPin, OUTPUT); //     lcd.begin(16, 2); lcd.print("starting..."); delay (500); lcd.clear(); lcd.setCursor(12, 0); if(gabaState == 1){lcd.print("G_ON");}else{lcd.print("GOFF");} digitalWrite(gabaPin,gabaState); lcd.setCursor(6, 0); if(dsvetState == 1){lcd.print("D__ON");}else{lcd.print("D_OFF");} digitalWrite(dsvetPin,dsvetState); lcd.setCursor(0, 0); if(rukaState == 0){lcd.print("R__ON");}else{lcd.print("R_OFF");} digitalWrite(rukaPin,rukaState); } void loop() { delay(50); if ((speedState<=36)&(speedState>0)) { lowdelay=500/speedState; digitalWrite(speedPin,1); delay(lowdelay); digitalWrite(speedPin,0); delay(lowdelay); lcd.setCursor(12, 1); lcd.print(lowdelay); lcd.print(" "); } button = getPressedButton(); switch (button) { case BUTTON_RIGHT: //       lcd.setCursor(12, 0); if (gabaState == 0) { gabaState = 1; lcd.print("G_ON "); } else { gabaState = 0; lcd.print("GOFF "); } digitalWrite(gabaPin,gabaState); break; case BUTTON_LEFT: lcd.setCursor(6, 0); if (dsvetState == 0) { dsvetState = 1; lcd.print("D__ON "); } else { dsvetState = 0; lcd.print("D_OFF "); } digitalWrite(dsvetPin,dsvetState); break; case BUTTON_UP: if (speedState<5){speedState=speedState+1;} else {if (speedState<250){speedState=speedState+5;};} lcd.setCursor(0, 1); lcd.print(speedState); speedkm=speedState*0.6; lcd.print(" "); lcd.print(speedkm); lcd.print("km/h "); if (speedState>35){ tone(speedPin,speedState);} else { noTone(speedPin); }; break; case BUTTON_DOWN: if ((speedState<10)&(speedState>0)){speedState=speedState-1;} else { if ((speedState<255)&(speedState>0)){speedState=speedState-5;} } ; lcd.setCursor(0, 1); lcd.print(speedState); speedkm=speedState*0.6; lcd.print(" "); lcd.print(speedkm); lcd.print("km/h "); // if (speedState==0){noTone(speedPin);} else {tone(speedPin,speedState);}; if (speedState>35){ tone(speedPin,speedState);} else { noTone(speedPin); }; break; case BUTTON_SELECT: // lcd.setCursor(0, 0); // lcd.print(" "); lcd.setCursor(0, 0); if (rukaState == 0) { rukaState = 1; lcd.print("R_OFF "); } else { rukaState = 0; lcd.print("R__ON "); } digitalWrite(rukaPin,rukaState); break; } } 

Source: https://habr.com/ru/post/ar401671/


All Articles