Close

Can be combined with battery backup (upgrade_1.2.1)

A project log for Bracelet for the blind

The solution is leveraging from the available stuff, affordable.

tiendoTiendo 10/26/2017 at 15:431 Comment
You can use the phone's spare battery.

Circuit diagram upgrade_1.2.1

Press on/off on "Bracelet for the blind" after plugging the spare battery to use.

Code upgrade_1.2.1

//bracelet_for_the_blind_Upgrade_1.2.1
//tác giả(Author): Đỗ Xuân Tiến - Gmail: doxuantiendx07@gmail.com
#include <EEPROM.h>
const int trig = A1;     //chân trig của HC-SR04
const int echo = A0;     //chân echo của HC-SR04

byte ngon_tay_cai_6 = 6;     //ngón tay - finger
//byte middle_finger = 5;  //ngón tay giữa
//byte ngon_tay_ut_3 = 3;      //ngón tay út - little finger
byte mosfet_9 = 9;     //mosfet
byte coi_chip_5 = 5;  //buzzer
byte led_4 = 4;       //led
byte chan_sac_8 = 8;  //chân bật tắt dòng sạc - D8 to on/off charger
byte button_10 = 10;    //button nguồn: chức năng bat/tat/rung/loa - button: on/off/vibrator/buzzer
byte button_cong_12 = 12; //button " + "
byte button_tru_11 = 11; //button " - "
byte do_volt_pin_A3 = A3; //đo volt pin - A3 to measure the battery voltage
byte volt_cam_sac_A2 = A2; //nhận biết khi cắm điện sạc - A2 to identify the battery charger
 
byte rung_cai = 0; 
byte rung_ut = 0;
byte rung_cai_1 = 0;    
byte rung_cai_2 = 0;
byte rung_ut_1 = 0;     
byte rung_ut_2 = 0;
byte che_do_rung = 0; 
byte khong_lap = 0;   
byte sau_tha_nut = 0;
byte khong_lap_12 = 0;    
byte sau_tha_nut_12 = 0;   
byte khong_lap_11 = 0;   
byte sau_tha_nut_11 = 0; 
//byte khoa_bao_dong = 0;    
byte loa1 = 0;  
byte loa2 = 0; 
byte den1 = 0;  
byte den2 = 0;
byte sac_1 = 0;  
byte sac_2 = 0;   
byte tat = 0;  //biến giúp khi rút sạc thì tắt - Turn off the power when not charging
byte EP_1lan1 = 0;   
byte EP_1lan2 = 0;   
byte EP_1lan3 = 0;  
byte EP_1lan4 = 0;   
byte EP_1lan5 = 0;
byte hieu_so_bd = 0; 
byte EP_1lan1_khoangcach = 0;   
byte EP_1lan2_khoangcach = 0;   
byte EP_1lan3_khoangcach = 0;
byte dk_kc = 0;
byte cau_hinh_kc = 0;  
byte charging = 0; 
byte charging_1lan = 0; 

int dovolt_out = 0;
int dovolt_pin = 0; 
float volt_pin = 0;

unsigned long pe_rung = 0;
unsigned long pe_rung_cai_1 = 0;   
unsigned long pe_rung_cai_2 = 0; 
unsigned long pe_rung_ut_1 = 0;    
unsigned long pe_rung_ut_2 = 0;
unsigned long pe_loa1 = 0;   
unsigned long pe_loa2 = 0; 
unsigned long pe_nhanli = 0;
unsigned long pe_nhanli_12 = 0;   
unsigned long pe_nhanli_11 = 0;
unsigned long pe11 = 0;   
unsigned long pe12 = 0;
unsigned long pe11_sac = 0;  
unsigned long pe12_sac = 0;
unsigned long pe_volt_battery = 0;         
unsigned long thoi_gian = 0;  // biến đo thời gian - Time variable
unsigned long khoang_cach = 0;  // biến lưu khoảng cách - Distance variable
unsigned long khoang_cach_bao_dong = 0; 
unsigned long tong_khoang_cach = 0;  
unsigned long so_lan_do = 0;
unsigned long hieu_so = 0;
unsigned long pe_hieu_so = 0;   
unsigned long nghi_sac_15p = 0;  
unsigned long sac_duy_tri = 0;

   
int GT_button = 0;
int GT_button_000 = 0;
int GT_button_cong_12_000 = 0;  
int GT_button_tru_11_000 = 0;   
int time_x = 0;
int GT_button_cong_12 = 0;  //+
int GT_button_tru_11 = 0;   //-   
int do_rung = 0; //độ rung mạnh  
int do_am = 0; //độ to của âm 
int n_khoang_cach = 200; 

void(* resetFunc) (void) = 0;//cài đặt hàm reset

void delay_0 (unsigned long giay)  // hàm delay mới dùng trong "mode sạc pin"                                          
{   
  unsigned long pe_delay_0 = millis();
 while(millis() - pe_delay_0 <= giay){         
  GT_button = digitalRead(button_10);
  if(GT_button == 1){charging = 1; nghi_sac_15p = nghi_sac_15p + 600000; delay(1000); tat = 0; break;}  //ấn button để vừa dùng vừa sạc
  }
}
  
void tien_sacpin (unsigned long giay)
{ 
  unsigned long peham_sac = millis(); 
  while((millis() - peham_sac <= giay) && (dovolt_out >= 650) && (tat == 1)){
        //đo volt ngoài 
        dovolt_out = analogRead(volt_cam_sac_A2);
        //Serial.println(dovolt_out);                                          
        //nháy đèn
        if((den1 == 0) && (millis() - pe12 >= 150)){pe11 = millis(); digitalWrite(led_4,HIGH); den1 = 1; den2 = 0;}   
        if((den2 == 0) && (millis() - pe11 >= 150)){pe12 = millis(); digitalWrite(led_4,LOW); den2 = 1; den1 = 0; }  

        //sạc 1000ms nghỉ 100ms(or 1000ms/500ms), giảm nhiệt độ(or 1000ms/500ms)
        if((sac_1 == 0) && (millis() - pe12_sac >= 100)){pe11_sac = millis(); digitalWrite(chan_sac_8,HIGH); sac_1 = 1; sac_2 = 0;}   
        if((sac_2 == 0) && (millis() - pe11_sac >= 1000)){pe12_sac = millis(); digitalWrite(chan_sac_8,LOW); sac_2 = 1; sac_1 = 0; }  
        
        //2 button + -
        GT_button_cong_12 = digitalRead(button_cong_12);
        GT_button_tru_11 = digitalRead(button_tru_11);

        //nhấn lỳ 2 nút + - để khởi động chế độ báo động
        if (GT_button_cong_12 != GT_button_cong_12_000)    
          { GT_button_cong_12_000 = GT_button_cong_12;                              
          pe_nhanli_12 = millis();              
          }
        if (GT_button_tru_11 != GT_button_tru_11_000) 
          { GT_button_tru_11_000 = GT_button_tru_11;                              
          pe_nhanli_11 = millis();              
          }
          //thoát khỏi vòng while khi ấn 2 nút + - , sau đó vào ngay chế độ báo động
          //if ((GT_button_cong_12 == 1) && (GT_button_tru_11 == 1) && (millis() - pe_nhanli_12 > 3000) && (millis() - pe_nhanli_11 > 3000)){khoa_bao_dong = 1; tat = 0;}     
        //ấn button để vừa dùng vừa sạc
        GT_button = digitalRead(button_10);
        if(GT_button == 1){charging = 1; nghi_sac_15p = nghi_sac_15p + 600000; delay(1500); tat = 0; break;}    
  }
}
void tien_sacpin_nghi (unsigned long giay)
{ 
  unsigned long peham_sac = millis(); 
  while((millis() - peham_sac <= giay) && (dovolt_out >= 650) && (tat == 1)){
        //đo volt ngoài 
        dovolt_out = analogRead(volt_cam_sac_A2);                                          
        //nháy đèn
        if((den1 == 0) && (millis() - pe12 >= 100)){pe11 = millis(); digitalWrite(led_4,HIGH); den1 = 1; den2 = 0; }   
        if((den2 == 0) && (millis() - pe11 >= 3000)){pe12 = millis(); digitalWrite(led_4,LOW); den2 = 1; den1 = 0; }  
        
        //2 button + -
        GT_button_cong_12 = digitalRead(button_cong_12);
        GT_button_tru_11 = digitalRead(button_tru_11);

        //nhấn lỳ 2 nút + - để khởi động chế độ báo động
        if (GT_button_cong_12 != GT_button_cong_12_000)    
          { GT_button_cong_12_000 = GT_button_cong_12;                              
          pe_nhanli_12 = millis();              
          }
        if (GT_button_tru_11 != GT_button_tru_11_000) 
          { GT_button_tru_11_000 = GT_button_tru_11;                              
          pe_nhanli_11 = millis();              
          }
          //thoát khỏi vòng while khi ấn 2 nút + - , sau đó vào ngay chế độ báo động
          //if ((GT_button_cong_12 == 1) && (GT_button_tru_11 == 1) && (millis() - pe_nhanli_12 > 3000) && (millis() - pe_nhanli_11 > 3000)){khoa_bao_dong = 1; tat = 0;}     
        //ấn button để vừa dùng vừa sạc
        GT_button = digitalRead(button_10);
        if(GT_button == 1){charging = 1; nghi_sac_15p = nghi_sac_15p + 600000; delay(1500); tat = 0; break;}    
  }
} 
void setup()
{
    pinMode(mosfet_9,OUTPUT);
    digitalWrite(mosfet_9,HIGH);
    
    Serial.begin(9600);     // giao tiếp Serial với baudrate 9600
    pinMode(trig,OUTPUT);   // chân trig sẽ phát tín hiệu
    pinMode(coi_chip_5,OUTPUT);
    pinMode(ngon_tay_cai_6,OUTPUT);
    //pinMode(ngon_tay_ut_3,OUTPUT);
    pinMode(chan_sac_8,OUTPUT);
    pinMode(led_4,OUTPUT);
    pinMode(echo,INPUT);    // chân echo sẽ nhận tín hiệu
    pinMode(button_10,INPUT);
    pinMode(button_tru_11,INPUT);
    pinMode(button_cong_12,INPUT);
    pinMode(volt_cam_sac_A2,INPUT);    
    pinMode(do_volt_pin_A3,INPUT);
    
    delay(6000);
     
    che_do_rung = EEPROM.read(6);
    delay(100);
    if((che_do_rung != 1) && (che_do_rung != 0)){delay(1000); EEPROM.write(6, 0); delay(1000); che_do_rung = EEPROM.read(6);}      //quan trọng, chỉ dùng 1 lần trong đời chíp - Only run once
    
    EP_1lan1 = EEPROM.read(31);   
    EP_1lan2 = EEPROM.read(32);
    EP_1lan3 = EEPROM.read(33);
    EP_1lan4 = EEPROM.read(34);
    EP_1lan5 = EEPROM.read(35);
    delay(100);
    if((EP_1lan1 != 111) or (EP_1lan2 != 112) or (EP_1lan3 != 113) or (EP_1lan4 != 114) or (EP_1lan5 != 115)){                     //quan trọng, chỉ dùng 1 lần trong đời chíp - Only run once
      delay(50); EEPROM.write(12, 0); delay(50); EEPROM.write(12, 150); 
      delay(50); EEPROM.write(18, 0); delay(50); EEPROM.write(18, 155); 
      delay(50); EEPROM.write(31, 0); delay(20); EEPROM.write(32, 0); delay(20); EEPROM.write(33, 0); delay(20); EEPROM.write(34, 0); delay(20); EEPROM.write(35, 0); 
      delay(50); EEPROM.write(31, 111); delay(20); EEPROM.write(32, 112); delay(20); EEPROM.write(33, 113); delay(20); EEPROM.write(34, 114); delay(20); EEPROM.write(35, 115); 
      delay(50);
      }
      
    do_rung = EEPROM.read(12); //độ rung mạnh của mô tơ - the strength of the motor
    do_am = EEPROM.read(18); //độ to của âm thanh - the strength of the sound
    
    EP_1lan1_khoangcach = EEPROM.read(54);   
    EP_1lan2_khoangcach = EEPROM.read(55);
    EP_1lan3_khoangcach = EEPROM.read(56);
    delay(20);
    if((EP_1lan1_khoangcach != 111) or (EP_1lan2_khoangcach != 112) or (EP_1lan3_khoangcach != 113))
        {
        delay(20); EEPROM.write(39, 0);
        delay(20); EEPROM.write(54, 0); delay(20); EEPROM.write(55, 0); delay(20); EEPROM.write(56, 0); 
        delay(20); EEPROM.write(54, 111); delay(20); EEPROM.write(55, 112); delay(20); EEPROM.write(56, 113); delay(20);
         }
    dk_kc = EEPROM.read(39);
    delay(20);
    n_khoang_cach = n_khoang_cach + (dk_kc * 50);
}
 
void loop()
{ 
  //Measure battery voltage every minute, If the battery voltage is less than 3.6v then power off
  //đo điện áp pin mỗi phút, nếu áp nhỏ hơn 3.47v(tức 3.6v) thì tắt thiết bị, để bảo vệ pin và đảm bảo cho thiết bị hoạt động chính xác
  
  if((charging == 1) && (millis() - pe_volt_battery >= 58000) && (volt_pin <= 4)){digitalWrite(chan_sac_8,HIGH);}
  if(millis() - pe_volt_battery >= 60000){
                                    pe_volt_battery = millis();
                                    digitalWrite(led_4,LOW);
                                    digitalWrite(chan_sac_8,LOW);
                                    analogWrite(ngon_tay_cai_6,0);  
                                    //analogWrite(ngon_tay_ut_3,0);
                                    delay(30); 
                                    analogWrite(coi_chip_5,0);
                                    delay(200);
                                    
                                    dovolt_pin = analogRead(do_volt_pin_A3);
                                    volt_pin = dovolt_pin / 1023.0 * 5.0;
                                    Serial.println(volt_pin);
                                    if(volt_pin <= 3.45){digitalWrite(mosfet_9,LOW); delay(30000);}
                                    if((charging == 1) && (charging_1lan == 0) && (volt_pin <= 4)){charging_1lan = 1; digitalWrite(chan_sac_8,HIGH);}                                                                    
        }

  if((charging == 1) && (charging_1lan == 1) && (millis() - pe_volt_battery >= 62000) && (volt_pin <= 4)){charging_1lan = 0; digitalWrite(chan_sac_8,LOW);}      
  
//đo analog_volt ngoài - Check whether the charger is charging or not 
  dovolt_out = analogRead(volt_cam_sac_A2);                                          
  
  //Serial.println(dovolt_out);
  //Serial.println(volt_pin);

//vừa sạc vừa dùng - Use the device at the same time as charging the battery
  //if((charging == 1) && (dovolt_out < 650) && (volt_pin <= 4.05) && (millis() - sac_duy_tri >= 60000)){digitalWrite(chan_sac_8,HIGH); sac_duy_tri = millis();}
  //if((charging == 1) && (dovolt_out < 650) && (volt_pin <= 4.05) && (millis() - sac_duy_tri >= 62000)){digitalWrite(chan_sac_8,LOW); sac_duy_tri = millis();}
  
  if((dovolt_out >= 650) && (charging == 1) && (volt_pin <= 4.05) && (millis() - nghi_sac_15p >= 900000)){digitalWrite(chan_sac_8,HIGH); } 
  if((volt_pin > 4.05) && (charging == 1)){nghi_sac_15p = millis(); }  
  
//chế độ sạc pin - Battery charging mode
  if((dovolt_out >= 650) && (charging == 0)){tat = 1;  //biến giúp khi rút sạc thì tắt - "tat = 1: Turn off the power when not charging"                       
                        digitalWrite(coi_chip_5,LOW);
                        analogWrite(ngon_tay_cai_6,0);
                        //analogWrite(ngon_tay_ut_3,0);                        
                        while(tat == 1){                                       
                                        digitalWrite(led_4,LOW);    
                                        digitalWrite(chan_sac_8,LOW);   
                                        delay_0(1000);
  
                                        //đo volt ngoài - Check whether the charger is charging or not  
                                        dovolt_out = analogRead(volt_cam_sac_A2); 
                                        Serial.println(dovolt_out);                                         
                                        if(dovolt_out < 650){digitalWrite(mosfet_9,LOW);delay(5000);}
                                         else{digitalWrite(mosfet_9,HIGH);}
                                        //đo volt pin - Measure the battery voltage 
    
                                        dovolt_pin = analogRead(do_volt_pin_A3);                                          
                                        volt_pin = dovolt_pin / 1023.0 * 5.0;  
                                        Serial.println("pin_1");
                                        Serial.println(volt_pin);
                                        Serial.println("pin_2");
                                        if(volt_pin <= 4.07){ digitalWrite(chan_sac_8,HIGH); delay_0(2000); tien_sacpin(58000); } //trừ đi áp hao hụt 0.13v do mosfet
                                          else{tien_sacpin_nghi(300000);}
                                      
                                        }
                          }


    if((den1 == 0) && (millis() - pe12 >= 500)){ digitalWrite(led_4,HIGH); den1 = 1; den2 = 0; pe11 = millis(); }   
    if((den2 == 0) && (millis() - pe11 >= 500)){ digitalWrite(led_4,LOW); den2 = 1; den1 = 0; pe12 = millis(); }

//chế độ không sạc pin - No battery charging mode  
if((dovolt_out < 650) or (charging == 1)){
                                               
  GT_button_cong_12 = digitalRead(button_cong_12);
  GT_button_tru_11 = digitalRead(button_tru_11);

//nhấn lỳ 2 nút + - để khởi động chế độ  cấu hình khoảng cách
  if (GT_button_cong_12 != GT_button_cong_12_000)    
     { GT_button_cong_12_000 = GT_button_cong_12;                              
       pe_nhanli_12 = millis();              
      }
  if (GT_button_tru_11 != GT_button_tru_11_000) 
     { GT_button_tru_11_000 = GT_button_tru_11;                              
       pe_nhanli_11 = millis();              
      }

//vào chế độ cấu hình khoảng cách - distance configuration mode
  cau_hinh_kc = 0;       
  if ((GT_button_cong_12 == 1) && (GT_button_tru_11 == 1) && (millis() - pe_nhanli_12 > 3000) && (millis() - pe_nhanli_11 > 3000))
   {
    analogWrite(ngon_tay_cai_6,0);  
    //analogWrite(ngon_tay_ut_3,0);
    digitalWrite(led_4,HIGH);
    for(int i = 0; i < 3; i++){digitalWrite(coi_chip_5,HIGH);delay(1000); digitalWrite(coi_chip_5,LOW);delay(1000);} delay(2000); 
    
    while(cau_hinh_kc == 0){
                                                   
      GT_button_cong_12 = digitalRead(button_cong_12);
      GT_button_tru_11 = digitalRead(button_tru_11);
      
      GT_button = digitalRead(button_10);
      if(GT_button == 1){cau_hinh_kc = 1; delay(1000);}

   //nhấn nốt " + " để tăng cấu hình khoảng cách 
      if((GT_button_cong_12 == 1) && (khong_lap_12 == 0)){  
                                                           dk_kc = EEPROM.read(39); khong_lap_12 = 1; sau_tha_nut_12 = 1; 
                                                           if(dk_kc == 0){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 1); delay(5); n_khoang_cach = 250;
                                                             for(int i = 0; i < 1; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}}
                                                           if(dk_kc == 1){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 2); delay(5); n_khoang_cach = 300;
                                                             for(int i = 0; i < 2; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}}
                                                           if(dk_kc == 2){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 3); delay(5); n_khoang_cach = 350;
                                                             for(int i = 0; i < 3; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}}
                                                           if(dk_kc == 3){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 4); delay(5); n_khoang_cach = 400;
                                                             for(int i = 0; i < 4; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}}
                                                           if(dk_kc == 4){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 5); delay(5); n_khoang_cach = 450;
                                                             for(int i = 0; i < 5; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}}
                                                           if(dk_kc == 5){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 6); delay(5); n_khoang_cach = 500;
                                                             for(int i = 0; i < 6; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}}                                                                                                                                                                                                                 
                                                       }
      if((GT_button_cong_12 == 0) && (sau_tha_nut_12 == 1)){khong_lap_12 = 0; sau_tha_nut_12 = 0;}
                            
   //nhấn nốt " - " để giảm cấu hình khoảng cách
      if((GT_button_tru_11 == 1) && (khong_lap_11 == 0)){ 
                                                          dk_kc = EEPROM.read(39);  khong_lap_11 = 1; sau_tha_nut_11 = 1; 
                                                          if(dk_kc == 6){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 5); delay(5); n_khoang_cach = 450;
                                                             for(int i = 0; i < 5; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} 
                                                          if(dk_kc == 5){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 4); delay(5); n_khoang_cach = 400;
                                                             for(int i = 0; i < 4; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} 
                                                          if(dk_kc == 4){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 3); delay(5); n_khoang_cach = 350;
                                                             for(int i = 0; i < 3; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} 
                                                          if(dk_kc == 3){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 2); delay(5); n_khoang_cach = 300;
                                                             for(int i = 0; i < 2; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} 
                                                          if(dk_kc == 2){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 1); delay(5); n_khoang_cach = 250;
                                                             for(int i = 0; i < 1; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} 
                                                          if(dk_kc == 1){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 0); delay(5); n_khoang_cach = 200;}                                                                                                                                                      
                                                        }
      if((GT_button_tru_11 == 0) && (sau_tha_nut_11 == 1)){khong_lap_11 = 0; sau_tha_nut_11 = 0;} 
                       
                            } 
     
    }

  
  //nhấn nốt " + " để tăng rung hoặc tăng âm thanh - Press " + " to increase motor power or sound strength 
  if((GT_button_cong_12 == 1) && (khong_lap_12 == 0)){ do_rung = EEPROM.read(12); do_am = EEPROM.read(18); khong_lap_12 = 1; sau_tha_nut_12 = 1; 
                                                       if((do_rung <= 240) && (che_do_rung == 0)){delay(5); EEPROM.write(12, 0); delay(10); EEPROM.write(12, do_rung + 10);}
                                                       if((do_am <= 245) && (che_do_rung == 1)){delay(5); EEPROM.write(18, 0); delay(10); EEPROM.write(18, do_am + 10);} 
                                                       
                                                        delay(5);
                                                        do_rung = EEPROM.read(12); //độ rung mạnh của mô tơ - the strength of the motor
                                                        do_am = EEPROM.read(18); //độ to của âm thanh - the strength of the sound
                                                        //Serial.println(do_am);
                                                       }
  if((GT_button_cong_12 == 0) && (sau_tha_nut_12 == 1)){khong_lap_12 = 0; sau_tha_nut_12 = 0;}

  //nhấn nốt " - " để giảm rung hoặc giảm âm thanh - Press " - " to decrease motor power or sound strength
  if((GT_button_tru_11 == 1) && (khong_lap_11 == 0)){ do_rung = EEPROM.read(12); do_am = EEPROM.read(18); khong_lap_11 = 1; sau_tha_nut_11 = 1; 
                                                       if((do_rung >= 70) && (che_do_rung == 0)){delay(5); EEPROM.write(12, 0); delay(10); EEPROM.write(12, do_rung - 10);}
                                                       if((do_am >= 15) && (che_do_rung == 1)){delay(5); EEPROM.write(18, 0); delay(10); EEPROM.write(18, do_am - 10);} 
                                                       
                                                        delay(5);
                                                        do_rung = EEPROM.read(12); //độ rung mạnh của mô tơ - the strength of the motor
                                                        do_am = EEPROM.read(18); //độ to của âm thanh - the strength of the sound
                                                       }
  if((GT_button_tru_11 == 0) && (sau_tha_nut_11 == 1)){khong_lap_11 = 0; sau_tha_nut_11 = 0;}

  //nhấn lỳ 3s để tắt nguồn - Hold down for 3 seconds to turn off    
      GT_button = digitalRead(button_10);      
  if (GT_button != GT_button_000) 
     { GT_button_000 = GT_button;                              
       pe_nhanli = millis();              
      }
  if ((GT_button == 1) && (millis() - pe_nhanli > 3000)){analogWrite(coi_chip_5,do_am); digitalWrite(led_4,HIGH); 
                                                         analogWrite(ngon_tay_cai_6,do_rung); delay(500); analogWrite(coi_chip_5,0);
                                                         delay(2500); digitalWrite(mosfet_9,LOW); delay(5000); resetFunc(); delay(60000);}

  //nhấn nhanh để chuyển đỗi gữa loa và rung, Đọc trạng thái button để bật loa hoặc bật rung - Quick click to switch speakers and vibrate
 GT_button = digitalRead(button_10);   
   
 if((GT_button == 1) && (khong_lap == 0)){ khong_lap = 1; sau_tha_nut = 1; }  
  
 if((GT_button == 0) && (sau_tha_nut == 1)){sau_tha_nut = 0; khong_lap = 0; che_do_rung = EEPROM.read(6);delay(10);
                                            if(che_do_rung == 1){delay(50); EEPROM.write(6, 0); delay(50);}
                                              else{delay(50); EEPROM.write(6, 1); delay(50); }
                                              che_do_rung = EEPROM.read(6); }


    /* Phát xung từ chân trig */
    delay(50);  //delay tránh nhiễu sóng siêu âm
    digitalWrite(trig,0);   // tắt chân trig
    delayMicroseconds(2);
    digitalWrite(trig,1);   // phát xung từ chân trig
    delayMicroseconds(5);   // xung có độ dài 5 microSeconds
    digitalWrite(trig,0);   // tắt chân trig
    
    /* Tính toán thời gian */ // - Calculate time 
    thoi_gian = pulseIn(echo,HIGH);

    // Tính khoảng cách đến vật. - Calculate the distance to the object
    khoang_cach = int(thoi_gian/2/29.412);
    
    //Serial.print(khoang_cach);
    //Serial.println("cm");

    //if(khoang_cach <= 130)                         {rung_cai = 1; rung_ut = 0; pe_rung = millis();}
    //if((khoang_cach > 130) && (khoang_cach <= n_khoang_cach)){rung_cai = 0; rung_ut = 1; pe_rung = millis();}
    //  else{if(millis() - pe_rung >= 1000){rung_cai = 0; rung_ut = 0;}}

//chế độ rung ngón tay - finger vibration mode
if(che_do_rung == 0){
    if(millis() - pe_loa1 >= 50){analogWrite(coi_chip_5,0);}

    if(khoang_cach <= n_khoang_cach){ time_x = (4 * khoang_cach);
                            if((rung_cai_1 == 0) && (millis() - pe_rung_cai_2 >= time_x)){pe_rung_cai_1 = millis();analogWrite(ngon_tay_cai_6,do_rung); rung_cai_1 = 1; rung_cai_2 = 0; }   
                            if((rung_cai_2 == 0) && (millis() - pe_rung_cai_1 >= 100))   {pe_rung_cai_2 = millis();analogWrite(ngon_tay_cai_6,0); rung_cai_2 = 1; rung_cai_1 = 0; }
     }
      else{analogWrite(ngon_tay_cai_6,0); }
      
    // rung nhẹ ngón tay cái - Motor vibration on the thumb
    //if(rung_cai == 1){if((rung_cai_1 == 0) && (millis() - pe_rung_cai_2 >= 100)){pe_rung_cai_1 = millis();analogWrite(ngon_tay_cai_6,do_rung); rung_cai_1 = 1; rung_cai_2 = 0;}   //rung có nhịp
    //                  if((rung_cai_2 == 0) && (millis() - pe_rung_cai_1 >= 300)){pe_rung_cai_2 = millis();analogWrite(ngon_tay_cai_6,0); rung_cai_2 = 1; rung_cai_1 = 0; }
    //  }
    //  else{analogWrite(ngon_tay_cai_6,0); }  
    
    // rung nhẹ ngón tay út - Vibration motor on the little finger 
    //if(rung_ut == 1){if((rung_ut_1 == 0) && (millis() - pe_rung_ut_2 >= 100)){pe_rung_ut_1 = millis();analogWrite(ngon_tay_ut_3,do_rung); rung_ut_1 = 1; rung_ut_2 = 0; }   //rung có nhịp - Vibration motor feel comfortable
    //                 if((rung_ut_2 == 0) && (millis() - pe_rung_ut_1 >= 300)){pe_rung_ut_2 = millis();analogWrite(ngon_tay_ut_3,0); rung_ut_2 = 1; rung_ut_1 = 0; }
    // }
    //  else{analogWrite(ngon_tay_ut_3,0); }
   }

//chế độ phát loa, nháy loa nhanh dần khi khoảng cách giảm dần - Sound mode
  else{
    analogWrite(ngon_tay_cai_6,0);
    //analogWrite(ngon_tay_ut_3,0);

    if(khoang_cach <= n_khoang_cach){ time_x = (2 * khoang_cach) + (khoang_cach / 2);
                            if((loa1 == 0) && (millis() - pe_loa2 >= time_x)){pe_loa1 = millis();analogWrite(coi_chip_5,do_am); loa1 = 1; loa2 = 0; }   
                            if((loa2 == 0) && (millis() - pe_loa1 >= 50))    {pe_loa2 = millis();analogWrite(coi_chip_5,0); loa2 = 1; loa1 = 0; }
     }
      else{if(millis() - pe_loa1 >= 30){analogWrite(coi_chip_5,0);}}

    //nháy loa nhanh khi khoảng cách đến vật khoảng 1m
    //if(rung_cai == 1){ if((loa1 == 0) && (millis() - pe_loa2 >= 60)){pe_loa1 = millis();digitalWrite(coi_chip_10,HIGH); loa1 = 1; loa2 = 0;}   
    //                   if((loa2 == 0) && (millis() - pe_loa1 >= 60)){pe_loa2 = millis();digitalWrite(coi_chip_10,LOW); loa2 = 1; loa1 = 0; }}

    //nháy loa chậm khi khoảng cách đến vật từ 1m đến 2.8m
    //if(rung_ut == 1) { if((loa1 == 0) && (millis() - pe_loa2 >= 500)){pe_loa1 = millis();digitalWrite(coi_chip_10,HIGH); loa1 = 1; loa2 = 0;}   
    //                   if((loa2 == 0) && (millis() - pe_loa1 >= 80)){pe_loa2 = millis();digitalWrite(coi_chip_10,LOW); loa2 = 1; loa1 = 0; }}
    //
    //if((rung_cai == 0) && (rung_ut == 0)){if(millis() - pe_loa1 >= 60){digitalWrite(coi_chip_10,LOW);}}
        
   }                                   
 }
 
}

Discussions

Lee Ryan wrote 05/01/2019 at 02:36 point

bạn cho hỏi có thể thay arduino pro mini bằng loại nào nhỏ gọn như vậy nhưng có thể nạp code ngay trên mạch mà không thụ động như pro mini ?


  Are you sure? yes | no