Untitled
user_6406267
c_cpp
a year ago
2.4 kB
11
Indexable
#include <TimerOne.h>
byte D1 = 9;
byte D2 = 10;
byte D3 = 11;
byte D4 = 12;
byte A = 2;
byte B = 3;
byte C = 4;
byte D = 5;
byte E = 6;
byte F = 7;
byte G = 8;
const int potentiometerPin = A0;
// Define the input pins for the 7-segment display segments.
const int segmentPins[] = {A, B, C, D, E, F, G};
// Define the input pins for the 7-segment display digits.
const int digitPins[] = {D1, D2, D3, D4};
const byte digitSegmentsByte[] = {
0b11111110, // 0
0b01100000, // 1
0b11011010, // 2
0b11110010, // 3
0b01100110, // 4
0b10110110, // 5
0b10111110, // 6
0b11100000, // 7
0b11111110, // 8
0b11110110 // 9
};
// For common cathode
uint8_t digitON = LOW;
uint8_t digitOFF = HIGH;
uint8_t segmentON = HIGH;
uint8_t segmentOFF = LOW;
const int usedDigitsNumber = 4;
volatile int digits[4];
volatile int currentValue = 0;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0));
splitNumberToDigits(0);
Timer1.initialize(100000);
Timer1.attachInterrupt(timerISR);
// Pin initialization
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], digitOFF);
}
pinMode(potentiometerPin, INPUT);
currentValue = analogRead(potentiometerPin);
}
void loop()
{
fillDisplay(usedDigitsNumber);
Serial.println(currentValue);
}
void timerISR() {
currentValue = analogRead(potentiometerPin);
splitNumberToDigits(currentValue);
}
void fillDisplay(int digitsNumber) {
for(int i = 0; i < digitsNumber; i++) {
for(int j = 0; j < 7; j++) {
digitalWrite(segmentPins[j], bitRead(getDigitSegmentsByte(digits[i]), 7 - j) == 1 ? segmentON: segmentOFF);
}
digitalWrite(digitPins[i], digitON);
delay(10);
digitalWrite(digitPins[i], digitOFF);
}
}
byte getDigitSegmentsByte(int digit) {
if (digit >= 0 && digit <= 9) {
return digitSegmentsByte[digit];
} else {
return digitSegmentsByte[0];
}
}
void splitNumberToDigits(int number) {
number = abs(number);
for (int i = 0; i < 4; i++) {
digits[i] = 0;
}
int index = 3;
while (number > 0 && index >= 0) {
digits[index--] = number % 10;
number /= 10;
}
}
int getRandomNumber() {
return random(0, 10000);
}Editor is loading...
Leave a Comment