Помогите привести код в порядок
- Войдите на сайт для отправки комментариев
Чт, 10/03/2016 - 13:38
const int dataPin = 8;
const int latchPin = 9;
const int clockPin = 10;
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop() {
for (int z=0; z <= 9999; z++) {
displayNumber(z, 100);
}
}
void displayNumber(int number, int duration) {
int units = number % 10; //Получаем единицы
int dozens = number % 100 / 10; //Десятки
int hundreds = number % 1000 / 100; //Сотни
int thousands = number / 1000; //Тысячи
int numberOfDigits; //Количество разрядов будем записывать сюда
if (thousands == 0 && hundreds == 0 && dozens == 0) numberOfDigits = 1;
else if (thousands == 0 && hundreds == 0) numberOfDigits = 2;
else if (thousands == 0) numberOfDigits = 3;
else if (thousands > 0) numberOfDigits = 4; //Посчитали количество разрядов в числе number
unsigned long loopTimer = millis(); //Фиксируем время для таймера
while (millis() - loopTimer <= duration) { //Отображаем число на протяжении duration миллисекунд
if (numberOfDigits == 4) { //Если у нас 4-х разрядное число - отображаем все 4 разряда
shiftToRegister((0b0001 << 4) + thousands); //Пишем в сдвиговый регистр байт
shiftToRegister((0b0010 << 4) + hundreds); //В котором содержится информация
shiftToRegister((0b0100 << 4) + dozens); //О цифре и ее положении на индикаторе
shiftToRegister((0b1000 << 4) + units); //Причем цифры быстро переключаются
} //Таким образом создается динамическая индикация
else if (numberOfDigits == 3) { //Если у нас 3-х разрядное число - отображаем 3 разряда
shiftToRegister((0b0010 << 4) + hundreds);
shiftToRegister((0b0100 << 4) + dozens);
shiftToRegister((0b1000 << 4) + units);
}
else if (numberOfDigits == 2) { //Если у нас 2-х разрядное число - отображаем 2 разряда
shiftToRegister((0b0100 << 4) + dozens);
shiftToRegister((0b1000 << 4) + units);
}
else if (numberOfDigits == 1) { //Если у нас 1 разрядное число - отображаем 1 разряд
shiftToRegister((0b1000 << 4) + units);
}
}
shiftToRegister(0b0); //Стираем символы с дисплея
}
void shiftToRegister(byte j) {
digitalWrite(latchPin, LOW); //Открываем защелку
shiftOut(dataPin, clockPin, MSBFIRST, j); //Отправляем последовательно байт
digitalWrite(latchPin, HIGH); //Закрываем защелку
}
Я не особо шарю в программировании, вот накалякал такой код, чую, что он ужасен
Как можно улучшить код, сократить количество строк, что тут можно по массивам распихать?
Помогите, если не трудно
const int dataPin = 8;
for(intz=0; z <= 9999; z++) {13displayNumber(z, 100);14}вместо всей функции void displayNumber(int number, int duration)
void displayNumber(int number, int duration) { int return_number=0; int numberOfDigits=0; while(number) { return_number = return_number*10 + number%10; number /= 10; numberOfDigits++; } unsigned long loopTimer = millis(); //Фиксируем время для таймера while (millis() - loopTimer <= duration) { switch(numberOfDigits) { case 4: shiftToRegister((0b0001 << 4) + return_number%10); return_number /= 10; case 3: shiftToRegister((0b0010 << 4) + return_number%10); return_number /= 10; case 2: shiftToRegister((0b0100 << 4) + return_number%10); return_number /= 10; case 1: shiftToRegister((0b1000 << 4) + return_number%10); return_number /= 10; } shiftToRegister(0b0); //Стираем символы с дисплея } }