SYNTHDUINO (7 / 7 steg)

Steg 7: kod

denna kod ägs av kevin argt som helhet men jag är inte ägare den oredigerade individdelarna av koden / /
av synthduino / /

void setup() {
setupSleep();
setuphello();
setuphello1();
setupRun();
setupTone();
setupMelody();
setupcap();

}

void loop() {
loopSleep();
loophello();
loophello1();
loopRun();
loopTone();
loopMelody();
loopcap();

}

/ * Sova Demo följetong
* -----------------
* Exempel kod att demonstrera funktionerna sömn i en Arduino. Arduino kommer att vakna upp
* När nya data tas emot i den seriella porten USART
* Baserat på sova Demo serienummer från http://www.arduino.cc/playground/Learning/ArduinoSleepCode
*
* Copyright (C) 2006 MacSimski 2006-12-30
* Copyright (C) 2007 D. Cuartielles 2007-07-08 - Mexico DF
*
* Med ändringar från Ruben Laguna 2008-10-15
*
* Detta program är fri programvara: du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* Free Software Foundation, antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.
*
* Detta program är distribuerat i hopp om att det kommer att vara användbar,
* men utan garantier; utan att ens underförstådd garanti om
* SÄLJBARHET eller lämplighet för ett visst ändamål. Se den
* GNU General Public License för mer detaljer.
*
* Du bör ha fått en kopia av GNU General Public License
* tillsammans med detta program. Om inte, se < http://www.gnu.org/licenses/>.
*
*/

#include < avr/power.h >
#include < avr/sleep.h >

int sleepStatus = 0; variabel för att lagra en begäran om sömn
int count = 0; räknaren

void setupSleep()
{

Serial.BEGIN(9600);
}

void sleepNow()
{
/ * Nu är det dags att ställa in i viloläget. I Atmega8 databladet
* http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf på sidan 35
* Det finns en lista över sömn lägen som förklarar vilka klockor och
* vakna upp källor finns i vilken sömn modus.
*
* I filen avr/sleep.h finns ring namnen på dessa sömn modus:
*
* 5 olika lägen är:
* SLEEP_MODE_IDLE-minst energibesparing
* SLEEP_MODE_ADC
* SLEEP_MODE_PWR_SAVE
* SLEEP_MODE_STANDBY
* SLEEP_MODE_PWR_DOWN-mest energibesparingar
*
* minska effekthanteringen < avr/power.h > beskrivs i
* http://www.nongnu.org/avr-libc/user-manual/group__avr__power.html
*/

set_sleep_mode(SLEEP_MODE_IDLE); viloläge är inställd här

sleep_enable(); kan sova lite i registret mcucr
så sömn är möjligt. bara en säkerhetsnål

power_adc_disable();
power_spi_disable();
power_timer0_disable();
power_timer1_disable();
power_timer2_disable();
power_twi_disable();

sleep_mode(); här är enheten faktiskt lägga till sova!!

PROGRAMMET FORTSÄTTER HÄRIFRÅN EFTER UPPVAKNANDET
sleep_disable(); första sak efter att vakna från viloläge:
Inaktivera sömn...

power_all_enable();

}

void loopSleep()
{
Visa information om räknaren
Serial.Print ("vaken för");
Serial.Print(Count);
Serial.println("SEC");
greve ++;
Delay(1000);
väntar på en sekund

beräkna den seriell in
om (Serial.available()) {
int val = Serial.read();
om (val == s ') {
Serial.println ("Serial: in Sleep mode");
Delay(100); denna försening behövs, sömnen
funktionen kommer att provocera en Serial fel annars!
Count = 0;
sleepNow(); insomningsfunktionen kallas här
}
om (val == "A") {
Serial.println ("Hola Caracola"); klassiska dummy meddelande
}
}

Kontrollera om det ska gå sover på grund av tid
om (count > = 10) {
Serial.println ("Timer: in Sleep mode");
Delay(100); denna försening behövs, sömnen
funktionen kommer att provocera en Serial fel annars!
Count = 0;
sleepNow(); insomningsfunktionen kallas här
}
}

Arduino ljud Hej världen
Skapad av David Fowler av uCHobby.com
Definiera den i/o pin vi kommer att använda för våra ljudutgång
#define SOUNDOUT_PIN 3

void setuphello(void) {
Inställd Utläge för ljud ut pin
pinMode(SOUNDOUT_PIN,OUTPUT);
}

void loophello(void) {
Generera ljud genom att växla i/o pin hög och låg
Generera en 1KHz ton. Ange PIN-koden för 500uS sedan
låg för 500uS att göra perioden 1ms eller 1KHz.

Ange PIN-koden hög och fördröja för 1/2 en cykel av 1KHz, 500uS.
digitalWrite(SOUNDOUT_PIN,HIGH);
delayMicroseconds(500);

Ange PIN-koden låg och fördröja för 1/2 en cykel av 1KHz, 500uS.
digitalWrite(SOUNDOUT_PIN,LOW);
delayMicroseconds(500);
}

void setuphello1() {
pinMode (13, OUTPUT);
}
void loophello1() {
Delay(3000); 3 СЕК ВТИК
digitalWrite 13, hög.
Delay(125);
digitalWrite 13, låg. // .
Delay(125);
digitalWrite 13, hög.
Delay(125);
digitalWrite 13, låg. // ..
Delay(125);
digitalWrite 13, hög.
Delay(125);
digitalWrite 13, låg. // ...
Delay(125);
digitalWrite 13, hög.
Delay(125);
digitalWrite 13, låg. // .... H
Delay(125);
digitalWrite 13, hög.
Delay(125);
digitalWrite 13, låg. // . E
Delay(125);
digitalWrite 13, hög.
Delay(125);
digitalWrite 13, låg. // .
Delay(125);
digitalWrite 13, hög.
Delay(375);
digitalWrite 13, låg. // . -
Delay(125);
digitalWrite 13, hög.
Delay(125);
digitalWrite 13, låg. // .-.
Delay(125);
digitalWrite 13, hög.
Delay(125);
digitalWrite 13, låg. // .-.. L
Delay(125);
digitalWrite 13, låg. // .
Delay(125);
digitalWrite 13, hög.
Delay(375);
digitalWrite 13, låg. // . -
Delay(125);
digitalWrite 13, hög.
Delay(125);
digitalWrite 13, låg. // .-.
Delay(125);
Delay(125);
digitalWrite 13, hög.
Delay(125);
digitalWrite 13, låg. // .-.. L
Delay(125);
digitalWrite 13, hög.
Delay(375);
digitalWrite 13, låg. // -
Delay(125);
digitalWrite 13, hög.
Delay(375);
digitalWrite 13, låg. // --
Delay(125);
digitalWrite 13, hög.
Delay(375);
digitalWrite 13, låg. // --- O
Delay(3000); 3 СЕК ВТИК
}

Auduino, Lo-Fi granulat synthesizer
//
av Peter Knight, Tinker.it http://tinker.it
//
Hjälp: http://code.google.com/p/tinkerit/wiki/Auduino
Mer hjälp: http://groups.google.com/group/auduino
//
Analog i 0: korn 1 pitch
Analog i 1: korn 2 förfall
Analog i 2: 1 förfalla av spannmål
Analog i 3: korn 2 pitch
Analog i 4: korn 3 pitch
Analog i 5: korn 3 förfall
//
Digital 4: Korn repition frekvens
Digital 5: Korn amplitud frekvens
//
Digital 3: Audio out (Digital 11 på ATmega8)
//
Ändringsloggen:
19 Nov 2008: lagt till stöd för ATmega8 styrelser
21 Mar 2009: lagt till stöd för ATmega328 styrelser
7 Apr 2009: fast avbrottsvektor för ATmega328 brädor
8 Apr 2009: lagt till stöd för ATmega1280 styrelser (Arduino Mega)

#include < avr/io.h >
#include < avr/interrupt.h >

uint16_t syncPhaseAcc;
uint16_t syncPhaseInc;
uint16_t ampPhaseAcc;
uint16_t ampPhaseInc;
uint16_t grainPhaseAcc;
uint16_t grainPhaseInc;
uint16_t grainAmp;
uint8_t grainDecay;
uint16_t grain2PhaseAcc;
uint16_t grain2PhaseInc;
uint16_t grain2Amp;
uint8_t grain2Decay;
uint16_t grain3PhaseAcc;
uint16_t grain3PhaseInc;
uint16_t grain3Amp;
uint8_t grain3Decay;

Karta analoga kanaler
#define GRAIN3_FREQ_CONTROL (4)
#define GRAIN3_DECAY_CONTROL (5)
#define GRAIN_FREQ_CONTROL (0)
#define GRAIN_DECAY_CONTROL (2)
#define GRAIN2_FREQ_CONTROL (3)
#define GRAIN2_DECAY_CONTROL (1)

Karta digitala kanaler
#define SYNC_CONTROL (4)
#define AMP_CONTROL (5)

Ändra dessa kommer kräver också skriva om audioOn()

#if defined(__AVR_ATmega8__)
//
På gamla ATmega8 styrelser.
Produktionen är på stift 11
//
#define LED_PIN 13
#define LED_PORT PORTB
#define LED_BIT 5
#define PWM_PIN 11
#define PWM_VALUE OCR2
#define PWM_INTERRUPT TIMER2_OVF_vect
#elif defined(__AVR_ATmega1280__)
//
På Arduino Mega
Produktionen är på stift 3
//
#define LED_PIN 13
#define LED_PORT PORTB
#define LED_BIT 7
#define PWM_PIN 3
#define PWM_VALUE OCR3C
#define PWM_INTERRUPT TIMER3_OVF_vect
#else
//
För moderna ATmega168 och ATmega328 styrelser
Produktionen är på stift 3
//
#define PWM_PIN 3
#define PWM_VALUE OCR2B
#define LED_PIN 13
#define LED_PORT PORTB
#define LED_BIT 5
#define PWM_INTERRUPT TIMER2_OVF_vect
#endif

Smidig logaritmisk kartläggning
//
uint16_t antilogTable [] = {
64830,64132,63441,62757,62081,61413,60751,60097,59449,58809,58176,57549,56929,56316,55709,55109,
54515,53928,53347,52773,52204,51642,51085,50535,49991,49452,48920,48393,47871,47356,46846,46341,
45842,45348,44859,44376,43898,43425,42958,42495,42037,41584,41136,40693,40255,39821,39392,38968,
38548,38133,37722,37316,36914,36516,36123,35734,35349,34968,34591,34219,33850,33486,33125,32768
};
uint16_t mapPhaseInc (uint16_t ingång) {
Return (antilogTable [input & 0x3f]) >> (ingång >> 6);
}

Klev kromatisk kartläggning
//
uint16_t midiTable [] = {
17,18,19,20,22,23,24,26,27,29,31,32,34,36,38,41,43,46,48,51,54,58,61,65,69,73,
77,82,86,92,97,103,109,115,122,129,137,145,154,163,173,183,194,206,218,231,
244,259,274,291,308,326,346,366,388,411,435,461,489,518,549,581,616,652,691,
732,776,822,871,923,978,1036,1097,1163,1232,1305,1383,1465,1552,1644,1742,
1845,1955,2071,2195,2325,2463,2610,2765,2930,3104,3288,3484,3691,3910,4143,
4389,4650,4927,5220,5530,5859,6207,6577,6968,7382,7821,8286,8779,9301,9854,
10440,11060,11718,12415,13153,13935,14764,15642,16572,17557,18601,19708,20879,
22121,23436,24830,26306
};
uint16_t mapMidi (uint16_t ingång) {
Return (midiTable[(1023-input) >> 3]);
}

Klev pentatoniska kartläggning
//
uint16_t pentatonicTable [54] = {
0,19,22,26,29,32,38,43,51,58,65,77,86,103,115,129,154,173,206,231,259,308,346,
411,461,518,616,691,822,923,1036,1232,1383,1644,1845,2071,2463,2765,3288,
3691,4143,4927,5530,6577,7382,8286,9854,11060,13153,14764,16572,19708,22121,26306
};

uint16_t mapPentatonic (uint16_t ingång) {
uint8_t värde = (1023-ingång) / (1024/53);
avkastning (pentatonicTable[value]);
}

void audioOn() {
#if defined(__AVR_ATmega8__)
ATmega8 har olika register
TCCR2 = _BV(WGM20) | _BV(COM21) | _BV(CS20);
TIMSK = _BV(TOIE2);
#elif defined(__AVR_ATmega1280__)
TCCR3A = _BV(COM3C1) | _BV(WGM30);
TCCR3B = _BV(CS30);
TIMSK3 = _BV(TOIE3);
#else
Ställ in PWM till 31.25 kHz, fasen exakt
TCCR2A = _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(CS20);
TIMSK2 = _BV(TOIE2);
#endif
}

void setupRun() {
pinMode(PWM_PIN,OUTPUT);
audioOn();
pinMode(LED_PIN,OUTPUT);
}

void loopRun() {
Slingan är ganska enkel - det uppdaterar bara parametrarna för oscillatorerna.
//
Undvik att använda alla funktioner som gör omfattande användning av avbrott eller inaktivera avbrott.
De kommer att orsaka klick och bajsar i ljudet.

Smidig frekvens kartläggning
syncPhaseInc = mapPhaseInc(digitalRead(SYNC_CONTROL)) / 4;
ampPhaseInc = mapPhaseInc(digitalRead(AMP_CONTROL)) / 5;

Klev mappning till MIDI-noter: C, Db, D, Eb, E, F...
syncPhaseInc = mapMidi(digitalRead(SYNC_CONTROL));

Klev pentatoniska mappning: D, E, G, A, B
syncPhaseInc = mapPentatonic(digitalRead(SYNC_CONTROL));

grainPhaseInc = mapPhaseInc(analogRead(GRAIN_FREQ_CONTROL)) / 2;
grainDecay = analogRead(GRAIN_DECAY_CONTROL) / 8;
grain2PhaseInc = mapPhaseInc(analogRead(GRAIN2_FREQ_CONTROL)) / 2;
grain2Decay = analogRead(GRAIN2_DECAY_CONTROL) / 4;
grain3PhaseInc = mapPhaseInc(analogRead(GRAIN3_FREQ_CONTROL)) /2;
grain3Decay = analogRead(GRAIN2_DECAY_CONTROL) / 2;
}

SIGNAL(PWM_INTERRUPT)
{
uint8_t värde;
uint16_t utgång;

syncPhaseAcc += syncPhaseInc;
om (syncPhaseAcc < syncPhaseInc) {
Dags att börja nästa säden
grainPhaseAcc = 0;
grainAmp = 0x7fff;
grain2PhaseAcc = 0;
grain2Amp = 0x7fff;
grain3PhaseAcc = 0;
grain3Amp = 0x7fff;
LED_PORT ^ = 1 << LED_BIT; Snabbare än med digitalWrite
}

Öka fasen av korn oscillatorer
grainPhaseAcc += grainPhaseInc;
grain2PhaseAcc += grain2PhaseInc;

Konvertera fas i en triangel våg
värde = (grainPhaseAcc >> 7) & 0xff;
om (grainPhaseAcc & 0x8000) värde = ~ värde;
Multiplicera med nuvarande korn amplitud att få prov
output = värde * (grainAmp >> 8);

Upprepa på andra spannmål
värde = (grain2PhaseAcc >> 7) & 0xff;
om (grain2PhaseAcc & 0x8000) värde = ~ värde;
utgång += värde * (grain2Amp >> 8);
Upprepa för tredje korn
värde = (grain3PhaseAcc >> 7) & 0xff;
om (grain3PhaseAcc & 0x8000) värde = ~ värde;
utgång += värde * (grain3Amp >> 8);

Gör säden amplituder klinga med en faktor av varje prov (exponentiell decay)
grainAmp-= (grainAmp >> 8) * grainDecay;
grain2Amp-= (grain2Amp >> 8) * grain2Decay;
grain3Amp-= (grain3Amp >> 8) * grain3Decay;

Skala till det tillgängliga utbudet, klippning vid behov
utgång >> = 9;
om (output > 255) output = 255;

Utgång till PWM (detta är snabbare än att använda analogWrite)
PWM_VALUE = produktion;
}

/ * Tungt baserat på http://ardx.org/src/circ/CIRC06-code.txt
* och även http://ardx.org/src/circ/CIRC07-code.txt
* Krets information på http://www.oomlout.com/oom.php/products/ardx/circ-06
* och http://www.oomlout.com/oom.php/products/ardx/circ-07
* kan också hjälpa
*
* Beräkning av tonerna är gjord efter den matematiska
* operation:
*
* timeHigh = period / 2 = 1 / (2 * toneFrequency)
*
* där beskrivs de olika tonerna som i tabellen:
*
* Observera frekvensen antika 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
* en 440 Hz 2272 1136
* b 493 Hz 2028 1014
* C 523 Hz 1912 956
*
* http://www.arduino.cc/en/Tutorial/Melody
*/
int inputPin1 = 9;
int inputPin2 = 10;
int inputPin3 = 11;
int inputPin4 = 12;
int speakerPin = 3;
int val = 0;

int längd = 1; antalet anmärkningar
char noterar [] = {
'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; ett utrymme representerar en vila
int slår [] = {
1}.
int tempo = 300;

{Ogiltig playTone (int tonen, int längd)
för (länge jag = 0; jag < varaktighet * 1000L; i += tonen * 2) {
digitalWrite (speakerPin, hög);
delayMicroseconds(tone);
digitalWrite (speakerPin, låg);
delayMicroseconds(tone);
}
}

void playNote (char note, int varaktighet) {
char namn [] = {
'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int toner [] = {
1915, 1700, 1519, 1432, 1275, 1136, 1014, 956};

spela tonen motsvarar tonens namn
för (int jag = 0; jag < 8; i ++) {
om (namn [i] == OBS) {
playTone (toner [i], varaktighet);
}
}
}

void setupTone() {
pinMode (speakerPin, produktionen);
pinMode (inputPin1, ingång);
pinMode (inputPin2, ingång);
pinMode (inputPin3, ingång);
pinMode (inputPin4, ingång);
}

void loopTone() {
om (digitalRead(inputPin1) == hög) {
playNote (noterar [0], 300);
}
annat if (digitalRead(inputPin2) == hög) {
playNote (noterar [1], 300);
}
annat if (digitalRead(inputPin3) == hög) {
playNote (sedlar [2], 300);
}
annat if (digitalRead(inputPin4) == hög) {
playNote (noterar [3], 300);
}
annat {
digitalWrite (speakerPin, låg);
}
}

/ * Ursprungliga koden skapad 21 Jan 2010
/ modifierade 30 Aug 2011
/ av Tom Igoe (http://pastebin.com/tCYvfky9) och konfigureras av mig 2013 (min koden nedan)
/
/ När du firgure ut hur du ansluter arduino och gjorde det spela grundläggande melodin. Du borde börja kodning
/
/ Först du kommer behöver de anteckningar du kan kopiera klistra in min eller bara kopiera den från http://arduino.cc/en/Tutorial/Tone
/
*/

Vi börjar med ställa alla journalanteckningar

#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978

/*
Knappen

Slår på och av en ljusavgivande diode(LED) ansluten till digital
stift 13, när du trycker på en tryckknapp ansluten till stift 7.

Krets:
* LED fästs marken från stift 13
* tryckknapp ansluten till stift 6 från + 5V
* 10K resistor bifogas till stift 6 från marken

* Obs: på de flesta Arduinos finns redan en LED i styrelsen
kopplade till stift 13.

skapade 2005
av DojoDave < http://www.0j0.org>
modifierade 17 Jun 2009
av Tom Igoe

http://www.Arduino.cc/en/tutorial/Button
*/

konstanter ändras inte. De används här till
Ange pin-koder:
CONST int buttonPin = 6; numrera av tryckknapp PIN-koden
int Buzzer1 = 3;

variabler som ändras:
int buttonState = 0; variabel för att läsa tryckknapp status

void setupMelody() {
initiera piezo som utdata:
pinMode (Buzzer1, OUTPUT);
initiera tryckknapp PIN-koden som indata:
pinMode (buttonPin, ingång);
}

void loopMelody() {
Läs statligt av tryckknapp värdet:
buttonState = digitalRead(buttonPin);

Kontrollera om tryckknappen trycks.
om det är, är buttonState hög:
om (buttonState == hög) {
spela th musik
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,450,225);
Delay(300);
Tone(Buzzer1,450,225);
Delay(500);
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,450,200);
Delay(300);
Tone(Buzzer1,600,300);
Delay(300);
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,700,300);
Delay(300);
Tone(Buzzer1,700,300);
Delay(500);
Tone(Buzzer1,600,300);
Delay(300);
Tone(Buzzer1,400,200);
Delay(1000);
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,650,200);
Delay(500);
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,650,200);
Delay(300);
Tone(Buzzer1,650,200);
Delay(500);
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,400,200);
Delay(1000);
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,600,300);
Delay(500);
Tone(Buzzer1,600,300);
Delay(500);
Tone(Buzzer1,800,300);
Delay(500);
Tone(Buzzer1,800,300);
Delay(500);
Tone(Buzzer1,400,200);
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,400,200);
Delay(500);
Tone(Buzzer1,300,150);
Delay(500);
Tone(Buzzer1,300,150);
Delay(500);
Tone(Buzzer1,300,150);
Delay(500);
Tone(Buzzer1,300,150);
Delay(500);
Tone(Buzzer1,300,150);
Tone(Buzzer1,300,150);
Tone(Buzzer1,300,150);
Tone(Buzzer1,300,150);

}
}

/*
Kapacitiv Touch Arduino Keyboard Piano

Spelar piano toner genom en Summer när användaren kranar beröring-känslig piano "nycklar"

Skapad 18 maj 2013
Modifierad 23 maj 2013
Tyler Crumpton och Nicholas Jones

Denna kod är ut till offentligheten. Information om banan,
Besök den Instructable tutorial på
*/

#include < CapacitiveSensor.h >

#define COMMON_PIN 0 / / gemensamma "Skicka" pin för alla nycklar
#define BUZZER_PIN 3 / / produktionen stift för piezo summern
#define NUM_OF_SAMPLES 10 / / högre antal när mer fördröja men mer konsekvent avläsningar
#define CAP_THRESHOLD 150 / / Capactive läsning som utlöser en anteckning (justera för att passa dina behov)
#define NUM_OF_KEYS 2 / / antal nycklar som finns på tangentbordet

Detta makro skapar en kapacitans "nyckel" sensor-objekt för varje nyckel på piano tangentbordet:
#define CS(Y) CapacitiveSensor (0, Y)

Varje nyckel motsvarar en anteckning, som definieras här. Avkommentera den skala som du vill använda:
int notes1 [] = {
NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5}; C-dur skala
int notes1 [] = {NOTE_A4, NOTE_B4, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5}; A-moll skala
int notes1 [] = {NOTE_C4, NOTE_DS4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_AS4, NOTE_C5, NOTE_DS5}; C Blues-skalan

Definierar de stift som nycklarna är anslutna till:
CapacitiveSensor nycklar [] = {
CS(7), CS(8)};

void setupcap() {
Stänga av autocalibrate på alla kanaler:
för (int jag = 0; jag < 8. ++ jag) {
Keys[i].set_CS_AutocaL_Millis(0xFFFFFFFF);
}
Här summern som en utgång:
pinMode (BUZZER_PIN, OUTPUT);
}

void loopcap() {
Loopa igenom varje nyckel:
för (int jag = 0; jag < 8. ++ jag) {
Om kapacitans läsning är större än tröskelvärdet, spela en anteckning:
IF(Keys[i].capacitiveSensor(NUM_OF_SAMPLES) > CAP_THRESHOLD) {
tonen (BUZZER_PIN, notes[i]); Spelar den anmärkning som motsvarar den nedtryckt
}
}
}

Se Steg
Relaterade Ämnen