Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <math.h>
- void setup() {
- DDRD = 0xFF;
- PORTD = 0x00;
- #include <ma4th.h>
- pinMode(A0, OUTPUT);
- pinMode(A1, OUTPUT);
- pinMode(A2, OUTPUT);
- pinMode(A3, OUTPUT);
- pinMode(A4, INPUT);
- pinMode(A5, INPUT);
- pinMode(0, OUTPUT);
- pinMode(1, OUTPUT);
- pinMode(2, OUTPUT);
- pinMode(3, OUTPUT);
- pinMode(4, OUTPUT);
- pinMode(6, OUTPUT);
- pinMode(7, INPUT);
- pinMode(8, INPUT);
- pinMode(12, OUTPUT);
- pinMode(10, INPUT);
- }
- int hours = 12;
- int mins = 36;
- int sec = 0;
- int time = 0;
- int hz = 0;
- int dgt[10]={0b11010111,0b00000011,0b11001110,0b10001111,0b00011011,0b10011101,0b11011101,0b00000111,0b11011111,0b10011111}; //задаем массив со значениями сегментов совковых индикаторов
- int delmks = 1950;
- int factor_digits(int num, int *digits, int limit) //Обработка чисел в массивы по цифрам
- {
- int digits_count = 0;
- if (num == 0) {
- digits[0] = 0;
- return 1;
- }
- while (num > 0 && limit) {
- digits[digits_count++] = num % 10;
- num /= 10;
- limit--;
- }
- return num ? 0 : digits_count;
- }
- double Getterm(int RawADC) {
- double temp;
- temp = log(((10240000/RawADC) - 10000));
- temp = 1 / (0.001129148 + (0.000234125 * temp) + (0.0000000876741 * temp * temp * temp));
- temp = temp - 273.15;
- temp = round(temp);
- return temp;
- }
- void loop() {
- if (time == 1000) { sec = sec+1; time=0; };
- if (sec == 60) { mins = mins+1; sec=0; };
- if (mins == 60) { hours = hours+1; mins=0; };
- if (hours == 24) { hours = 0; };
- int temphours = hours*10; //костыль
- int tempmins = mins*10;
- int factored_number1[10]={0,0,0,0,0,0,0,0,0,0};
- int factored_number2[10]={0,0,0,0,0,0,0,0,0,0};
- int factored_number3[10]={0,0,0,0,0,0,0,0,0,0};
- int factored_number_len;
- int i;
- if (digitalRead(10) == LOW) {
- int temp = Getterm(analogRead(4));
- int temptemp = temp*10;
- factored_number_len = factor_digits(temptemp, factored_number3, 10);
- digitalWrite(A2, LOW); // включаем 3 сегмент
- PORTD = 0b11010100;
- digitalWrite(A5, HIGH);
- delayMicroseconds(delmks);
- time = time+2;
- digitalWrite(A5, LOW);
- digitalWrite(A2, HIGH); // выключаем 3 сегмент
- digitalWrite(A1, LOW); // включаем 2 сегмент
- PORTD = dgt[factored_number3[2]];
- digitalWrite(A5, HIGH);
- delayMicroseconds(delmks);
- time = time+2;
- digitalWrite(A5, LOW);
- digitalWrite(A1, HIGH); // выключаем 2 сегмент
- digitalWrite(A0, LOW); // включаем 1 сегмент
- PORTD = dgt[factored_number3[1]];
- digitalWrite(A5, HIGH);
- delayMicroseconds(delmks);
- digitalWrite(A5, LOW);
- digitalWrite(A0, HIGH); // выключаем 1 сегмент
- time = time+2; //да, я считаю время как дебил, надо бы померять частотомером частоту сигнала на пинах порта д и выставить делеи, так чтоб целое значение было
- } else {
- // обрабатываем прерывание по пину 7
- if (digitalRead(9) == LOW) {
- if (hz > 600) {hours = hours+1; hz = 0; time = 0;};
- factored_number_len = factor_digits(temphours, factored_number1, 10); // Раскладываем в массив часы
- digitalWrite(A3, LOW); // включаем 4 сегмент
- PORTD = dgt[factored_number1[2]];
- digitalWrite(A5, HIGH);
- delayMicroseconds(delmks);
- digitalWrite(A5, LOW);
- digitalWrite(A3, HIGH); //выключаем 4 сегмент
- hz = hz+10;
- digitalWrite(A2, LOW); // включаем 3 сегмент
- PORTD = dgt[factored_number1[1]];
- digitalWrite(A5, HIGH);
- delayMicroseconds(delmks);
- digitalWrite(A5, LOW);
- digitalWrite(A2, HIGH); // выключаем 3 сегмент
- hz = hz+10;
- };
- if (digitalRead(7) == LOW) {time = 0;};
- // обрабатываем прерывание по пину 8
- if (digitalRead(8) == LOW) {
- if (hz > 600) {mins = mins+1; hz = 0; time = 0;};
- factored_number_len = factor_digits(tempmins, factored_number2, 10);
- digitalWrite(A1, LOW); // включаем 2 сегмент
- PORTD = dgt[factored_number2[2]];
- digitalWrite(A5, HIGH);
- delayMicroseconds(delmks);
- digitalWrite(A5, LOW);
- digitalWrite(A1, HIGH); // включаем 2 сегмент
- hz = hz+20;
- digitalWrite(A0, LOW); // включаем 1 сегмент
- PORTD = dgt[factored_number2[1]];
- digitalWrite(A5, HIGH);
- delayMicroseconds(delmks);
- digitalWrite(A5, LOW);
- digitalWrite(A0, HIGH); // выключаем 1 сегмент
- hz = hz+20;
- };
- factored_number_len = factor_digits(temphours, factored_number1, 10); // Раскладываем в массив часы
- digitalWrite(A3, LOW); // включаем 4 сегмент
- PORTD = dgt[factored_number1[2]];
- digitalWrite(A5, HIGH);
- delayMicroseconds(delmks);
- digitalWrite(A5, LOW);
- digitalWrite(A3, HIGH); //выключаем 4 сегмент
- time = time+2;
- digitalWrite(A2, LOW); // включаем 3 сегмент
- PORTD = dgt[factored_number1[1]];
- digitalWrite(A5, HIGH);
- delayMicroseconds(delmks);
- digitalWrite(A5, LOW);
- digitalWrite(A2, HIGH); // выключаем 3 сегмент
- time = time+2;
- //пишем единицы минут в порт
- factored_number_len = factor_digits(tempmins, factored_number2, 10);
- digitalWrite(A1, LOW); // включаем 2 сегмент
- PORTD = dgt[factored_number2[2]];
- digitalWrite(A5, HIGH);
- delayMicroseconds(delmks);
- digitalWrite(A5, LOW);
- digitalWrite(A1, HIGH); // включаем 2 сегмент
- time = time+2;
- digitalWrite(A0, LOW); // включаем 1 сегмент
- PORTD = dgt[factored_number2[1]];
- digitalWrite(A5, HIGH);
- delayMicroseconds(delmks);
- digitalWrite(A5, LOW);
- digitalWrite(A0, HIGH); // выключаем 1 сегмент
- time = time+2;
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement