Den slutliga Curtain - dusch timer (9 / 9 steg)
Steg 9: Firmwareuppdatering
Uppdateringen lägger till en stoppur funktioner.
Också, när timern räknar och pipa, dess börjar räkna tiden gått sedan slutet av timer och stannar bara på tryck på knapp.
#define MAX7219_DIN 5
#define MAX7219_CS 6
#define MAX7219_CLK 7
#define bot 4
#define BZzz 3
#define potten 0
#define stoppur 65
booleska stoppläge = false, stopWatchMode;
långa runTime = 0;
void initialise()
{
digitalWrite (MAX7219_CS, hög);
pinMode (MAX7219_DIN, OUTPUT);
pinMode (MAX7219_CS, OUTPUT);
pinMode (MAX7219_CLK, OUTPUT);
}
void utdata (byte adress, byte data)
{
digitalWrite (MAX7219_CS, låg);
shiftOut (MAX7219_DIN, MAX7219_CLK, MSBFIRST, adress);
shiftOut (MAX7219_DIN, MAX7219_CLK, MSBFIRST, data);
digitalWrite (MAX7219_CS, hög);
}
void setup() {
Serial.BEGIN (9600);
pinMode (Bot, indata);
pinMode (BZzz, OUTPUT);
sätta din installation kod här, om du vill köra en gång:
initialise();
output(0x0F, 0x00); Visa test register - testläge off
output(0x0C, 0x01); Shutdown register - normal drift
output(0x0B, 0x07); Skanna den gräns register - Visa siffror 0 thru 7
output(0x0A, 0x0F); intensitet register - max ljusstyrka
output(0x09, 0xFF); avkoda läge register - CodeB avkoda alla siffror
output(0x08, 15); Siffran 7 (vänstra siffran) data
output(0x07, 15);
output(0x06, 15);
output(0x05, 15);
output(0x04, 15);
output(0x03, 15);
output(0x02, 15);
output(0x01, 15); siffran 0 (längst till höger digit) data
}
void loop() {
om (! stoppläge) {
runTime = analogRead (kruka);
runTime = karta (runTime, 5, 1020, 1, 14) * 5.
om (runTime == 70) {
runTime = 65;
}
Serial.println (runTime);
om (runTime < = 60) {
utgång (0x05, runTime % 10);
utgång (0x06, runTime/10);
output(0x01, 15);
output(0x02, 15);
stopWatchMode = false;
}
om (runTime == stoppur) {
stopWatchMode = sant;
output(0x01, 0);
output(0x02, 0);
output(0x05, 0);
output(0x06, 0);
}
om (digitalRead (Bot)) {
fördröjning (40);
om (! stopWatchMode) {
runTime = runTime * 60000 + millis();
tonen (BZzz, 300);
fördröjning (300);
} annat {
runTime = millis ();
tonen (BZzz, 200);
fördröjning (400).
}
noTone (BZzz);
Stoppläge = sant;
}
om (stoppläge) {
om (! stopWatchMode) {
int Bip = sant;
medan (millis() < = runTime) {
int okej, sekunder.
Okej = (runTime - millis ()) / 60000;
Serial.Print (okej);
utgång (0x05, okej % 10);
utgång (0x06, okej/10);
Serial.Print (":");
sekunder = ((runTime - millis ()) % 60000) / 1000;
Serial.println (sekunder);
utgång (0x01, sekunder % 10);
utgång (0x02, sekunder/10);
om (digitalRead (Bot)) {
samtidigt (digitalRead (Bot)) {
BIP = false;
Stoppläge = false;
stopWatchMode = false;
Serial.println ("alla falskt");
output(0x08, 10); Siffran 7 (vänstra siffran) data
output(0x07, 10);
output(0x06, 10);
output(0x05, 10);
output(0x04, 10);
output(0x03, 10);
output(0x02, 10);
output(0x01, 10);
}
bryta;
} //end om digitalRead Bot
}
om (Bip) {
runTime = millis ();
för (int jag = 1; jag < = 10; i ++) {
tonen (BZzz, 300);
output(0x08, 15); Siffran 7 (vänstra siffran) data
output(0x07, 15);
output(0x06, 15);
output(0x05, 15);
output(0x04, 15);
output(0x03, 15);
output(0x02, 15);
output(0x01, 15);
fördröjning (200);
Serial.println ("Bip Bip Bip...");
noTone (BZzz);
output(0x08, 10); Siffran 7 (vänstra siffran) data
output(0x07, 10);
output(0x06, 10);
output(0x05, 10);
output(0x04, 10);
output(0x03, 10);
output(0x02, 10);
output(0x01, 10);
fördröjning (200);
tonen (BZzz, 300);
output(0x08, 15); Siffran 7 (vänstra siffran) data
output(0x07, 15);
output(0x06, 15);
output(0x05, 15);
output(0x04, 15);
output(0x03, 15);
output(0x02, 15);
output(0x01, 15);
fördröjning (200);
Serial.println ("Bip Bip Bip...");
noTone (BZzz);
output(0x08, 10); Siffran 7 (vänstra siffran) data
output(0x07, 10);
output(0x06, 10);
output(0x05, 10);
output(0x04, 10);
output(0x03, 10);
output(0x02, 10);
output(0x01, 10);
fördröjning (400).
stopWatchMode = sant;
}
} / / end void Bip
output(0x08, 15); Siffran 7 (vänstra siffran) data
output(0x07, 15);
output(0x06, 15);
output(0x05, 15);
output(0x04, 15);
output(0x03, 15);
output(0x02, 15);
output(0x01, 15);
Stoppläge = false;
} / / end av stoppläge! stopWatchMode (timer läge)
om (stopWatchMode) {/ / stoppur körläge börjar
int okej, sekunder.
medan (! digitalRead (Bot)) {
Okej = (millis () - runTime) / 60000;
Serial.Print (okej);
utgång (0x05, okej % 10);
utgång (0x06, okej/10);
Serial.Print (":");
sekunder = ((millis () - runTime) % 60000) / 1000;
Serial.println (sekunder);
utgång (0x01, sekunder % 10);
utgång (0x02, sekunder/10);
}
Stoppläge = false;
stopWatchMode = false;
fördröjning (500).
}
}
}
}