Hello.
I have tried optimizing the following code, but there is must be more. There is a lot of (almost) repeated code for setting hors, mins and secs, but I can not figure out how to cut it down.
Code is shown in two messages, due to length.
Thanks
//byte sounder = 5;
//byte button_Op = A0;
//byte button_Ned = A1;
//byte button_Select = A2;
byte second, minute, hour;
byte menuCounter = 0;
byte buttonState = 0;
byte lastButtonState = 0;
byte buttonState3 = 0;
byte buttonState4 = 0;
byte lastButtonState3 = 0;
byte lastButtonState4 = 0;
byte check_Burn_In_Var = 0;
byte function = 1; // funktions nr vi er nået til, i funktions menu
byte dim_Start_Hours = 0; // start timer for dimmimg af rør, lav lys
byte dim_Stop_Hours = 0; // stop timer for dimminmg af rør, går over til høj lys
byte color_Run = 0; // bruges i funktions menu, for at sikre at farve skift kode kun køres een gang
byte dim_State = 0; // er rør sat til hi eller low lys
byte cfg_Dim_Start_Hours = 0;
byte cfg_Dim_Stop_Hours = 1;
byte cfg_Dim_State = 2;
byte delay_For_Number_Run = 0;
unsigned long check_Burn_In_PreviousMillis = 0;
const long check_Burn_In_Interval = 900000; // kør hvert 15. minut
byte ej[10] = { 0, 1, 2, 3, 4, 6, 7, 8, A3, 13 };
/////////////////////////////////////////////////////////////////////////////
#include <EEPROM.h>
#include "Wire.h"
#include "VFDTube.h"
#define TUBE_COUNT 6
VFDTube tube(12, 11, 10, 9, TUBE_COUNT);
// DIN on pin #12, OE on pin #11, STCP on pin #10, SHCP on pin #9,
// 6 for sections count in serial
// Pin #11 is with PWM output, so the brightness is adjustable
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return ( (val / 10 * 16) + (val % 10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return ( (val / 16 * 10) + (val % 16) );
}
/////////////////////////////////////////////////////////////////////
void set_Time()
{
bip();
Wire.beginTransmission(0x68);
Wire.write (0x00);
Wire.write(decToBcd(second) & 0x7f); // 0 to bit 7 starts the clock
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.endTransmission();
}
void get_Time()
{
// Reset the register pointer
Wire.beginTransmission(0x68);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(0x68, 7);
// A few of these need masks because certain bits are control bits
second = bcdToDec(Wire.read() & 0x7f);
minute = bcdToDec(Wire.read());
hour = bcdToDec(Wire.read() & 0x3f); // Need to change this if 12 hour am/pm
}
///////////////////////////////////////////////////////////////////////////////////
void bip()
{
PORTD |= (1 << PD5); //sounder på port PD5, digital pin 5 high
_delay_ms(100);
PORTD = PORTD & (~(1 << 5)); // low
}
//////////////////////////////////////////////////////////////////////////////////
void set_Hour()
{
tube.setBackgroundColor (0, Blue); // tænd lys i timer rør
tube.setBackgroundColor (1, Blue);
buttonState3 = PINC & (1 << PC0); // port PC0, arduino digital A0 //digitalRead(button_Op);
if (buttonState3 != lastButtonState3) {
if (buttonState3 == LOW) {
hour++;
if (hour >= 24) {
hour = 0;
}
set_Time();
}
}
buttonState4 = PINC & (1 << PC1); // port PC1, arduino digital A1. button ned
if (buttonState4 != lastButtonState4) {
if (buttonState4 == LOW) {
hour--;
if (hour == 255) {
hour = 23;
}
set_Time();
}
}
lastButtonState4 = buttonState4;
lastButtonState3 = buttonState3;
}
///////////////////////////////////////////////////////////////////////////////////
void set_Minute()
{
tube.setBackgroundColor (0, Black); // sluk lys i timer
tube.setBackgroundColor (1, Black);
tube.setBackgroundColor (2, Blue); // tænd lys i minutter rør
tube.setBackgroundColor (3, Blue);
buttonState3 = PINC & (1 << PC0); // port PC0, arduino digital A0. button op
if (buttonState3 != lastButtonState3) {
if (buttonState3 == LOW) {
minute++;
if (minute >= 60) {
minute = 0;
}
set_Time();
}
}
buttonState4 = PINC & (1 << PC1); // port PC1, arduino digital A1. button ned
if (buttonState4 != lastButtonState4) {
if (buttonState4 == LOW) {
minute--;
if (minute == 255) {
minute = 59;
}
set_Time();
}
}
lastButtonState4 = buttonState4;
lastButtonState3 = buttonState3;
}
void set_Second()
{
tube.setBackgroundColor (Black); // sluk lys i rør
tube.setBackgroundColor (4, Blue); // tænd lys i sekunder rør
tube.setBackgroundColor (5, Blue);
buttonState3 = PINC & (1 << PC0); // port PC0, arduino digital A0. button op
if (buttonState3 != lastButtonState3) {
if (buttonState3 == LOW) {
second++;
if (second >= 60) {
second = 0;
}
set_Time();
}
}
buttonState4 = PINC & (1 << PC1); // port PC1, arduino digital A1. button ned
if (buttonState4 != lastButtonState4) {
if (buttonState4 == LOW) {
second--;
if (second == 255) {
second = 59;
}
set_Time();
}
}
lastButtonState4 = buttonState4;
lastButtonState3 = buttonState3;
}
///////////////////////////////////////////////////////////
void set_Start_Hours() {
dim_Start_Hours = EEPROM.read(cfg_Dim_Start_Hours);
dim_Stop_Hours = EEPROM.read(cfg_Dim_Stop_Hours);
function = 1;
tube.printf("FN%01d. %02d", function, dim_Start_Hours);
tube.display();
if (color_Run == 0) {
color_Run = 1; // set color run til 1, så nedenstående kun køres een gang
for (byte tube_Number = 0; tube_Number < 6; tube_Number++) { // disse linier laver løbe LED lys i rør
tube.setBackgroundColor (tube_Number, Cyan);
tube.display();
_delay_ms(100);
}
}// color run end bracket
buttonState3 = PINC & (1 << PC0); // port PC0, arduino digital A0
if (buttonState3 != lastButtonState3) {
if (buttonState3 == LOW) {
dim_Start_Hours++;
bip();
if (dim_Start_Hours >= 24) {
dim_Start_Hours = 0;
}
}
}
buttonState4 = PINC & (1 << PC1); // port PC1, arduino digital A1
if (buttonState4 != lastButtonState4) {
if (buttonState4 == LOW) {
dim_Start_Hours--;
bip();
if (dim_Start_Hours == 255) {
dim_Start_Hours = 23;
}
}
}
lastButtonState4 = buttonState4;
lastButtonState3 = buttonState3;
EEPROM.update(cfg_Dim_Start_Hours, dim_Start_Hours);
}
///////////////////////////////////////////////////////////
void set_Stop_Hours()
{
function = 2;
tube.printf("FN%01d. %02d", function, dim_Stop_Hours);
tube.display();
if (color_Run == 1) {
color_Run = 2; // set color run til 2, så nedenstående kun køres een gang
for (byte tube_Number = 0; tube_Number < 6; tube_Number++) {
tube.setBackgroundColor (tube_Number, Green);
tube.display();
_delay_ms(100);
}
}// color run end bracket
buttonState3 = PINC & (1 << PC0); // port PC0, arduino digital A0
if (buttonState3 != lastButtonState3) {
if (buttonState3 == LOW) {
dim_Stop_Hours++;
bip();
if (dim_Stop_Hours >= 24) {
dim_Stop_Hours = 0;
}
}
}
buttonState4 = PINC & (1 << PC1); // port PC1, arduino digital A1
if (buttonState4 != lastButtonState4) {
if (buttonState4 == LOW) {
dim_Stop_Hours--;
bip();
if (dim_Stop_Hours == 255) {
dim_Stop_Hours = 23;
}
}
}
lastButtonState4 = buttonState4;
lastButtonState3 = buttonState3;
EEPROM.update(cfg_Dim_Stop_Hours, dim_Stop_Hours);
}
////////////////////////////////////////////////////////////////////////////////////////
void set_Dimming() {
function = 3;
if (dim_State == 0) {
tube.printf("FN%01d. HI", function);
}
if (dim_State == 1) {
tube.printf("FN%01d. LO", function);
}
if (color_Run == 2) {
color_Run = 3; // set color run til 2, så nedenstående kun køres een gang
for (byte tube_Number = 0; tube_Number < 6; tube_Number++) {
tube.setBackgroundColor (tube_Number, Yellow);
tube.display();
_delay_ms(100);
}
}// color run end bracket
buttonState3 = PINC & (1 << PC0); // port PC0, arduino digital A0
if (buttonState3 != lastButtonState3) {
if (buttonState3 == LOW) {
dim_State = 0;
bip();
}
}
buttonState4 = PINC & (1 << PC1); // port PC1, arduino digital A1
if (buttonState4 != lastButtonState4) {
if (buttonState4 == LOW) {
dim_State = 1;
bip();
}
}
lastButtonState4 = buttonState4;
lastButtonState3 = buttonState3;
}