Trådlös mekanisk avtryckare (4 / 11 steg)
Steg 4: Programmera mikrokontroller
Fasad är en söt liten förpackade upp ATiny85 mikrokontroller som Ladyada's team piskade upp och den passar perfekt i detta projekt på grund av sin ringa storlek och servo bibliotek stöd.
Det finns några speciella instruktioner för att ställa in prydnadssak för programmering som du hittar på Ladyada ".
Alla viktiga prydnadssak Servo biblioteket kan också hittas på Ladyada ".
Den kod som jag använder är mycket enkel, när prydnadssak DIO #1 stift går hög det aktiverar svängar 20 degees medsols, och när DIO #1 stift går lågt servo går 20 grader moturs.
Koden hämtas på Adafruit exempelkod:
/*******************************************************************
SoftServo skiss för Adafruit prydnadssak.Krävs arkiv är det Adafruit_SoftServo arkivet
tillgänglig på https://github.com/adafruit/Adafruit_SoftServo
Arduino IDE servo standardbiblioteket fungerar inte med 8 bitar
AVR microcontrollers som fasad och Gemma på skillnader
i tillgängliga timer hårdvara och programmering. Vi helt enkelt uppdatera
av piggy-stöd på räknaren timer0 millis()Som skrivet, är detta specifikt för prydnadssak även om det ska
vara Gemma eller andra styrelser (Arduino Uno o.s.v.) med korrekt pin mappningarPrydnadssak: USB + Gnd Pin #0 Pin #2 A1
Anslutning: Servo + - Servo1 Potentiometer wiper*******************************************************************/
#include / / SoftwareServo (fungerar på icke PWM stift)
#define SERVO1PIN 0 / / Servo kontroll linje (orange) på prydnadssak Pin #0
Adafruit_SoftServo myServo1; servo objekt skapas
void setup() {
Ställ in avbrottet som kommer uppdatera servo för oss automagiskt
pinMode (1, ingång);
OCR0A = 0XAF; alla nummer är OK
TIMSK | = _BV(OCIE0A); Slå på Jämför avbrottet (nedan!)myServo1.attach(SERVO1PIN); Bifoga servo till nåla fast 0 på fasad
myServo1.write(150); Berätta servo gå för att placera per quirk
Delay(15); Vänta 15 MS för servo att nå ställning
}void loop() {
om (digitalRead(1) == 1)
{
myServo1.write(170); berätta servo gå att placera
}
annat
{
myServo1.write(150);
}\
Delay(15); Waits 15 MS för servo att nå ställning
}Vi ska dra nytta av den inbyggda i millis() timer som slocknar
att hålla reda på tid och uppdatera servo var 20 millisekunder
Funktionen SIGNAL(TIMER0_COMPA_vect) är avbrottet kommer att
Kallas av mikrokontroller varje 2 millisekunder
flyktiga uint8_t counter = 0;
SIGNAL(TIMER0_COMPA_vect) {
Detta blir kallade varje 2 millisekunder
räknaren += 2.
varje 20 millisekunder, uppdatera servon!
om (counter > = 20) {
räknare = 0;
myServo1.refresh();
}
}