Untitled
user_6406267
c_cpp
5 months ago
2.4 kB
4
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