Hard&Soft => Радиолюбителю => Arduino UNO => Тема начата: Koshak от 09 Июня 2015, 21:01:27
Название: FS1000A play Mario
Отправлено: Koshak от 09 Июня 2015, 21:01:27
Покупал на ebay наборчик http://www.ebay.com/itm/140719918135 Приёмник пока не крутил а вот передатчик испытал :D D3 ардуины вешаем на сигнал DATA модуля FS1000A
Скетч:
Цитировать
/* Arduino Mario Bros Tunes With Piezo Buzzer and PWM
Connect the positive side of the Buzzer to pin 3, then the negative side to a 1k ohm resistor. Connect the other side of the 1 k ohm resistor to ground(GND) pin on the Arduino.
by: Dipto Pratyaksa last updated: 31/3/13 */
/************************************************* * Public Constants *************************************************/
void setup(void) { pinMode(3, OUTPUT);//buzzer pinMode(13, OUTPUT);//led indicator when singing a note
} void loop() { //sing the tunes sing(1); sing(1); sing(2); } int song = 0;
void sing(int s) { // iterate over the notes of the melody: song = s; if (song == 2) { Serial.println(" 'Underworld Theme'"); int size = sizeof(underworld_melody) / sizeof(int); for (int thisNote = 0; thisNote < size; thisNote++) {
// to calculate the note duration, take one second // divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000 / underworld_tempo[thisNote];
// to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes);
// stop the tone playing: buzz(melodyPin, 0, noteDuration);
}
} else {
Serial.println(" 'Mario Theme'"); int size = sizeof(melody) / sizeof(int); for (int thisNote = 0; thisNote < size; thisNote++) {
// to calculate the note duration, take one second // divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000 / tempo[thisNote];
buzz(melodyPin, melody[thisNote], noteDuration);
// to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes);
// stop the tone playing: buzz(melodyPin, 0, noteDuration);
} } }
void buzz(int targetPin, long frequency, long length) { digitalWrite(13, HIGH); long delayValue = 1000000 / frequency / 2; // calculate the delay value between transitions //// 1 second's worth of microseconds, divided by the frequency, then split in half since //// there are two phases to each cycle long numCycles = frequency * length / 1000; // calculate the number of cycles for proper timing //// multiply frequency, which is really cycles per second, by the number of seconds to //// get the total number of cycles to produce for (long i = 0; i < numCycles; i++) { // for the calculated length of time... digitalWrite(targetPin, HIGH); // write the buzzer pin high to push out the diaphram delayMicroseconds(delayValue); // wait for the calculated delay value digitalWrite(targetPin, LOW); // write the buzzer pin low to pull back the diaphram delayMicroseconds(delayValue); // wait again or the calculated delay value } digitalWrite(13, LOW);