Stap 3: Programma de microcontroller
De microcontroller te programmeren. Ik ga niet in detail te treden over hoe te programmeren van een ATtiny85, want dat heel goed in vele andere plaatsen, zoals deze gebeurt. Maar hier is de code die ik gebruikt.
#include < avr/sleep.h > Const int buzzerPin = 3; VOID Setup VOID wake)
Const int button1Pin = 1;
Const int button2Pin = 2;
Const int button3Pin = 4;
int myTone = 0;
unsigned long lastWake;
{
pinMode (buzzerPin, OUTPUT);
pinMode (button1Pin, INPUT);
pinMode (button2Pin, INPUT);
pinMode (button3Pin, INPUT);
lastWake = millis();
digitalWrite (2, HIGH); pull-up inschakelen
}
{
slaap als een voorzorgsmaatregel annuleren
sleep_disable();
moet dit doen als de pin waarschijnlijk laag voor een tijdje blijven zal
detachInterrupt (0);
lastWake = millis();
} / / einde van wake
void loop
{
int button1State = digitalRead(button1Pin);
int button2State = digitalRead(button2Pin);
int button3State = digitalRead(button3Pin);
Als ((button1State == laag) & & (button2State == laag) & & (button3State == LOW)) {}
myTone = 100;
}
anders als ((button1State == laag) & & (button2State == LOW)) {}
myTone = 150;
}
anders als ((button1State == laag) & & (button3State == LOW)) {}
myTone = 200;
}
anders als ((button2State == laag) & & (button3State == LOW)) {}
myTone = 300;
}
else if (button1State == LOW) {}
myTone = 400;
}
else if (button2State == LOW) {}
myTone = 800;
}
else if (button3State == LOW) {}
myTone = 2400;
}
Als (myTone > 0) {}
lastWake = millis();
Toon (buzzerPin, myTone, 80);
delay(40);
}
else {}
Als er geen activiteit gedurende 10 seconden, gaan slapen.
Als (millis() - lastWake > 10000) {}
uitschakelen van ADC
ADCSRA = 0;
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_enable();
Niet worden onderbroken voordat we gaan slapen, of de
ISR interrupts zal losmaken en we zal niet wakker.
noInterrupts ();
wordt aangeroepen wanneer pin D2 laag gaat
attachInterrupt (0, wake, laag);
brown-out inschakelen in de software uitschakelen
Als de processor voert de volgende instructie na
interrupts zijn ingeschakeld.
interrupts (); één cyclus
sleep_cpu (); één cyclus
}
}
myTone = 0;
}
De code produceert een constante Toon afhankelijk van welke knop, of een combinatie van knoppen wordt ingedrukt. Maar het is zeker mogelijk om de code te wijzigen, maar u wilt. Bijvoorbeeld, kon u het hiervoor pulserende of afwisselende tonen, of zelfs liederen code. Opmerking in de onderdelenlijst ik bevatten een DIP socket voor de ATtiny85, zo zelfs nadat het project is voltooid, kunt u de chip trekken en opnieuw het programma om de werking van het apparaat te wijzigen.