Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Bounce2.h>;
- Bounce lever_bounce = Bounce();
- #define pin_led 10 // Сигнальный светодиод
- #define pin_lever 5 // Рычаг
- #define pin_left_cup 12 // левая чашка
- #define pin_right_cup 11 // правая чашка
- byte phone_state; //Переменная состояния телефона 0 - idle, 1 - входящий звонок, 2 - набор номера, 3 - разговор
- String buffer_string; //Буфер команды порта
- char sym; //Переменная символа
- boolean l_cup = 0; // Триггер периода импульса
- boolean r_cup = 0; // Триггер периода запрета импульса
- boolean pause = 0; // Триггер паузы между серией импульсов
- long time; // Таймер
- int t1 = 40; // Время удара на левую чашку (длинна импульса)
- int t2 = 80; // Время удара на правую чашку (t = t2-t1)
- int t3 = 4000; // Время паузы между сериями импульсов
- int count; // Счетчик импульсов
- int pulse_qty = 20; // Количество импульсов в серии
- void setup() {
- Serial.begin(115200);
- pinMode(pin_led, OUTPUT);
- pinMode (pin_lever, INPUT); // пин рычага с дребезгодавом
- lever_bounce.attach (pin_lever);
- lever_bounce.interval(150);
- phone_state=0;
- pinMode(pin_left_cup,OUTPUT);
- pinMode(pin_right_cup,OUTPUT);
- }
- void loop() {
- if (Serial.available()) { //Если что-то прилетело в порт? то вызываем функцию обработки символов порта
- process_symbol();
- }
- if (phone_state == 1){ //Если телефон в режиме входящего звонка, включаем звонок
- ringer();
- }
- }
- void process_symbol() { //Функция обработки символов порта--------------------------------
- sym = Serial.read(); //присвоить переменной значение из порта
- if (sym == "\r") { //Если значение из порта - перевести каретку
- return; //Ничего не делаем и отправляемся обратно в луп
- }
- if (sym == "\n") { //Если значение из порта - конец строки, команда завершена
- Serial.println (buffer_string);
- proccess_command(); // Вызываем функцию обработки команд
- buffer_string = ""; // Обнуляем буфер команды
- return; // отправляемся обратно в луп
- }
- buffer_string += sym; //добавляем значение переменной символа в буфер команды
- }
- void proccess_command() { //Функция обработчка команд-------------------------
- if(buffer_string=="RING"){
- phone_state = 1;
- }
- }
- void ringer(){ //Функция звонка---------------------------
- if((l_cup==0)&&(r_cup==0)&&(pause==0)){
- time=millis();
- l_cup=1;
- count++; // Счетчик количества импульсов
- }
- if( l_cup && (millis() - time) > t1){ // Время импульса
- l_cup = 0;
- r_cup=1;
- }
- if(r_cup && (millis() - time) > t2){ // Время запрета импульса
- r_cup=0;
- }
- if(count == pulse_qty) {
- pause=1;
- if(pause && (millis() - time) > t3){ // Время паузы между сериями импульсов
- pause=0;
- count=0; // Сброс счетчика
- }
- }
- if (l_cup==1) {
- digitalWrite(pin_left_cup,HIGH);
- digitalWrite(pin_right_cup,LOW);
- }
- if (r_cup==1) {
- digitalWrite(pin_left_cup,LOW);
- digitalWrite(pin_right_cup,HIGH);
- }
- if (pause==1) {
- digitalWrite(pin_left_cup,LOW);
- digitalWrite(pin_right_cup,LOW);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement