звук

igrec
Offline
Зарегистрирован: 02.03.2012

Приветствыю, может кто поможет. Что не так?

Хочу, что бы при нажатии кнопки, пишала 3 раза.

Оно пишит постоянно

#include "inc.h"

void setup() {
  // put your setup code here, to run once:
pinMode(BUTTON2, INPUT); 
 

}

void loop() {
  // put your main code here, to run repeatedly: 

  if 
  (digitalRead(BUTTON2 == LOW)){
   beep(); 
  }
     if 
  (digitalRead(BUTTON2 == HIGH)){
    noTone(3);
  }
  else{
  noTone(3); }
}

void beep()
{
tone(3, 128, 50) ;
delay(200);
tone(3, 256, 50) ;
delay(200);
tone(3, 512, 50) ;
delay(200);
noTone(3); 
}

 

 

parnas
Offline
Зарегистрирован: 06.04.2011

 А если паузы побольше сделать, скажем delay(2000);

Все равно пищит постоянно?

igrec
Offline
Зарегистрирован: 02.03.2012

То же самое, токо паузы подлинней. На нажатие кнопки не реагирует, пищит как загрузишь

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Лучше начать с того как ты подключил кнопку.

MarioM
Offline
Зарегистрирован: 18.04.2011

так ты тон то отключи... 

алгоритм такой - включаешь тон ждешь определенное время он пищит, выключешь, ждешь определенное время.... потом по новой

в функции beep()

 

ой простите не понял суть проблемы.. правильно.. нужно начать с кнопки

igrec
Offline
Зарегистрирован: 02.03.2012

MarioM пишет:

так ты тон то отключи... 

алгоритм такой - включаешь тон ждешь определенное время он пищит, выключешь, ждешь определенное время.... потом по новой

в функции beep()

 

Как? он пишит и не реагирует на кнопку. Мне нужно, что бы он попишал 3 раза и заткнулся

 

MarioM
Offline
Зарегистрирован: 18.04.2011

 попробуй поменять местами 14 и 18 строки кода, если уверен, что правильно кнопку подключил

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

if (digitalRead(кнопка,HIGH)&&flag==0)
{


tone(3,128)
delay(200);
noTone
delay(200);

tone(3,256)
delay(200);

noTone
delay(200);


tone(3,512)
delay(200);

noTone
delay(200);

flag=1;

}

 

igrec
Offline
Зарегистрирован: 02.03.2012

MarioM пишет:

 попробуй поменять местами 14 и 18 строки кода, если уверен, что правильно кнопку подключил

 

Правильно подключил. :(

вот это работает, а моя мазня нет

http://www.arduino.cc/en/Tutorial/Pushbutton

 

MarioM
Offline
Зарегистрирован: 18.04.2011

Ты кстати забыл объявить на каком пине у тебя кнока висит

igrec
Offline
Зарегистрирован: 02.03.2012

MarioM пишет:

Ты кстати забыл объявить на каком пине у тебя кнока висит

вот , что и где висит

#define POT1 0  // krutilka  ot 0 do 1023
#define BUTTON1 10 // knopka pravaya
#define BUTTON2 11 // knopka srednya
#define BUTTON3 12 // knopka levaya
#define LED1 5   // migalka 
#define BUZZER 3 // pishalka
// vot eti tri tablo
#define DATA 4
#define LATCH 7 
#define CLOCK 8

 

 

MarioM
Offline
Зарегистрирован: 18.04.2011

строки местами менял? просто странно, но по программе у тебя получется что пока кнопка отпущена на пинеоткуда-то сигнал... 

поменяй строки)

igrec
Offline
Зарегистрирован: 02.03.2012

MarioM пишет:

строки местами менял? просто странно, но по программе у тебя получется что пока кнопка отпущена на пинеоткуда-то сигнал... 

поменяй строки)

 

Поменял, и кнопку помянял. И код сверху от nestandart  запихнул в beep()

пищит как резанный

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Попробуйте без отдельной функции.

Просто в loop.

Пищит как резаный это значит циклично делает три писка разной частоты по очереди ?

Если нажать и держать  кнопку произойдет три писка и все.

Если отпустить и снова нажать ситуация повториться.

Не забываем про подтягивающие резисторы.




int flag=0;
void setup(){}
void loop ()

{

if(digitalRead(13)==HIGH&&flag==0)
{


tone(3,128);
delay(200);
noTone(3);
delay(200);

tone(3,256);
delay(200);
noTone(3);
delay(200);


tone(3,512);
delay(200);
noTone(3);
delay(200);


flag=1;
}


if(digitalRead(13)==LOW)

{

flag=0;
}
}




 

igrec
Offline
Зарегистрирован: 02.03.2012

Нет ему просто плевать на кнопку. На все 3 кнопки

если флаг прописан в функции то да, 3 три писка разной частоты по очереди И по кругу

если глобальаня переменная то 128,256, застревает на последнем и пишит на 512

 

igrec
Offline
Зарегистрирован: 02.03.2012

Ну вот, поменял флаг с булеана на инт заработало :) Спасибо.

olegab
Offline
Зарегистрирован: 09.04.2013

в C нотации: "digitalRead(BUTTON2 == LOW)" означает:

1. вычислить значение выражения "BUTTON2 == LOW", оно будет булевым, либо true (1) либо false(0)

2. передать вычисленное булевое значение функции digitalRead. так как оно либо 0 либо 1, то читать будет из 0 или 1 пина