Помогите не работает
- Войдите на сайт для отправки комментариев
Сб, 07/12/2013 - 20:38
/* Sound Serial (aka Keyboard Serial)
*
* Расчет тонов производится следующим образом:
*
* timeHigh = period / 2 = 1 / (2 * toneFrequency)
*
* таблица различных тонов:
*
* нота частота период timeHigh
* c 261 Hz 3830 1915
* d 294 Hz 3400 1700
* e 329 Hz 3038 1519
* f 349 Hz 2864 1432
* g 392 Hz 2550 1275
* a 440 Hz 2272 1136
* b 493 Hz 2028 1014
* C 523 Hz 1912 956
*
* на основе примера проекта todbot.com (Tod E. Kurt <tod@todbot.com>)
*/
int speakerPin = 10;
int serByte = -1;
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
int tempo = 300;
void setup() {
pinMode(speakerPin, OUTPUT);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);
}
void loop()
{
if(digitalRead(2) == HIGH){
serByte = 99;
}
if(digitalRead(3) == HIGH){
serByte = 100;
}
if(digitalRead(4) == HIGH)
{
serByte = 101;
}
if(digitalRead(5) == HIGH)
{
serByte = 102;
}
if(digitalRead(6) == HIGH)
{
serByte = 103;
}
if(digitalRead(7) == HIGH)
{
serByte = 97;
}
if(digitalRead(8) == HIGH)
{
serByte = 98;
}
if(digitalRead(9) == HIGH)
{
serByte = 67;
}
digitalWrite(speakerPin, LOW);
for (int j=0;j<=8;j++) { // проверяем - это нота?
if (names[j] == serByte) { // ага - нота!
for( int i=0; i<50; i++ ) { // проигрываем ноту 50 раз
digitalWrite(speakerPin, HIGH);
delayMicroseconds(tones[j]);
digitalWrite(speakerPin, LOW);
delayMicroseconds(tones[j]);
}
}
serByte = -1;
}
}
При нажатии на кнопки иногда один звук срабатывает. Но не работает.
P.S. это пианино
Кнопки надо подтянуть на минус и нажимать,подключая к + в данном случае..
Обычно наоборот делается,подтягивается на плюс,а нажимается,подключаясь к минусу,тогда и проверка должна быть digitalRead(х) ==L OW
tone()
#define speakerPin 10 byte keys[8] = {2, 3, 4, 5, 6, 7, 8, 9}; byte notes[8] = {261, 294, 329, 349, 392, 440, 493, 523}; void setup() { pinMode(speakerPin, OUTPUT); for(byte i = 0; i < 8; i++) digitalWrite(keys[i], 1); } void loop() { for(byte i = 0; i < 8; i++) { bool t = 0; if(!digitalRead(keys[i])) { tone(speakerPin, notes[8]); t = 1; } if(!t) noTone(speakerPin); } }Только кнопочки подключите так как вам написали выше - один контакт кнопки к PIN, второй к GND.