So I've done some playing around and found that there isn't anything wrong with my counter code. However for whatever reason, when the counter counts up on my serial modem, the display isn't showing the corresponding numbers. Just zero. All the coding is there, it just seems that something isn't in the right place. I need help ASAP..
#include <ir_Lego_PF_BitStreamEncoder.h>
#include <boarddefs.h>
#include <IRremoteInt.h>
#include <IRremote.h>
//Define Sensor Pin
const int RECV_PIN = 22;
//Define LED Constants
const int bluePin = 26;
const int greenPin = 28;
const int redPin = 24;
//Define IR Reciever and Results Objects
IRrecv irrecv(RECV_PIN);
decode_results results;
//Button Definition
boolean Power = false;
boolean Play = false;
//Define Integer to Remember Toggle State
int togglestate = 0;
unsigned long time;
unsigned long time2;
int counter = 0;
int counterDir = 1;
bool mainCounter = false;
//Define Pins of 4 digit 7 segment Display
int SevensegPins[7] = {2,3,4,5,6,7,8};
byte SevensegDigits[10][7] =
{
{HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW}, // 0
{LOW, HIGH, HIGH, LOW, LOW, LOW, LOW}, // 1
{HIGH, HIGH, LOW, HIGH, HIGH, LOW, LOW}, // 2
{HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH},// 3
{LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH},// 4
{HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH},// 5
{HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH},// 6
{HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW}, // 7
{HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH},// 8
{HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH} // 9
};
//Define Digital Pins of Display
int d4 = 12;
int d3 = 11;
int d2 = 10;
int d1 = 9;
//Math
long i = 0; //i represents value displayed on display
long y = 60000; //y represents start time of count down
int x = 100;
int del = 5; //value is the degree of fine tuning the clock
int count = 0; //Set count=0. Here count is a count value that increases by 1 every 0.1 second, which means 1 second is counted when the value is 10
//Timer
int timer = 500;
int value;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
//Set LEDs as Outputs
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
//Set LED Display Pins as Outputs
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
for (int i=0; i < 7; i++) pinMode(SevensegPins[i], OUTPUT);
time = millis();
}
void loop() {
time2 = millis();
if (mainCounter == true && time2 - time >= 1000) {
counter += counterDir;
if (counter >= 60) counterDir = -1;
if (counter <= 0) {
counterDir = 1;
mainCounter = false;
}
Serial.print("counter = ");
Serial.println(counter);
time = time2;
}
if (irrecv.decode(&results)) {
int value = results.value;
Serial.println(value);
switch (value) {
case 0xFFA25D:
//Power ON/OFF
Power = !Power;
if (Power) {
digitalWrite(bluePin, 0xFF);
digitalWrite(redPin, 0x00);
digitalWrite(greenPin, 0x00);
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
}
if (!Power) {
digitalWrite(bluePin, LOW);
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
}
delay(1500);
break;
}
switch (value) {
case 0xFF22DD:
//Play/Pause
Play = !Play;
if (Play) {
mainCounter = true;
digitalWrite(bluePin, 0x00);
digitalWrite(redPin, 0x00);
digitalWrite(greenPin, 0xFF);
clear7segDigit(0);
set7segDigit(0, (i / 1000)); // get the value of thousand
select7segDigit(0);
delay(del);//delay 5ms
clear7segDigit(1);
set7segDigit(1, (i % 1000) / 100); // get the value of hundred
select7segDigit(1);
delay(del);//delay 5ms
clear7segDigit(2);
set7segDigit(2, i % 100 / 10); //get the value of ten
select7segDigit(2);
delay(del);//delay 5ms
clear7segDigit(3);
set7segDigit(3, i % 10); //Get the value of single digit
select7segDigit(3);
delay(del);//delay 5ms
}
if (!Play) { //Pause
mainCounter = false;
digitalWrite(bluePin, 0xFF);
digitalWrite(redPin, 0x00);
digitalWrite(greenPin, 0x00);
}
delay(1500);
break;
}
irrecv.resume();
}
}
void select7segDigit (int digit)
{
//The 7-segment LED display is a common-cathode one. So also use digitalWrite to set d1 as high and the LED will go out
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
switch (digit)
{
case 0:
digitalWrite(d1, LOW);//Light d1 up
break;
case 1:
digitalWrite(d2, LOW); //Light d2 up
break;
case 2:
digitalWrite(d3, LOW); //Light d3 up
break;
default:
digitalWrite(d4, LOW); //Light d4 up
break;
}
}
void set7segDigit(int digit, int number) //clear the 7-segment display screen
{
select7segDigit(digit);
for (int i=0; i < 7; i++) digitalWrite(SevensegPins[i], SevensegDigits[number][i]);
}
void clear7segDigit(int digit) //clear the 7-segment display screen
{
select7segDigit(digit);
for (int i=0; i < 7; i++) digitalWrite(SevensegPins[i], LOW);
}/code]