A(T)tiny StarBird (2 / 10 steg)
Steg 2: Breadboarding med Arduino
Jag började utforska ljudet av funktionen tonar på Arduino, ändra pitch, varaktighet och förseningar (en bra intro på Arduino, se denna kompatibel).
För den motorn jag började kontrollera tonhöjd lägsta parametervärdet spelade, som verkar vara 50 (men vände för att vara runt 100 för ATtiny kärnan). Jag fick idén att ställa in fördröjningen mellan tonerna spelade lite längre än tonen i toneMelody exempel. En ton av 10 ms och en fördröjning på 11ms längre ger det en "motor-liknande rippel".
Jag gjorde ett litet testprogram ändra tonhöjden på två toner, ute i kombination som gav en klassiker "utrymme kanon ljud" som påminner om StarBird (se skiss ingår nedan). Som indata använde jag två dubbla tilt växlar som indata. Då jag experimenterade fortfarande med tre statliga växlar bara använder en analog ingång varje (se kopplingsschemat), ett begrepp jag tappade senare som förklaras i steget på tilt switch.
Varaktigheterna och förseningar vid testning genom att ändra och åter ladda upp programmet. Här märkte jag det var bäst att ange fördröjningen ett par ms kortare än tonen varaktighet, för en smidig ljudet.
Sedan la jag några enkla på-av växlingen av lysdioderna efter ljud mönstret.
Här är testprogrammet:
/*
StarBird ljud Test
skapad 3 augusti 2012
av masynmachien
Denna kod är i public domain.
*/
CONST int tonepin = 3; Tone outputpin senare ska ändras
att undvika att störa uppladdning
int thisPitch = 820;
int Pitchdelta = 55.
int tid = 60.
int timeminus = 57;
void setup() {
initiera seriell kommunikation (för felsökning endast):
Serial.BEGIN(9600);
}
void loop() {
Läs threestate växeln:
int sensorReading = analogRead(A0);
IF(sensorReading > 800)
{
öka tonhöjd när drog mot 5 V
om (thisPitch < 20000)
{/ / maximumum pitch
thisPitch = thisPitch + 1.
}
}
annars om (sensorReading < 200)
{
minska tonhöjd när drog mot 5 V
om (thisPitch > 700)
{/ / minsta pitch
thisPitch = thisPitch - 1;
}
}
Läs threestate växeln:
int sensorReading2 = analogRead(A5);
IF(sensorReading2 > 800)
{
öka tonhöjd när drog mot 5 V
om (Pitchdelta < 10000)
{/ / maximumum pitch
Pitchdelta = Pitchdelta + 1.
}
}
annars om (sensorReading2 < 200)
{
minska tonhöjd när drog mot 5 V
om (Pitchdelta > 0)
{/ / minsta pitch
Pitchdelta = Pitchdelta - 1;
}
}
spela på planen:
tonen (tonepin, thisPitch, tid);
Delay(timeminus); dröjsmål i mellan läser för stabilitet
tonen (tonepin, thisPitch-(Pitchdelta/2), tid);
Delay(timeminus); dröjsmål i mellan läser för stabilitet
tonen (tonepin, thisPitch-Pitchdelta, tid);
Delay(timeminus); dröjsmål i mellan läser för stabilitet
tonen (tonepin, thisPitch-(Pitchdelta/2), tid);
Delay(timeminus); dröjsmål i mellan läser för stabilitet
Serial.println(thisPitch);
Serial.println(Pitchdelta);
}