A(T)tiny StarBird (3 / 10 steg)
Steg 3: Övergången till ATtiny och slutlig skiss
Jag använde Arduino för att programmera ATtiny följa instruktionerna här. Men jag såg till att använda kärnan hittade här, eftersom det är dokumenterat för att stödja funktionen tonar.
Jag bygger banan på en skärbräda göra ytterligare tester. En viktig skillnad är att funktionen tonen på ATtiny inte fungerar med parametervärdet 50. Ljudet startar endast på ett värde av cirka en 100.
(Om du tittar noga på bilderna nedan, kan du som i detta skede jag använde en pull-down resistor för växeln touch, i stället för en pull-up resistor på alla ingångar som i den slutliga versionen för en mer konsekvent bygga.)
När testning, märkte jag den analoga ingången kan påverkas av varandra. Till exempel den tilt kontakten skulle utlösa bränning. sänka värdet touch switch trigger till 333 i stället för 500 (ca 1/3 i stället för halvvägs) löst som. Jag har inte undersökt vidare till korset influenser. Om någon kan förklara fenomen och vet hur man undvika den här, behaga låta mig veta.
Här är den slutliga skissen:
/*
En liten Starbird (T)
En reproduktion av den klassiska MB StarBird
motorljud i tonhöjd när skivan lutas förändras
med en själv gjort tilt växla och
för "bränning" lysdioder en resistiv switch.
För en fullständig beskrivning se: www.instructables/
skapad 23 augusti 2012
av masynmachien
Denna kod är i public domain.
*/
int EnginePitchBy3 = 300;
Variabeln pitch indikator används den faktiskt
pitch parametern för funktionen ton multiplicerat med 3.
Detta är att matcha tonhöjden ändra hastighet och sund intervall,
(se vidare). Det finns faktiskt ett minimum för tonen
funktionen till arbete och det verkar vara högre för ATtiny
än för Arduino.
int brand [] = {820,795,770,795}.
pitch bränning ljud
booleska LED [] = {HIGH, LOW, HIGH, LOW};
LED belysning mönster
Rutinen installationsprogrammet körs när när du slår på strömmen
Återställning är inte användbar med hardwre design används):
void setup() {
initiera seriell kommunikation (för felsökning endast):
pinMode (0, OUTPUT); utgångsstiftet O är att köra två lysdioder parallellt
pinMode (1, OUTPUT); utgångsstiftet 1 är att köra piezo speaker
Dessa inställningar är förmodligen inte behövs på ATTINY?
De finns kvar från prototyper på Arduino och skadar inte.
}
void loop() {
Läs två tilt växlar var som en analog
input drog upp till VCC av hög ohms motstånd.
Ingen avsiktlig debouncing tillämpas som oegentligheter
större än filterd av 11 ms tidsintervallet när
producerar det önskade ljudet bara lägger till ljudeffekten.
IF(analogRead(a2) < 500)
{//when "upp" tilt switch drar analog ingång mot Gnd
om (EnginePitchBy3 < 2400)
{/ / endast om ett valt högsta inte är ännu nått
EnginePitchBy3 = EnginePitchBy3 + 1.
öka pitch indikator
}
}
annars om (analogRead(A3) < 500)
{//when "down" tilt switch drar analog ingång mot Gnd
om (EnginePitchBy3 > 300)
{/ / endast om minsta pitch jag ännu inte nått
EnginePitchBy3-= 1;
minska pitch indikator
}
}
Läs växeln touch "bränning button", in som en analog
input drog till GnD av hög ohms motstånd.
Ingen avsiktlig debouncing tillämpas, men de tid för den
Sound spelade ger några grova debouncing.
IF(analogRead(a1) > 333)
{/ / När touch switch analog ingång inte dras av
vidröra det tillsammans med en kontakt på Vcc betyder det ingen "bränning",
och flygande ljudet spelas:
tonen (0, EnginePitchBy3/3, 10).
Delay(11);
Fördröjningen anger en ms längre än den spela tonen
gör det låter mer som en motor.
}
annat
{
Annars, bränning ljudet spelas.
för (int patternCounter = 0; patternCounter < 4; patternCounter ++)
{
tonen (0, fire [patternCounter], 60); modulerande bränning ljudet
digitalWrite (1, LED[patternCounter]); modulerande lysdioder
Delay(57); fördröjningen ligger något kortare för kontinuerlig ljud.}
}
}
}