Stap 4: De Microcontroller programmeren
De trinket is een schattig ATiny85 microcontroller die Ladyada van team opgeklopte en het past perfect in dit project vanwege haar verkleinwoord grootte en servo bibliotheek steun beetje verpakt.
Er zijn een aantal speciale instructies voor het opzetten van de Trinket voor programmering die u op Ladyada vinden kunt '.
De alle belangrijke Trinket Servo-bibliotheek kan ook gevonden worden op Ladyada'.
De code die ik momenteel gebruik is zeer eenvoudig, wanneer de Trinket DIO #1 pin gaat hoog activeert het beurt 20 degees met de klok mee, en wanneer DIO #1 pin laag de servo gaat gaat 20 graden tegen de klok in.
Code is afgeleid op Adafruit voorbeeldcode:
/*******************************************************************
SoftServo schets voor Adafruit Trinket.Vereiste library is de bibliotheek Adafruit_SoftServo
beschikbaar op https://github.com/adafruit/Adafruit_SoftServo
De Arduino IDE servo-standaardbibliotheek werkt niet met 8 bits
AVR-microcontrollers zoals Trinket en Gemma als gevolg van verschillen
in de beschikbare timer-hardware en programmering. We gewoon Vernieuw
door piggy-steun op de teller van de millis() timer0Zoals geschreven, is dit specifiek voor de Trinket, hoewel het zou moeten
Gemma of andere boards (Arduino Uno, enz.) worden met de juiste pin-toewijzingenTrinket: USB + Gnd Pin #0 Pin #2 A1
Verbinding: Servo + - Servo1 Potentiometer wisser*******************************************************************/
#include / / SoftwareServo (werkt op niet PWM pinnen)
#define SERVO1PIN 0 / / Servo bediening lijn (oranje) op Trinket Pin #0
Adafruit_SoftServo myServo1; servo-object maken
VOID Setup {}
De interrupt die de servo voor ons automagisch vernieuwen zal instellen
pinMode (1, ingang);
OCR0A = 0XAF; een willekeurig getal is OK
TIMSK | = _BV(OCIE0A); Zet de vergelijk-interrupt (hieronder!)myServo1.attach(SERVO1PIN); Bevestig de servo om pin 0 op Trinket
myServo1.write(150); Vertellen van de servo naar positie per gril
delay(15); Wachten 15ms voor de servo te bereiken de positie
}void loop {}
Als (digitalRead(1) == 1)
{
myServo1.write(170); vertellen van de servo naar positie
}
anders
{
myServo1.write(150);
}\
delay(15); wacht 15ms voor de servo te bereiken de positie
}Zullen we gebruik maken van de ingebouwde in millis() timer die afgaat
bijhouden van de tijd, en vernieuwen van de servo elke 20 milliseconden
De SIGNAL(TIMER0_COMPA_vect) functie is de interrupt die zal worden
Genoemd door de microcontroller elke 2 milliseconden
vluchtige uint8_t counter = 0;
Signal(TIMER0_COMPA_vect) {}
Dit wordt genoemd elke 2 milliseconden
teller += 2;
elke 20 milliseconden, vernieuwen de servo's!
Als (teller > = 20) {}
Counter = 0;
myServo1.refresh();
}
}