Ogólnie opisując jest to centrum sterowania pokojem. Do tej pory działające funkcje to:
- 2 czujniki temperatury(ds18b20)
- czujnik światła
- czujnik ruchu(jeżeli w pokoju jest wystarczająco ciemno po wykryciu ruchu zapala się podświetlenie łózka)
- zapis logów na karcie sd(data, godzina, temp1, temp2)
- sterowanie 2 przekaźnikami(wł/wył świateł led)
- dioda IR do sterowania tv i głośnikami od pc
- wyświetlacz lcd(wyświetla pomiary temperatury i godzinę a po wciśnięciu przycisku przez 5 sek max i min temperaturę i datę, sterowanie podświetleniem z telefonu)
Wszystko jest sterowane poprzez program na androidzie.
Przechodząc do problemu jaki mam otóż po dodaniu wyświetlacza 7 segmentowego miga wyświetlana godzina. Winny pewnie jest program który działa zbyt wolno ale nie wiem jak mógłbym go przyspieszyć. Drugie pytanie to jak wstawić dwukropek miedzy godziną a minutami? Ogólnie mile widziane sugestie na temat kodu.
Spoiler:
Kod: Zaznacz cały
[quote]
#include <[color=#CC6600]Wire[/color].h>
#include <[color=#CC6600]OneWire[/color].h>
#include <[color=#CC6600]SPI[/color].h>
#include <[color=#CC6600]SD[/color].h>
#include <[color=#CC6600]LiquidCrystal_I2C[/color].h>
#include <[color=#CC6600]DallasTemperature[/color].h>
#include [color=#006699]"RTClib.h"[/color]
#include <IRremote.h>
#include [color=#006699]"PCF8574.h"[/color]
#define ONE_WIRE_BUS 4
[color=#CC6600]LiquidCrystal_I2C[/color] lcd(0x21,16,2);
[color=#CC6600]RTC_DS1307[/color] RTC;
[color=#CC6600]IRsend[/color] irsend;
[color=#CC6600]PCF8574[/color] expander;
[color=#CC6600]char[/color] INBYTE;
[color=#CC6600]OneWire[/color] oneWire(ONE_WIRE_BUS);
[color=#CC6600]DallasTemperature[/color] sensors(&oneWire);
[color=#CC6600]DeviceAddress[/color] temp1={0x28, 0x48, 0x08, 0xA1, 0x04, 0x00, 0x00, 0x4C};
[color=#CC6600]DeviceAddress[/color] temp2={0x28, 0x7A, 0x8C, 0x9F, 0x03, 0x00, 0x00, 0x3C};
[color=#CC6600]File[/color] dataFile;
[color=#CC6600]int[/color] switchPin = 2;
[color=#CC6600]int[/color] BedLed = 9;
[color=#CC6600]int[/color] PcLed = A2;
[color=#CC6600]int[/color] lcdBacklight = A3;
[color=#CC6600]int[/color] photocellPin = 0;
[color=#CC6600]int[/color] photocellReading;
[color=#CC6600]int[/color] LuxReading;
[color=#CC6600]int[/color] pirPin = 5;
[color=#CC6600]int[/color] resolution = 11;
[color=#CC6600]int[/color] delayInMillis = 0;
[color=#CC6600]int[/color] idle = 0;
[color=#CC6600]int[/color] tempMax = 0.0;
[color=#CC6600]int[/color] tempMin = 30.0;
[color=#CC6600]int[/color] lastTime = -1;
[color=#CC6600]const[/color] [color=#CC6600]int[/color] chipSelect = 10;
[color=#CC6600]const[/color] [color=#CC6600]int[/color] batteryPin = 1;
[color=#CC6600]boolean[/color] lastButton = [color=#006699]LOW[/color];
[color=#CC6600]boolean[/color] currentButton = [color=#006699]LOW[/color];
[color=#CC6600]unsigned[/color] [color=#CC6600]long[/color] lastTempRequest = 0;
[color=#CC6600]float[/color] temperature1 = 0.0;
[color=#CC6600]float[/color] temperature2 = 0.0;
[color=#CC6600]const[/color] [color=#CC6600]float[/color] referenceVolts = 5.0; [color=#7E7E7E]//[/color]
[color=#CC6600]byte[/color] newChar[8] = {B00110, B01001, B01001, B00110, B00000, B00000, B00000, B00000}; [color=#7E7E7E]//znak stopni[/color]
[color=#CC6600]int[/color] latchPin = 8;
[color=#CC6600]int[/color] clockPin =6;
[color=#CC6600]int[/color] dataPin = 7;
[color=#CC6600]int[/color] segmentSelect[4]= { 1,2,4,8 };
[color=#CC6600]int[/color] seven_seg_digits[10]={ 192,249,164,176,153,146,130,248,128,152 };
[color=#CC6600]long[/color] interval = 1000;
[color=#CC6600]int[/color] firstDigit=0;
[color=#CC6600]int[/color] secondDigit=0;
[color=#CC6600]int[/color] thirdDigit=0;
[color=#CC6600]int[/color] fourthDigit=0;
[color=#CC6600]long[/color] previousMillis = 0;
[color=#CC6600]void[/color] [color=#CC6600][b]setup[/b][/color]() {
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]begin[/color](19200);
[color=#CC6600]Wire[/color].[color=#CC6600]begin[/color]();
RTC.[color=#CC6600]begin[/color]();
[color=#CC6600]SD[/color].[color=#CC6600]begin[/color]();
expander.[color=#CC6600]begin[/color](0x20);
lcd.[color=#CC6600]init[/color]();
[color=#CC6600]pinMode[/color](switchPin, [color=#006699]INPUT[/color]);
[color=#CC6600]pinMode[/color](SS, [color=#006699]OUTPUT[/color]);
[color=#CC6600]pinMode[/color](BedLed, [color=#006699]OUTPUT[/color]);
[color=#CC6600]pinMode[/color](pirPin, [color=#006699]INPUT[/color]);
[color=#CC6600]pinMode[/color](PcLed, [color=#006699]OUTPUT[/color]);
[color=#CC6600]pinMode[/color](lcdBacklight, [color=#006699]OUTPUT[/color]);
[color=#CC6600]pinMode[/color](latchPin, [color=#006699]OUTPUT[/color]);
[color=#CC6600]pinMode[/color](clockPin, [color=#006699]OUTPUT[/color]);
[color=#CC6600]pinMode[/color](dataPin, [color=#006699]OUTPUT[/color]);
[color=#CC6600]for[/color] ([color=#CC6600]int[/color] i=0; i<8; i++)
expander.[color=#CC6600]pinMode[/color](i, [color=#006699]OUTPUT[/color]);
expander.[color=#CC6600]digitalWrite[/color](4, [color=#006699]HIGH[/color]);
sensors.[color=#CC6600]begin[/color]();
sensors.[color=#CC6600]setResolution[/color](temp1, resolution);
sensors.[color=#CC6600]setResolution[/color](temp2, resolution);
sensors.[color=#CC6600]setWaitForConversion[/color]([color=#CC6600]false[/color]);
sensors.[color=#CC6600]requestTemperatures[/color]();
delayInMillis = 750 / (1 << (12 - resolution));
lastTempRequest = [color=#CC6600]millis[/color]();
[color=#CC6600]char[/color] filename[] = [color=#006699]"LOGGER00.CSV"[/color];
[color=#CC6600]for[/color] (uint8_t i = 0; i < 100; i++) {
filename[6] = i/10 + [color=#006699]'0'[/color];
filename[7] = i%10 + [color=#006699]'0'[/color];
[color=#CC6600]if[/color] (! [color=#CC6600]SD[/color].[color=#CC6600]exists[/color](filename)) {
[color=#7E7E7E]// only open a new file if it doesn't exist[/color]
dataFile = [color=#CC6600]SD[/color].[color=#CC6600]open[/color](filename, [color=#006699]FILE_WRITE[/color]);
[color=#CC6600]break[/color]; [color=#7E7E7E]// leave the loop![/color]
}
}
dataFile.[color=#CC6600]println[/color]([color=#006699]"datetime, temp1, temp2"[/color]);
displayLCDstart();
}
[color=#CC6600]void[/color] [color=#CC6600][b]loop[/b][/color]() {
[color=#CC6600]if[/color] ([color=#CC6600]millis[/color]() - lastTempRequest >= delayInMillis) [color=#7E7E7E]// waited long enough??[/color]
{
temperature1 = sensors.[color=#CC6600]getTempC[/color](temp1);
temperature2 = sensors.[color=#CC6600]getTempC[/color](temp2);
sensors.[color=#CC6600]requestTemperatures[/color]();
lastTempRequest = [color=#CC6600]millis[/color]();
}
logs();
pir();
displayLCD();
displayNumber();
logSD();
[color=#CC6600]if[/color] ([color=#CC6600][b]Serial[/b][/color].[color=#CC6600]available[/color]() < 1) [color=#CC6600]return[/color]; [color=#7E7E7E]// if serial empty, return to loop().[/color]
[color=#CC6600]else[/color] {
serialread();
}
}
[color=#CC6600]boolean[/color] debounce([color=#CC6600]boolean[/color] last)
{
[color=#CC6600]boolean[/color] current = [color=#CC6600]digitalRead[/color](switchPin);
[color=#CC6600]if[/color] (last != current)
{
[color=#CC6600]delay[/color](5);
current = [color=#CC6600]digitalRead[/color](switchPin);
}
[color=#CC6600]return[/color] current;
}
[color=#CC6600]void[/color] serialread() {
INBYTE = [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]read[/color](); [color=#7E7E7E]// read next available byte[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'1'[/color] ) [color=#CC6600]digitalWrite[/color](BedLed, [color=#006699]HIGH[/color]);
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'2'[/color] ) [color=#CC6600]digitalWrite[/color](BedLed, [color=#006699]LOW[/color]);
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'6'[/color] ) [color=#CC6600]digitalWrite[/color](PcLed, [color=#006699]HIGH[/color]);
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'5'[/color] ) [color=#CC6600]digitalWrite[/color](PcLed, [color=#006699]LOW[/color]);
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'3'[/color] ) [color=#CC6600]digitalWrite[/color](lcdBacklight, [color=#006699]HIGH[/color]);
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'4'[/color] ) [color=#CC6600]digitalWrite[/color](lcdBacklight, [color=#006699]LOW[/color]);
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'8'[/color] ) expander.[color=#CC6600]digitalWrite[/color](4, [color=#006699]LOW[/color]);
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'7'[/color] ) expander.[color=#CC6600]digitalWrite[/color](4, [color=#006699]HIGH[/color]);
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'a'[/color] ) irsend.[color=#CC6600]sendNEC[/color](0xFF00FF, 32); [color=#7E7E7E]// Audio On/Off[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'b'[/color] ) irsend.[color=#CC6600]sendNEC[/color](0xFF8877, 32); [color=#7E7E7E]// Audio Vol Up[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'c'[/color] ) irsend.[color=#CC6600]sendNEC[/color](0xFF08F7, 32); [color=#7E7E7E]// Audio Vol Down[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'d'[/color] ) irsend.[color=#CC6600]sendNEC[/color](0xFF50AF, 32); [color=#7E7E7E]// Audio Bass Up[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'e'[/color] ) irsend.[color=#CC6600]sendNEC[/color](0xFF708F, 32); [color=#7E7E7E]// Audio Bass Down[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'f'[/color] ) irsend.[color=#CC6600]sendNEC[/color](0xFF906F, 32); [color=#7E7E7E]// Audio Treble Up[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'g'[/color] ) irsend.[color=#CC6600]sendNEC[/color](0xFFB04F, 32); [color=#7E7E7E]// Audio Treble Down[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'h'[/color] ) irsend.[color=#CC6600]sendNEC[/color](0xFF20DF, 32); [color=#7E7E7E]// Audio Change Input[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'i'[/color] ) irsend.sendSamsung(0xE0E0807F, 38); [color=#7E7E7E]// TV Source[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'j'[/color] ) irsend.sendSamsung(0xE0E0E01F, 38); [color=#7E7E7E]// TV Vol Up[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'k'[/color] ) irsend.sendSamsung(0xE0E0D02F, 38); [color=#7E7E7E]// TV Vol Down[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'l'[/color] ) irsend.sendSamsung(0xE0E040BF, 38); [color=#7E7E7E]// TV ON/OFF[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'m'[/color] ) irsend.sendSamsung(0xE0E048B7, 38); [color=#7E7E7E]// TV Chanel Up[/color]
[color=#CC6600]if[/color]( INBYTE == [color=#006699]'n'[/color] ) irsend.sendSamsung(0xE0E008F7, 38); [color=#7E7E7E]// TV Chanel Down[/color]
}
[color=#CC6600]void[/color] displayLCDstart() {
lcd.[color=#CC6600]createChar[/color](0, newChar);
lcd.[color=#CC6600]clear[/color]();
lcd.[color=#CC6600]setCursor[/color](2,0);
lcd.[color=#CC6600]print[/color]([color=#006699]"Home Temp"[/color]);
lcd.[color=#CC6600]setCursor[/color](8,1);
lcd.[color=#CC6600]print[/color]([color=#006699]"by CoX"[/color]);
[color=#CC6600]delay[/color](1500);
}
[color=#CC6600]void[/color] displayLCD() {
[color=#CC6600]DateTime[/color] [color=#CC6600]now[/color] = RTC.[color=#CC6600]now[/color]();
currentButton = debounce(lastButton);
[color=#CC6600]if[/color] (lastButton == [color=#006699]LOW[/color] && currentButton == [color=#006699]HIGH[/color])
{
[color=#CC6600]DateTime[/color] [color=#CC6600]now[/color] = RTC.[color=#CC6600]now[/color]();
lcd.[color=#CC6600]clear[/color]();
lcd.[color=#CC6600]setCursor[/color](3,0);
[color=#CC6600]if[/color]([color=#CC6600]now[/color].[color=#CC6600]day[/color]() < 10)
{
lcd.[color=#CC6600]print[/color]([color=#006699]"0"[/color]);
}
lcd.[color=#CC6600]print[/color]([color=#CC6600]now[/color].[color=#CC6600]day[/color](), [color=#006699]DEC[/color]);
lcd.[color=#CC6600]print[/color]([color=#006699]'/'[/color]);
[color=#CC6600]if[/color]([color=#CC6600]now[/color].[color=#CC6600]month[/color]() < 10)
{
lcd.[color=#CC6600]print[/color]([color=#006699]"0"[/color]);
}
lcd.[color=#CC6600]print[/color]([color=#CC6600]now[/color].[color=#CC6600]month[/color](), [color=#006699]DEC[/color]);
lcd.[color=#CC6600]print[/color]([color=#006699]'/'[/color]);
lcd.[color=#CC6600]print[/color]([color=#CC6600]now[/color].[color=#CC6600]year[/color](), [color=#006699]DEC[/color]);
lcd.[color=#CC6600]setCursor[/color](1,1);
lcd.[color=#CC6600]print[/color]([color=#006699]"Max="[/color]);
lcd.[color=#CC6600]print[/color](tempMax);
lcd.[color=#CC6600]print[/color]([color=#006699]" Min="[/color]);
lcd.[color=#CC6600]print[/color](tempMin);
[color=#CC6600]delay[/color](3000);
}
lastButton = currentButton;
lcd.[color=#CC6600]clear[/color]();
lcd.[color=#CC6600]setCursor[/color](0,0);
lcd.[color=#CC6600]print[/color](temperature1);
lcd.[color=#CC6600]write[/color](8);
lcd.[color=#CC6600]print[/color]([color=#006699]"C"[/color]);
lcd.[color=#CC6600]setCursor[/color](10,0);
[color=#CC6600]if[/color]([color=#CC6600]now[/color].[color=#CC6600]hour[/color]() < 10)
{
lcd.[color=#CC6600]print[/color]([color=#006699]"0"[/color]);
}
lcd.[color=#CC6600]print[/color]([color=#CC6600]now[/color].[color=#CC6600]hour[/color](), [color=#006699]DEC[/color]);
lcd.[color=#CC6600]print[/color]([color=#006699]':'[/color]);
[color=#CC6600]if[/color]([color=#CC6600]now[/color].[color=#CC6600]minute[/color]() < 10)
{
lcd.[color=#CC6600]print[/color]([color=#006699]"0"[/color]);
}
lcd.[color=#CC6600]print[/color]([color=#CC6600]now[/color].[color=#CC6600]minute[/color](), [color=#006699]DEC[/color]);
lcd.[color=#CC6600]setCursor[/color](0,1);
lcd.[color=#CC6600]print[/color](temperature2);
lcd.[color=#CC6600]write[/color](8);
lcd.[color=#CC6600]print[/color]([color=#006699]"C"[/color]);
}
[color=#CC6600]void[/color] logs() {
photocellReading = [color=#CC6600]analogRead[/color](photocellPin);
LuxReading = [color=#CC6600]map[/color](photocellReading, 0, 1023, 10, 900);
[color=#CC6600]int[/color] val = [color=#CC6600]analogRead[/color](batteryPin);
[color=#CC6600]float[/color] volts = (val / 1023.0) * referenceVolts;
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color](temperature1);
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color](temperature2);
[color=#CC6600]if[/color] (LuxReading < 100) {
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]"0"[/color]);
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color](LuxReading);
}
[color=#CC6600]else[/color] {
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color](LuxReading);
}
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color](volts);
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]'\r'[/color]);
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]flush[/color]();
tempMin = [color=#CC6600]min[/color](tempMin, temperature1);
tempMax = [color=#CC6600]max[/color](tempMax, temperature1);
}
[color=#CC6600]void[/color] logSD() {
[color=#CC6600]DateTime[/color] [color=#CC6600]now[/color] = RTC.[color=#CC6600]now[/color]();
[color=#CC6600]int[/color] time = [color=#CC6600]now[/color].[color=#CC6600]second[/color]();
[color=#CC6600]if[/color] ([color=#CC6600]abs[/color](time - lastTime) > 10)
{
dataFile.[color=#CC6600]print[/color]([color=#006699]'"'[/color]);
dataFile.[color=#CC6600]print[/color]([color=#CC6600]now[/color].[color=#CC6600]day[/color](), [color=#006699]DEC[/color]);
dataFile.[color=#CC6600]print[/color]([color=#006699]"/"[/color]);
dataFile.[color=#CC6600]print[/color]([color=#CC6600]now[/color].[color=#CC6600]month[/color](), [color=#006699]DEC[/color]);
dataFile.[color=#CC6600]print[/color]([color=#006699]"/"[/color]);
dataFile.[color=#CC6600]print[/color]([color=#CC6600]now[/color].[color=#CC6600]year[/color](), [color=#006699]DEC[/color]);
dataFile.[color=#CC6600]print[/color]([color=#006699]" "[/color]);
dataFile.[color=#CC6600]print[/color]([color=#CC6600]now[/color].[color=#CC6600]hour[/color](), [color=#006699]DEC[/color]);
dataFile.[color=#CC6600]print[/color]([color=#006699]":"[/color]);
dataFile.[color=#CC6600]print[/color]([color=#CC6600]now[/color].[color=#CC6600]minute[/color](), [color=#006699]DEC[/color]);
dataFile.[color=#CC6600]print[/color]([color=#006699]":"[/color]);
dataFile.[color=#CC6600]print[/color]([color=#CC6600]now[/color].[color=#CC6600]second[/color](), [color=#006699]DEC[/color]);
dataFile.[color=#CC6600]print[/color]([color=#006699]'"'[/color]);
dataFile.[color=#CC6600]print[/color]([color=#006699]", "[/color]);
dataFile.[color=#CC6600]print[/color](temperature1);
dataFile.[color=#CC6600]print[/color]([color=#006699]", "[/color]);
dataFile.[color=#CC6600]print[/color](temperature2);
dataFile.[color=#CC6600]print[/color]([color=#006699]", "[/color]);
dataFile.[color=#CC6600]println[/color]();
dataFile.[color=#CC6600]flush[/color]();
lastTime = time;
}
}
[color=#CC6600]void[/color] pir() {
[color=#CC6600]if[/color] (LuxReading < 70){
[color=#CC6600]if[/color] ([color=#CC6600]digitalRead[/color](pirPin) == [color=#006699]HIGH[/color]) {
[color=#CC6600]digitalWrite[/color](BedLed, [color=#006699]HIGH[/color]);
}
[color=#CC6600]else[/color] {
[color=#CC6600]digitalWrite[/color](BedLed, [color=#006699]LOW[/color]);
}
}
}
[color=#CC6600]void[/color] clearDisplay() {
[color=#CC6600]digitalWrite[/color](latchPin, [color=#006699]LOW[/color]);
[color=#CC6600]shiftOut[/color](dataPin, clockPin, [color=#006699]MSBFIRST[/color], 0);
[color=#CC6600]shiftOut[/color](dataPin, clockPin, [color=#006699]MSBFIRST[/color], 0);
[color=#CC6600]digitalWrite[/color](latchPin, [color=#006699]HIGH[/color]);
}
[color=#CC6600]void[/color] displayNumber() {
[color=#CC6600]long[/color] beginTime = [color=#CC6600]millis[/color]();
[color=#CC6600]for[/color]([color=#CC6600]int[/color] digit = 4 ; digit > 0 ; digit--) {
[color=#CC6600]switch[/color](digit) {
[color=#CC6600]case[/color] 1:
displayDigitOne();
[color=#CC6600]break[/color];
[color=#CC6600]case[/color] 2:
displayDigitTwo();
[color=#CC6600]break[/color];
[color=#CC6600]case[/color] 3:
displayDigitThree();
[color=#CC6600]break[/color];
[color=#CC6600]case[/color] 4:
displayDigitFour();
[color=#CC6600]break[/color];
}
[color=#CC6600]delayMicroseconds[/color](3000);
updateDisplay();
clearDisplay();
}
[color=#7E7E7E]//Wait for 20ms to pass before we paint the display again[/color]
[color=#CC6600]while[/color]( ([color=#CC6600]millis[/color]() - beginTime) < 10) ;
[color=#CC6600]unsigned[/color] [color=#CC6600]long[/color] currentMillis = [color=#CC6600]millis[/color]();
[color=#CC6600]if[/color](currentMillis - previousMillis > interval) {
[color=#7E7E7E]// save the last time you blinked the Colon LED [/color]
previousMillis = currentMillis;
}
}
[color=#CC6600]void[/color] updateDisplay() {
[color=#CC6600]DateTime[/color] [color=#CC6600]now[/color] = RTC.[color=#CC6600]now[/color]();
firstDigit=[color=#CC6600]now[/color].[color=#CC6600]hour[/color]()/10;
secondDigit=[color=#CC6600]now[/color].[color=#CC6600]hour[/color]()%10;
thirdDigit=[color=#CC6600]now[/color].[color=#CC6600]minute[/color]()/10;
fourthDigit=([color=#CC6600]now[/color].[color=#CC6600]minute[/color]()%10);
}
[color=#CC6600]void[/color] displayDigitOne() {
[color=#CC6600]digitalWrite[/color](latchPin, [color=#006699]LOW[/color]);
[color=#CC6600]shiftOut[/color](dataPin, clockPin, [color=#006699]MSBFIRST[/color], seven_seg_digits[firstDigit]);
[color=#CC6600]shiftOut[/color](dataPin, clockPin, [color=#006699]MSBFIRST[/color], segmentSelect[0]);
[color=#CC6600]digitalWrite[/color](latchPin, [color=#006699]HIGH[/color]);
}
[color=#CC6600]void[/color] displayDigitTwo() {
[color=#CC6600]digitalWrite[/color](latchPin, [color=#006699]LOW[/color]);
[color=#CC6600]shiftOut[/color](dataPin, clockPin, [color=#006699]MSBFIRST[/color], seven_seg_digits[secondDigit]);
[color=#CC6600]shiftOut[/color](dataPin, clockPin, [color=#006699]MSBFIRST[/color], segmentSelect[1]);
[color=#CC6600]digitalWrite[/color](latchPin, [color=#006699]HIGH[/color]);
}
[color=#CC6600]void[/color] displayDigitThree() {
[color=#CC6600]digitalWrite[/color](latchPin, [color=#006699]LOW[/color]);
[color=#CC6600]shiftOut[/color](dataPin, clockPin, [color=#006699]MSBFIRST[/color], seven_seg_digits[thirdDigit]);
[color=#CC6600]shiftOut[/color](dataPin, clockPin, [color=#006699]MSBFIRST[/color], segmentSelect[2]);
[color=#CC6600]digitalWrite[/color](latchPin, [color=#006699]HIGH[/color]);
}
[color=#CC6600]void[/color] displayDigitFour() {
[color=#CC6600]digitalWrite[/color](latchPin, [color=#006699]LOW[/color]);
[color=#CC6600]shiftOut[/color](dataPin, clockPin, [color=#006699]MSBFIRST[/color], seven_seg_digits[fourthDigit]);
[color=#CC6600]shiftOut[/color](dataPin, clockPin, [color=#006699]MSBFIRST[/color], segmentSelect[3]);
[color=#CC6600]digitalWrite[/color](latchPin, [color=#006699]HIGH[/color]);
}
[/quote][/code][/spoiler]