Stap 3: De overgang naar ATtiny en definitieve schets
Ik gebruikte de Arduino te programmeren de ATtiny volgens de instructies hier. Maar ik zorgde ervoor te gebruiken de kern gevonden hier, omdat het wordt beschreven ter ondersteuning van de functie Testsignaal.
Ik het opbouwen van het circuit op een breadboard te doen verder te worden getest. Een belangrijk verschil is dat de tone-functie op de ATtiny niet met een waarde van de parameter van 50 werkt. Het geluid begint alleen bij een waarde van ongeveer een 100.
(Als je goed op de foto's hieronder kijkt, kunt u die in dat stadium gebruikte ik een weerstand van de pull-down voor het touch-switch, in plaats van een pull-up weerstand op alle "inputs" zoals in de definitieve versie voor een meer consistente bouwen.)
Bij het testen van, ik heb gemerkt dat de analoge ingang kan worden beïnvloed door elkaar. Bijvoorbeeld de de tilt contact zou leiden tot het afvuren. verlagen van de aanraking switch trigger waarde tot en met 333 in plaats van 500 (ongeveer 1/3 in plaats van halverwege) dat opgelost. Ik heb niet onderzoeken verder in het Kruis beïnvloedt. Als iemand de verschijnselen uitleggen kan en/of weet hoe om dit te voorkomen, laat het me weten.
Hier is de definitieve schets:
/*
Een (T) kleine Starbird
Een reproductie van de klassieke MB StarBird
motor lawaai wijzigen in toonhoogte wanneer gekanteld,
tilt schakelen featuring een zelf gemaakt en
voor "bakken" LEDs een resistieve schakelaar.
Zie voor een volledige beschrijving: www.instructables/
gemaakt op 23 augustus 2012
door masynmachien
Deze code is in het publieke domein.
*/
int EnginePitchBy3 = 300;
De toonhoogte indicator variabele gebruikt is het eigenlijk
Pitch-parameter voor de functie Testsignaal vermenigvuldigd met 3.
Dit moet overeenkomen met de toonhoogte veranderen van snelheid en geluid interval,
(zie verder). Er is eigenlijk een minimum voor de Toon
functie voor het werk en het lijkt te zijn hoger voor de ATtiny
dan voor de Arduino.
int brand [] = {820,795,770,795};
toonhoogte afvuren geluid
Booleaanse LED [] {hoog, laag, hoog, laag} =;
LED verlichting patroon
De setup-routine wordt uitgevoerd zodra wanneer u op de macht overschakelt
Reset is niet bruikbaar met het ontwerp van de hardwre gebruikt):
VOID Setup {}
Initialiseer seriële communicatie (voor foutopsporing alleen):
pinMode (0, OUTPUT); uitgang pins O is om te rijden twee LEDs in parallel
pinMode (1, OUTPUT); uitgang pins 1 is om te rijden de piëzo-luidspreker
Deze opstellingen, zijn waarschijnlijk niet nodig op ATTINY?
Ze blijven van prototyping op Arduino en niet schadelijk zijn.
}
void loop {}
Lezen van twee tilt switches, instellen als een analoge
input trok aan VCC door hoge ohm weerstand.
Geen doelbewuste debouncing wordt toegepast als onregelmatigheden
filterd door het tijdsinterval 11 ms groter wanneer
gewoon het gewenste geluid produceren wordt toegevoegd aan het geluidseffect.
if(analogRead(a2) < 500)
{//when "up" tilt schakelaar trekt analoge input tot een Gnd
Als (EnginePitchBy3 < 2400)
{/ / slechts als een maximale gekozen is nog niet bereikt
EnginePitchBy3 = EnginePitchBy3 + 1;
indicator van de toonhoogte verhogen
}
}
else if (analogRead(A3) < 500)
{//when "down" tilt schakelaar trekt analoge input tot een Gnd
Als (EnginePitchBy3 > 300)
{/ / slechts als minimale worp die ik nog niet bereikt
EnginePitchBy3-= 1;
indicator van de toonhoogte verlagen
}
}
Lees de touch-switch "bakken button", opgezet als een analoge
input trok met GnD door hoge ohm weerstand.
Geen doelbewuste debouncing wordt toegepast, maar de tijd genomen door de
goed gespeeld geeft enkele ruwe debouncing.
if(analogRead(a1) > 333)
{/ / Wanneer de touch schakelaar analoge ingang is niet trok door
raken het samen met een contactpersoon bij Vcc betekent dit geen "bakken",
en de vliegende lawaai wordt gespeeld:
Toon (0, EnginePitchBy3/3, 10);
delay(11);
De vertraging instellen een ms langer dan de lengte van de spelen van de Toon
maakt het geluid meer als een motor.
}
anders
{
Anders, het afvuren lawaai wordt gespeeld.
voor (int patternCounter = 0; patternCounter < 4; patternCounter ++)
{
Toon (0, brand [patternCounter], 60); moduleren van het geluid van vuren
digitalWrite (1, LED[patternCounter]); modulerende LEDs
delay(57); vertraging ligt iets korter voor continue geluid.}
}
}
}