// Pin definitions
#define LED_PIN 2
#define RGB_RED_PIN 3
#define RGB_GREEN_PIN 4
#define RGB_BLUE_PIN 5
#define SR1_DATA_PIN 6
#define SR1_CLOCK_PIN 7
#define SR1_LATCH_PIN 8
#define SR2_DATA_PIN 9
#define SR2_CLOCK_PIN 10
#define SR2_LATCH_PIN 11
// Variables for RGB LED colors
const byte COLORS[][3] = {
{255, 0, 0}, // Red
{0, 255, 0}, // Green
{0, 0, 255}, // Blue
{255, 255, 0}, // Yellow
{0, 255, 255}, // Cyan
{255, 0, 255}, // Magenta
{255, 255, 255} // White
};
const int NUM_COLORS = 7;
int currentColor = 0;
// Variables for 7-segment display
int counter = 0;
// For common anode 7-segment display (0 = ON, 1 = OFF)
const byte SEGMENT_MAP[] = {
0b11000000, // 0
0b11111001, // 1
0b10100100, // 2
0b10110000, // 3
0b10011001, // 4
0b10010010, // 5
0b10000010, // 6
0b11111000, // 7
0b10000000, // 8
0b10010000 // 9
};
// Timing variables
unsigned long previousMillis = 0;
const long interval = 2000; // 2 seconds
bool ledState = LOW; // LED starts in the OFF state
void setup() {
// Initialize pins
pinMode(LED_PIN, OUTPUT);
pinMode(RGB_RED_PIN, OUTPUT);
pinMode(RGB_GREEN_PIN, OUTPUT);
pinMode(RGB_BLUE_PIN, OUTPUT);
pinMode(SR1_DATA_PIN, OUTPUT);
pinMode(SR1_CLOCK_PIN, OUTPUT);
pinMode(SR1_LATCH_PIN, OUTPUT);
pinMode(SR2_DATA_PIN, OUTPUT);
pinMode(SR2_CLOCK_PIN, OUTPUT);
pinMode(SR2_LATCH_PIN, OUTPUT);
// Initialize LED state (starts OFF)
digitalWrite(LED_PIN, ledState);
// Initialize RGB LED (starts with Red)
setRGBColor(COLORS[currentColor]);
// Initialize 7-segment displays (starts at 00)
updateSevenSegment();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Toggle LED state (2 seconds on, 2 seconds off)
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
// Update RGB LED color
currentColor = (currentColor + 1) % NUM_COLORS;
setRGBColor(COLORS[currentColor]);
// Update counter and 7-segment displays
counter = (counter + 1) % 100;
updateSevenSegment();
}
}
void setRGBColor(const byte* color) {
analogWrite(RGB_RED_PIN, color[0]);
analogWrite(RGB_GREEN_PIN, color[1]);
analogWrite(RGB_BLUE_PIN, color[2]);
}
void updateSevenSegment() {
byte tensDigit = counter / 10;
byte unitsDigit = counter % 10;
// Update tens digit (sevseg1)
digitalWrite(SR1_LATCH_PIN, LOW);
shiftOut(SR1_DATA_PIN, SR1_CLOCK_PIN, MSBFIRST, SEGMENT_MAP[tensDigit]);
digitalWrite(SR1_LATCH_PIN, HIGH);
// Update units digit (sevseg2)
digitalWrite(SR2_LATCH_PIN, LOW);
shiftOut(SR2_DATA_PIN, SR2_CLOCK_PIN, MSBFIRST, SEGMENT_MAP[unitsDigit]);
digitalWrite(SR2_LATCH_PIN, HIGH);
}
mega:SCL
mega:SDA
mega:AREF
mega:GND.1
mega:13
mega:12
mega:11
mega:10
mega:9
mega:8
mega:7
mega:6
mega:5
mega:4
mega:3
mega:2
mega:1
mega:0
mega:14
mega:15
mega:16
mega:17
mega:18
mega:19
mega:20
mega:21
mega:5V.1
mega:5V.2
mega:22
mega:23
mega:24
mega:25
mega:26
mega:27
mega:28
mega:29
mega:30
mega:31
mega:32
mega:33
mega:34
mega:35
mega:36
mega:37
mega:38
mega:39
mega:40
mega:41
mega:42
mega:43
mega:44
mega:45
mega:46
mega:47
mega:48
mega:49
mega:50
mega:51
mega:52
mega:53
mega:GND.4
mega:GND.5
mega:IOREF
mega:RESET
mega:3.3V
mega:5V
mega:GND.2
mega:GND.3
mega:VIN
mega:A0
mega:A1
mega:A2
mega:A3
mega:A4
mega:A5
mega:A6
mega:A7
mega:A8
mega:A9
mega:A10
mega:A11
mega:A12
mega:A13
mega:A14
mega:A15
led1:A
led1:C
rgb1:R
rgb1:COM
rgb1:G
rgb1:B
sevseg1:COM.1
sevseg1:COM.2
sevseg1:A
sevseg1:B
sevseg1:C
sevseg1:D
sevseg1:E
sevseg1:F
sevseg1:G
sevseg1:DP
sr1:Q1
sr1:Q2
sr1:Q3
sr1:Q4
sr1:Q5
sr1:Q6
sr1:Q7
sr1:GND
sr1:Q7S
sr1:MR
sr1:SHCP
sr1:STCP
sr1:OE
sr1:DS
sr1:Q0
sr1:VCC
sevseg2:COM.1
sevseg2:COM.2
sevseg2:A
sevseg2:B
sevseg2:C
sevseg2:D
sevseg2:E
sevseg2:F
sevseg2:G
sevseg2:DP
sr2:Q1
sr2:Q2
sr2:Q3
sr2:Q4
sr2:Q5
sr2:Q6
sr2:Q7
sr2:GND
sr2:Q7S
sr2:MR
sr2:SHCP
sr2:STCP
sr2:OE
sr2:DS
sr2:Q0
sr2:VCC