Felsöka ditt bilbatteri med ATtiny. (3 / 9 steg)
Steg 3: programvara
Denna skiss är mycket enkelt, bara en serie av på varandra följande om instruktioner att jämföra spänning läsa igenom ADC3 med några fördefinierade värden. Om du följer koden noga, ser du att de värden som visas i bildspelet teori för drift i steg 1 är samma värden som används i olika om instruktioner för att avgöra vilken LED bör komma på.
För att skapa den blinkande effekten på lysdioder när spänningar är högre än 13.1V, ökas en räknare med ett på varje pass genom den del av koden. Innan koden loopar tillbaka till läsa ADC3 igen, är utförandet fördröjd 100 millisekunder. OM instruktionerna aktivera lysdioder när pass räknaren är under 6 och tur LEDs av när räknaren är mellan 6 och 11. När räknaren når 11, räknaren återställs till noll upprepa cykeln.
ADC3 indata används för att läsa analog spänning kommer från spänningsdelare. Förresten, hade ADC0 varit förstahandsvalet som projektets analog ingång, emellertid, när spänningen kommer från batteriet var lite lägre än 8.7V alla tre lysdioder skulle gå ut. Detta verkade inte rätt som jag hade använt en låg-hoppar spänningsregulator. Efter lite mer forskning på nätet fann jag att när du använt en pin som indata som kunde också fungera som hårdvaran Reset, dessa saker kunde hända. När ADC3 valdes som analog ingång, batterispänning kunde komma nära 6V och röd LED skulle fortfarande vara på vilket innebär att programmet fortfarande skulle vara igång. Det var då att för att förhindra ytterligare problem, oanvända stift 1 och 5 drogs upp till + 5V via 10 K motstånd.
ATtiny 13 kod:
Denna skiss övervakar batterispänningen och vänder på en LED-baserad på den.
Processor: ATtiny 13.
Författare: rlarios
Datum: 13.04.03
//
int rLED = 4; Röd lysdiod stift
int yLED = 1; Gul LED stift
int gLED = 2; Grön LED stift
int val = 0; Denna variabel kommer att hålla spänning indatavärde
int dlyctr = 0; Detta är räknaren dröjsmål.
void setup() {
pinMode (rLED, produktionen); Definiera röd lysdiod utgång
pinMode (yLED, produktionen); dito gula LED
pinMode (gLED, produktionen); dito grön LED
}
void loop() {
Val = analogRead(A3); Läs spänning genom Analog ingång 3
IF(val<452) {//Is batterispänning under 9.6V?
digitalWrite (rLED, hög); Ja, detta är dåligt, slå på röd lysdiod
digitalWrite (yLED, låg); Stänga av gula LED
digitalWrite (gLED, låg); Stänga av grön LED
}
annat
{
IF(val<594) {//Is batteriets spänning mellan 9.6V och 12.4V?
digitalWrite (rLED, låg); Detta är en låg spänning, stänga av röd LED
digitalWrite (yLED, hög); Aktivera gul LED som en varning.
digitalWrite (gLED, låg); Stänga av grön LED
}
annat
{
IF(val<629) {//Is batteriets spänning mellan 12.4V och 13.1V medan tomgång?
digitalWrite (rLED, låg); Ja, stänga av röd lysdiod
digitalWrite (yLED, låg); Stänga av gula LED
digitalWrite (gLED, hög); Aktivera grön LED anger fulladdat batterispänning.
}
annat
{
dlyctr = dlyctr + 1. öka dröjsmål counter. varje pass ca 100ms
IF(val<751) {//Is batteriets spänning över 13.1V och under 15.5V?
digitalWrite (rLED, låg); Stänga av röd LED
digitalWrite (yLED, låg); Stänga av gula LED
IF(dlyctr<6) {
digitalWrite (gLED, hög); Puls grön lysdiod i en halv sekund
}
annat
{
digitalWrite (gLED, låg); Puls grön ledde bort i en halv sekund att Visa batteriet laddas.
IF(dlyctr>10) {
dlyctr = 0; Återställ räknaren för fördröjning
}
}
}
annat //Battery spänning är över 15.5V. Fara! Överprissättning
{
digitalWrite (yLED, låg); Stänga av gula LED
digitalWrite (gLED, låg); Stänga av grön LED
IF(dlyctr<6) {
digitalWrite (rLED, hög); Aktivera röd lysdiod för en halv sekund.
}
annat
{
digitalWrite (rLED, låg); Stänga av röd lysdiod för en halv sekund.
IF(dlyctr>10) {
dlyctr = 0; Återställ räknaren för fördröjning
}
}
}
Delay(100); Stoppa programmet 100 millisekunder för att hjälpa puls lysdioder.
}
}
}
}