как программировать таймер DIGISPARK
- Войдите на сайт для отправки комментариев
Пт, 21/10/2016 - 22:45
делаю муляж бомбы для страйкбольных игр на базе arduino
принцип роботи прост:
нажал на одну кнопку увеличил время на 5 минут, нажал и держишь на другую кнопку время уменьшается
сигнал будет когда время выйдет или 2 кнопка будет отпускаетсa
но код не работает
/* knopka podkljucena mezdu pin i GND
* scoby ne ispolzovat podtahjuscyj rezystor
*/
int p = 1; //led+ speaker
int button=2 ; //knopka vremeny
int pp = 2; // start
long cas=0; //peremennaja dlja vremeny
int var = 0;
int i=5000; // vrema kotoroje budet dodavatsa
void setup() {
pinMode(button, INPUT_PULLUP); // cas
pinMode(p, OUTPUT); // speaker
pinMode(pp, INPUT_PULLUP); // start
}
void ledon() {
digitalWrite(1,HIGH);
}
void ledoff() {
digitalWrite(1,LOW);
}
void blik(){
digitalWrite(p, HIGH);
delay(10000);
digitalWrite(p, LOW);
delay(1000);
}
void speaker() {
while(var<200){
tone (p, 500);
delay(100);
tone(p, 1000);
delay(100);
var++;
}
}
void loop() {
if (digitalRead(button) == LOW) { //vkljuci led dlja proverky nazatye
ledon();
}
delay(250);
if (digitalRead(button) == HIGH) { // dodaj vrema stolka ras
cas=cas+i; // skolka raz nazal na knopku
ledoff(); //(1 ras =5minut)
} // (3 raza=15minut)
if (digitalRead(2) == LOW) { // vkljuci led dlja proverky nazatye
ledon();
delay(250);
ledoff();
delay(cas);
blik();
speaker();
}
delay(250);
if(digitalRead(2) == HIGH) {
blik();
speaker();
}
}
Вы действительно так думаете?
Очень интересно, спасибо большое)
5 sekund ja zdelal scob ne zdat 5 minut pry teste programy
daze pry ispravlenyy rozpynovky ne robotaet
kak posovetujete ispravyt delay ?
vot ispravlenyj kod + ubral speaker dlja testa a to uze usy est =(
/* knopka podkljucena mezdu pin i GND * scoby ne ispolzovat podtahjuscyj rezystor */ int p = 1; //led+ speaker int button=2 ; //knopka vremeny int pp = 0; // start long cas=0; //peremennaja dlja vremeny int var = 0; int i=5000; // vrema kotoroje budet dodavatsa void setup() { pinMode(button, INPUT_PULLUP); // cas pinMode(p, OUTPUT); // speaker pinMode(pp, INPUT_PULLUP); // start } void ledon() { digitalWrite(1,HIGH); } void ledoff() { digitalWrite(1,LOW); } void blik(){ while(var<200){ digitalWrite(p, HIGH); delay(1000); digitalWrite(p, LOW); delay(1000); var++; } } void speaker() { while(var<200){ tone (p, 500); delay(100); tone(p, 1000); delay(100); var++; } } void loop() { if (digitalRead(button) == LOW) { //vkljuci led dlja proverky nazatye ledon(); } delay(250); if (digitalRead(button) == HIGH) { // dodaj vrema stolka ras cas=cas+i; // skolka raz nazal na knopku ledoff(); //(1 ras =5minut) } // (3 raza=15minut) if (digitalRead(pp) == LOW) { // vkljuci led dlja proverky nazatye ledon(); delay(250); ledoff(); delay(cas); blik(); } }Хм...
Блондинко?
Фото в студию!
#define p 1 //led+ speaker #define button 2 //knopka vremeny #define pp 0 // start bool status_button; bool f_button; bool k_button; bool status_pp; bool f_pp; bool k_pp; int shag = 1; long cas = 0; //peremennaja dlja vremeny int var = 0; int b_var = 0; int i = 5000; // vrema kotoroje budet dodavatsa //Переменные функци паузы или дребезга, с разным временем опроса unsigned long currentPause[4]; //массив данных. Количество элементов - количеству таймеров bool fl_pause[4];//массив данных. Количество элементов - количеству таймеров //Функция дребезга или паузы time-время задержки, nomer-номер таймера boolean my_pausa(unsigned long time, byte nomer) { bool x = 0; if (fl_pause[nomer] == 0)currentPause[nomer] = millis(), fl_pause[nomer] = 1; if (millis() - currentPause[nomer] >= time) x = 1, fl_pause[nomer] = 0; return x; } void setup() { pinMode(button, INPUT_PULLUP); // cas pinMode(p, OUTPUT); // speaker pinMode(pp, INPUT_PULLUP); // start } void speaker() { while (var < 200) { tone (p, 500); delay(100); tone(p, 1000); delay(100); var++; } } void loop() { //Обрабатуем кнопку button на дребезг if (digitalRead(button) == 0) { if (f_button == 0) fl_pause[0] = 0, f_button = 1; if (!status_button) status_button = my_pausa (5, 4); // Отправляем в Функцию дребезга } if (digitalRead(button) == 1) { if (f_button == 1) fl_pause[0] = 0, f_button = 0; if (status_button)status_button = !my_pausa (5, 4); // Отправляем в Функцию дребезга } //Обрабатуем кнопку pp на дребезг if (digitalRead(pp) == 0) { if (f_pp == 0) fl_pause[1] = 0, f_pp = 1; if (!status_pp) status_pp = my_pausa (5, 4); // Отправляем в Функцию дребезга } if (digitalRead(pp) == 1) { if (f_pp == 1) fl_pause[1] = 0, f_pp = 0; if (status_pp)status_pp = !my_pausa (5, 4); // Отправляем в Функцию дребезга } //Кнопка button нажата if (status_button) { digitalWrite(p, HIGH); k_button = 0; shag = 1; b_var = 0; k_pp = 0; } //Кнопка button отпущена if (!status_button && !k_button) { digitalWrite(p, LOW); cas += i; k_button = 1; } //Клик нопки pp или "старт" (Если во время випонения старта нажать кн.button - старт сбросится и cas добавится на i. Это без speaker()) if (status_pp)k_pp = 1; if (k_pp) { switch (shag) { case 1: digitalWrite(p, HIGH); if (my_pausa(250, 2)) { digitalWrite(p, LOW); shag = 2; } break; case 2: if (my_pausa(cas, 2))shag = 3; break; case 3: if (b_var < 200) { if (my_pausa(1000, 2)) { digitalWrite(p, !digitalRead(p)); b_var++; } } else { digitalWrite(p, LOW); shag = 1; b_var = 0; k_pp = 0; break; } } } }Sudja po kodu vy kazetsa pravylno ponjaly
speaker() dolzen nachodytsa vmeste z blik() oni budut podavat signal o okoncanyy vremeny ili esly nepravylno rozdefuzyli
Ksozelenyju vasa versyja koda toze nerobotaet, pocemu nemogu skazat tak kak ja novycok v etom dele
( vo izbezanye drebezha star i dodavanye vremeny proischodylo posle odkljuzenye ot pin s intervalom 250ms scoby sokratyt kod budet li takoe robotat? )
Исправил, подключение кнопок в самом верху (Вы у себя тоже поменяйте)
//Обратите внимание!!! Меняем подключение кнопок #define p 4 //led+ speaker #define button 2 //knopka vremeny #define pp 3 // start bool status_button; bool f_button; bool k_button; bool status_pp; bool f_pp; bool k_pp; int shag = 1; long cas = 0; //peremennaja dlja vremeny int var = 0; int b_var = 1; int i = 5000; // vrema kotoroje budet dodavatsa //Переменные функци паузы или дребезга, с разным временем опроса unsigned long currentPause[4]; //массив данных. Количество элементов - количеству таймеров bool fl_pause[4];//массив данных. Количество элементов - количеству таймеров //Функция дребезга или паузы time-время задержки, nomer-номер таймера boolean my_pausa(unsigned long time, byte nomer) { bool x = 0; if (fl_pause[nomer] == 0)currentPause[nomer] = millis(), fl_pause[nomer] = 1; if (millis() - currentPause[nomer] >= time) x = 1, fl_pause[nomer] = 0; return x; } void setup() { pinMode(button, INPUT_PULLUP); // cas pinMode(p, OUTPUT); // speaker pinMode(pp, INPUT_PULLUP); // start } void speaker() { while (var < 200) { tone (p, 500); delay(100); tone(p, 1000); delay(100); var++; } } void loop() { //Обрабатуем кнопку button на дребезг if (digitalRead(button) == 0) { if (f_button == 0) fl_pause[0] = 0, f_button = 1; if (!status_button) status_button = my_pausa (5, 4); // Отправляем в Функцию дребезга } if (digitalRead(button) == 1) { if (f_button == 1) fl_pause[0] = 0, f_button = 0; if (status_button)status_button = !my_pausa (5, 4); // Отправляем в Функцию дребезга } //Обрабатуем кнопку pp на дребезг if (digitalRead(pp) == 0) { if (f_pp == 0) fl_pause[1] = 0, f_pp = 1; if (!status_pp) status_pp = my_pausa (5, 4); // Отправляем в Функцию дребезга } if (digitalRead(pp) == 1) { if (f_pp == 1) fl_pause[1] = 0, f_pp = 0; if (status_pp)status_pp = !my_pausa (5, 4); // Отправляем в Функцию дребезга } //Кнопка button нажата if (status_button) { digitalWrite(p, HIGH); k_button = 0; shag = 1; b_var = 0; k_pp = 0; } //Кнопка button отпущена if (!status_button && !k_button) { digitalWrite(p, LOW); cas += i; k_button = 1; } //Клик нопки pp или "старт" (Если во время випонения старта нажать кн.button - старт сбросится и cas добавится на i. Это без speaker()) if (status_pp)k_pp = 1; if (k_pp) { switch (shag) { case 1: digitalWrite(p, HIGH); if (my_pausa(250, 2)) { digitalWrite(p, LOW); shag = 2; } break; case 2: if (my_pausa(cas, 2))shag = 3; break; case 3: if (b_var < 200) { if (my_pausa(1000, 2)) { digitalWrite(p, !digitalRead(p)); b_var++; } } else { digitalWrite(p, LOW); shag = 1; b_var = 0; k_pp = 0; break; } } } }- Проверил в протеусе -все работает.
nakonec to zarobotalo, bolsoe spasiba
tak ze chotel sprosyt, posle okoncanye vremeny, funkcyja kotoraja otvecaet za blikanye led
case 3: if (b_var < 200) { if (my_pausa(1000, 2)) { digitalWrite(p, !digitalRead(p)); b_var++; } }mozna li za nejo dadat speaker? i kak lutse eto zdelat scob bylo bez delay() s tem sco speaker budet na druhom pin
#define s 0 // speaker void speaker() { while (var < 200) { tone (s, 500); delay(100); tone(s, 1000); delay(100); var++; } }scoby polucylos kak to
case 3: if (b_var < 200) { if (my_pausa(1000, 2)) { digitalWrite(p, !digitalRead(p)); speaker(); b_var++; } }esli ja pravylno ponejal etot kod
Нет! speaker(); Нужно подключить НЕ на 0 или1 пин (они нужны для отладки) алюбой другой, к примеру 5. Вставлять вызов нужно в блоке else перед break (После 110 сторочки)
Прошу прощения, я немного подправил код и вставил Вашу функцию. Пожалуйста замените код у себя!!!
//Обратите внимание!!! Меняем подключение кнопок #define p 4 //led+ speaker #define button 2 //knopka vremeny #define pp 3 // start bool status_button; bool f_button; bool k_button; bool status_pp; bool f_pp; bool k_pp; int shag = 1; long cas = 0; //peremennaja dlja vremeny int var = 0; int b_var = 0; int i = 5000; // vrema kotoroje budet dodavatsa //Переменные функци паузы или дребезга, с разным временем опроса unsigned long currentPause[4]; //массив данных. Количество элементов - количеству таймеров bool fl_pause[4];//массив данных. Количество элементов - количеству таймеров //Функция дребезга или паузы time-время задержки, nomer-номер таймера boolean my_pausa(unsigned long time, byte nomer) { bool x = 0; if (fl_pause[nomer] == 0)currentPause[nomer] = millis(), fl_pause[nomer] = 1; if (millis() - currentPause[nomer] >= time) x = 1, fl_pause[nomer] = 0; return x; } void setup() { pinMode(button, INPUT_PULLUP); // cas pinMode(p, OUTPUT); // speaker pinMode(pp, INPUT_PULLUP); // start } void speaker() { while (var < 200) { tone (p, 500); delay(100); tone(p, 1000); delay(100); var++; } } void loop() { //Обрабатуем кнопку button на дребезг if (digitalRead(button) == 0) { if (f_button == 0) fl_pause[0] = 0, f_button = 1; if (!status_button) status_button = my_pausa (5, 0); // Отправляем в Функцию дребезга } if (digitalRead(button) == 1) { if (f_button == 1) fl_pause[0] = 0, f_button = 0; if (status_button)status_button = !my_pausa (5, 0); // Отправляем в Функцию дребезга } //Обрабатуем кнопку pp на дребезг if (digitalRead(pp) == 0) { if (f_pp == 0) fl_pause[1] = 0, f_pp = 1; if (!status_pp) status_pp = my_pausa (5, 1); // Отправляем в Функцию дребезга } if (digitalRead(pp) == 1) { if (f_pp == 1) fl_pause[1] = 0, f_pp = 0; if (status_pp)status_pp = !my_pausa (5, 1); // Отправляем в Функцию дребезга } //Кнопка button нажата if (status_button) { digitalWrite(p, HIGH); k_button = 0; shag = 1; b_var = 0; k_pp = 0; } //Кнопка button отпущена if (!status_button && !k_button) { digitalWrite(p, LOW); cas += i; k_button = 1; } //Клик нопки pp или "старт" (Если во время випонения старта нажать кн.button - старт сбросится и cas добавится на i. Это без speaker()) if (status_pp)k_pp = 1; if (k_pp) { switch (shag) { case 1: digitalWrite(p, HIGH); if (my_pausa(250, 2)) { digitalWrite(p, LOW); shag = 2; } break; case 2: if (my_pausa(cas, 2))shag = 3; break; case 3: if (b_var < 200) { if (my_pausa(1000, 2)) { digitalWrite(p, !digitalRead(p)); b_var++; } } else { digitalWrite(p, LOW); shag = 1; b_var = 0; k_pp = 0; speaker(); break; } } } }ja daze neznaju kak tebe blahadarit, ty mne ocen pomoh spasiba
mozes isce proveryt etot kod
kde speaker na 5 pine + 4 pin eta falsyboe obezvrezovanyae
//Обратите внимание!!! Меняем подключение кнопок #define p 1 //led out #define button 2 //knopka vremeny #define pp 3 // start #define fb 4 // fail button #define sp 5 // speaker bool status_button; bool f_button; bool k_button; bool status_pp; bool f_pp; bool k_pp; int shag = 1; long cas = 0; //peremennaja dlja vremeny int var = 0; int b_var = 0; int i = 5000; // vrema kotoroje budet dodavatsa //Переменные функци паузы или дребезга, с разным временем опроса unsigned long currentPause[4]; //массив данных. Количество элементов - количеству таймеров bool fl_pause[4];//массив данных. Количество элементов - количеству таймеров //Функция дребезга или паузы time-время задержки, nomer-номер таймера boolean my_pausa(unsigned long time, byte nomer) { bool x = 0; if (fl_pause[nomer] == 0)currentPause[nomer] = millis(), fl_pause[nomer] = 1; if (millis() - currentPause[nomer] >= time) x = 1, fl_pause[nomer] = 0; return x; } void setup() { pinMode(button, INPUT_PULLUP); // cas pinMode(p, OUTPUT); // speaker pinMode(pp, INPUT_PULLUP); // start } void speaker() { while (var < 200) { tone (sp, 500); delay(100); tone(sp, 1000); delay(100); var++; } } void loop() { if (digitalRead(fb) == HIGH) { speaker(); } //Обрабатуем кнопку button на дребезг if (digitalRead(button) == 0) { if (f_button == 0) fl_pause[0] = 0, f_button = 1; if (!status_button) status_button = my_pausa (5, 0); // Отправляем в Функцию дребезга } if (digitalRead(button) == 1) { if (f_button == 1) fl_pause[0] = 0, f_button = 0; if (status_button)status_button = !my_pausa (5, 0); // Отправляем в Функцию дребезга } //Обрабатуем кнопку pp на дребезг if (digitalRead(pp) == 0) { if (f_pp == 0) fl_pause[1] = 0, f_pp = 1; if (!status_pp) status_pp = my_pausa (5, 1); // Отправляем в Функцию дребезга } if (digitalRead(pp) == 1) { if (f_pp == 1) fl_pause[1] = 0, f_pp = 0; if (status_pp)status_pp = !my_pausa (5, 1); // Отправляем в Функцию дребезга } //Кнопка button нажата if (status_button) { digitalWrite(p, HIGH); k_button = 0; shag = 1; b_var = 0; k_pp = 0; } //Кнопка button отпущена if (!status_button && !k_button) { digitalWrite(p, LOW); cas += i; k_button = 1; } //Клик нопки pp или "старт" (Если во время випонения старта нажать кн.button - старт сбросится и cas добавится на i. Это без speaker()) if (status_pp)k_pp = 1; if (k_pp) { switch (shag) { case 1: digitalWrite(p, HIGH); if (my_pausa(250, 2)) { digitalWrite(p, LOW); shag = 2; } break; case 2: if (my_pausa(cas, 2))shag = 3; break; case 3: if (b_var < 200) { if (my_pausa(1000, 2)) { digitalWrite(p, !digitalRead(p)); b_var++; } } else { digitalWrite(p, LOW); shag = 1; b_var = 0; k_pp = 0; speaker(); break; } } } }v digispark ne mnoha pinov od 0 do 5
na 1 pin podkljucen vstrojenyj LED kotoryj i budet ispolzovatsa kak sygnal o nazatyy
Понял! Тогда выполните 2й - #14 пункт идолжно работать/
kod robotaet no speaker nacinaet podavat signal tolka posle svetovoho signala LED, mozna eto kak to ispravit? esli mozna to kak?
А как Вам надо - спикер перед Лед или одновременно!
//Обратите внимание!!! Меняем подключение кнопок #define p 1 //led out #define button 2 //knopka vremeny #define pp 3 // start #define fb 4 // fail button #define sp 5 // speaker bool f_speaker; bool status_button; bool f_button; bool k_button; bool status_pp; bool f_pp; bool k_pp; int shag = 1; long cas = 0; //peremennaja dlja vremeny int var = 0; int b_var = 0; int i = 5000; // vrema kotoroje budet dodavatsa //Переменные функци паузы или дребезга, с разным временем опроса unsigned long currentPause[4]; //массив данных. Количество элементов - количеству таймеров bool fl_pause[4];//массив данных. Количество элементов - количеству таймеров //Функция дребезга или паузы time-время задержки, nomer-номер таймера boolean my_pausa(unsigned long time, byte nomer) { bool x = 0; if (fl_pause[nomer] == 0)currentPause[nomer] = millis(), fl_pause[nomer] = 1; if (millis() - currentPause[nomer] >= time) x = 1, fl_pause[nomer] = 0; return x; } void setup() { pinMode(button, INPUT_PULLUP); // cas pinMode(pp, INPUT_PULLUP); // start pinMode(fb, INPUT_PULLUP); pinMode(p, OUTPUT); // led pinMode(sp, OUTPUT); // speaker Serial.begin(9600); } void speaker() { static int var_sp = 1; switch (var_sp) { case 1: tone (sp, 500); if (my_pausa(100, 3))var_sp = 2; break; case 2: tone(sp, 1000); if (my_pausa(100, 3))var_sp = 1, var++; break; } } void loop() { if (digitalRead(fb) == LOW) { speaker(); } //Обрабатуем кнопку button на дребезг if (digitalRead(button) == 0) { if (f_button == 0) fl_pause[0] = 0, f_button = 1; if (!status_button) status_button = my_pausa (5, 0); // Отправляем в Функцию дребезга } if (digitalRead(button) == 1) { if (f_button == 1) fl_pause[0] = 0, f_button = 0; if (status_button)status_button = !my_pausa (5, 0); // Отправляем в Функцию дребезга } //Обрабатуем кнопку pp на дребезг if (digitalRead(pp) == 0) { if (f_pp == 0) fl_pause[1] = 0, f_pp = 1; if (!status_pp) status_pp = my_pausa (5, 1); // Отправляем в Функцию дребезга } if (digitalRead(pp) == 1) { if (f_pp == 1) fl_pause[1] = 0, f_pp = 0; if (status_pp)status_pp = !my_pausa (5, 1); // Отправляем в Функцию дребезга } //Кнопка button нажата if (status_button) { digitalWrite(p, HIGH); noTone(sp); fl_pause[2] = 0; k_button = 0; shag = 1; b_var = 0; var = 0; } //Кнопка button отпущена if (!status_button && !k_button) { digitalWrite(p, LOW); if (k_pp)k_pp = 0; else cas += i; k_button = 1; } //Клик нопки pp или "старт" (Если во время випонения старта нажать кн.button - старт сбросится и cas добавится на i. Это без speaker()) if (status_pp)k_pp = 1; if (k_pp) { switch (shag) { case 1: digitalWrite(p, HIGH); if (my_pausa(250, 2)) { digitalWrite(p, LOW); shag = 2; } break; case 2: if (my_pausa(cas, 2))shag = 3, var = 0;; break; case 3: if (b_var < 200) { if (my_pausa(1000, 2)) { digitalWrite(p, !digitalRead(p)); b_var++; } } else { digitalWrite(p, LOW); shag = 1; b_var = 0; k_pp = 0; } if (var < 200) { speaker(); f_speaker = 1; } else if (f_speaker) noTone(sp), f_speaker = 0; break; } } }zabej na fb ato slyskom nespravedlyvo budet, no kod robotaet tak sco led robotaet pravylno no speaker srazu posle zapuska timera ne dozydaes okoncanyy vremeny
У меня на симуляторе работает все правильно. Отключите кнопку "fb" и задокументируйте код с ней, что бы настроить работу без неё. Вот так
//Обратите внимание!!! Меняем подключение кнопок #define p 1 //led out #define button 2 //knopka vremeny #define pp 3 // start #define fb 4 // fail button #define sp 5 // speaker bool f_speaker; bool status_button; bool f_button; bool k_button; bool status_pp; bool f_pp; bool k_pp; int shag = 1; long cas = 0; //peremennaja dlja vremeny int var = 0; int b_var = 0; int i = 5000; // vrema kotoroje budet dodavatsa //Переменные функци паузы или дребезга, с разным временем опроса unsigned long currentPause[4]; //массив данных. Количество элементов - количеству таймеров bool fl_pause[4];//массив данных. Количество элементов - количеству таймеров //Функция дребезга или паузы time-время задержки, nomer-номер таймера boolean my_pausa(unsigned long time, byte nomer) { bool x = 0; if (fl_pause[nomer] == 0)currentPause[nomer] = millis(), fl_pause[nomer] = 1; if (millis() - currentPause[nomer] >= time) x = 1, fl_pause[nomer] = 0; return x; } void setup() { pinMode(button, INPUT_PULLUP); // cas pinMode(pp, INPUT_PULLUP); // start pinMode(fb, INPUT_PULLUP); pinMode(p, OUTPUT); // led pinMode(sp, OUTPUT); // speaker } void speaker() { static int var_sp = 1; switch (var_sp) { case 1: tone (sp, 500); if (my_pausa(100, 3))var_sp = 2; break; case 2: tone(sp, 1000); if (my_pausa(100, 3))var_sp = 1, var++; break; } } void loop() { //if (digitalRead(fb) == LOW) { //speaker(); //} //Обрабатуем кнопку button на дребезг if (digitalRead(button) == 0) { if (f_button == 0) fl_pause[0] = 0, f_button = 1; if (!status_button) status_button = my_pausa (5, 0); // Отправляем в Функцию дребезга } if (digitalRead(button) == 1) { if (f_button == 1) fl_pause[0] = 0, f_button = 0; if (status_button)status_button = !my_pausa (5, 0); // Отправляем в Функцию дребезга } //Обрабатуем кнопку pp на дребезг if (digitalRead(pp) == 0) { if (f_pp == 0) fl_pause[1] = 0, f_pp = 1; if (!status_pp) status_pp = my_pausa (5, 1); // Отправляем в Функцию дребезга } if (digitalRead(pp) == 1) { if (f_pp == 1) fl_pause[1] = 0, f_pp = 0; if (status_pp)status_pp = !my_pausa (5, 1); // Отправляем в Функцию дребезга } //Кнопка button нажата if (status_button) { digitalWrite(p, HIGH); noTone(sp); fl_pause[2] = 0; k_button = 0; shag = 1; b_var = 0; var = 0; } //Кнопка button отпущена if (!status_button && !k_button) { digitalWrite(p, LOW); if (k_pp)k_pp = 0; else cas += i; k_button = 1; } //Клик нопки pp или "старт" (Если во время випонения старта нажать кн.button - старт сбросится и cas добавится на i. Это без speaker()) if (status_pp)k_pp = 1; if (k_pp) { switch (shag) { case 1: digitalWrite(p, HIGH); if (my_pausa(250, 2)) { digitalWrite(p, LOW); shag = 2; } break; case 2: if (my_pausa(cas, 2))shag = 3, var = 0;; break; case 3: if (b_var < 200) { if (my_pausa(1000, 2)) { digitalWrite(p, !digitalRead(p)); b_var++; } } else { digitalWrite(p, LOW); shag = 1; b_var = 0; k_pp = 0; } if (b_var>1){ if (var < 200) { speaker(); f_speaker = 1; } else if (f_speaker) noTone(sp), f_speaker = 0; } break; } } }