Advertisement
ivanumass

код телефона

Jun 12th, 2018
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.46 KB | None | 0 0
  1. #include <Bounce2.h>;
  2.  
  3. Bounce lever_bounce = Bounce();
  4.  
  5. #define pin_led 10             // Сигнальный светодиод
  6. #define pin_lever 5            // Рычаг
  7. #define pin_left_cup 12        // левая чашка
  8. #define pin_right_cup 11       // правая чашка
  9.  
  10. byte phone_state;               //Переменная состояния телефона 0 - idle, 1 - входящий звонок, 2 - набор номера, 3 - разговор
  11.  
  12. String buffer_string;          //Буфер команды порта
  13. char sym;                      //Переменная символа
  14.  
  15. boolean l_cup = 0;              // Триггер периода импульса
  16. boolean r_cup = 0;              // Триггер периода запрета импульса
  17. boolean pause = 0;              // Триггер паузы между серией импульсов
  18. long time;                       // Таймер
  19. int t1 = 40;                    // Время удара на левую чашку (длинна импульса)
  20. int t2 = 80;                  // Время удара на правую чашку (t = t2-t1)
  21. int t3 = 4000;                  // Время паузы между сериями импульсов
  22.  
  23. int count;                  // Счетчик импульсов
  24. int pulse_qty = 20;             // Количество импульсов в серии
  25.  
  26. void setup() {
  27.  
  28.   Serial.begin(115200);
  29.  
  30.   pinMode(pin_led, OUTPUT);
  31.  
  32.   pinMode (pin_lever, INPUT);        // пин рычага с дребезгодавом
  33.   lever_bounce.attach (pin_lever);
  34.   lever_bounce.interval(150);
  35.   phone_state=0;
  36.  
  37.   pinMode(pin_left_cup,OUTPUT);    
  38.   pinMode(pin_right_cup,OUTPUT);
  39.  
  40. }
  41.  
  42. void loop() {
  43.  
  44.  
  45.   if (Serial.available()) {           //Если что-то прилетело в порт? то вызываем функцию обработки символов порта
  46.     process_symbol();      
  47.   }
  48.   if (phone_state == 1){              //Если телефон в режиме входящего звонка, включаем звонок
  49.     ringer();
  50.   }
  51. }
  52.  
  53. void process_symbol() {               //Функция обработки символов порта--------------------------------
  54.   sym = Serial.read();                //присвоить переменной значение из порта
  55.   if (sym == "\r") {                  //Если значение из порта - перевести каретку
  56.     return;                           //Ничего не делаем и отправляемся обратно в луп
  57.   }
  58.   if (sym == "\n") {                  //Если значение из порта - конец строки, команда завершена
  59.     Serial.println (buffer_string);
  60.     proccess_command();               // Вызываем функцию обработки команд
  61.     buffer_string = "";               // Обнуляем буфер команды
  62.     return;                           // отправляемся обратно в луп
  63.   }
  64.   buffer_string += sym;               //добавляем значение переменной символа в буфер команды
  65. }
  66.  
  67. void proccess_command() {             //Функция обработчка команд-------------------------
  68.   if(buffer_string=="RING"){
  69.      phone_state = 1;
  70.   }
  71. }
  72.  
  73. void ringer(){                        //Функция звонка---------------------------
  74.  
  75.   if((l_cup==0)&&(r_cup==0)&&(pause==0)){
  76.     time=millis();
  77.     l_cup=1;
  78.     count++;                          // Счетчик количества импульсов
  79.   }
  80.  
  81.   if( l_cup && (millis() - time) > t1){ // Время импульса
  82.     l_cup = 0;
  83.     r_cup=1;
  84.   }
  85.  
  86.   if(r_cup && (millis() - time) > t2){ // Время запрета импульса
  87.     r_cup=0;
  88.   }
  89.  
  90.   if(count == pulse_qty) {
  91.     pause=1;
  92.     if(pause && (millis() - time) > t3){ // Время паузы между сериями импульсов
  93.       pause=0;
  94.       count=0; // Сброс счетчика
  95.     }
  96.   }
  97.  
  98.   if (l_cup==1) {
  99.     digitalWrite(pin_left_cup,HIGH);
  100.     digitalWrite(pin_right_cup,LOW);
  101.   }
  102.  
  103.   if (r_cup==1) {
  104.     digitalWrite(pin_left_cup,LOW);
  105.     digitalWrite(pin_right_cup,HIGH);
  106.   }
  107.  
  108.   if (pause==1)  {
  109.     digitalWrite(pin_left_cup,LOW);
  110.     digitalWrite(pin_right_cup,LOW);
  111.   }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement