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);
- }
- unsigned long cur_millis , lastTick, setTick = 0;
- 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() {
- cur_millis = millis(); //time
- if (cur_millis - lastTick >= 1000) {
- lastTick = cur_millis;
- sec++;
- if (sec >= 60) {
- mins++;
- sec = 0;
- }
- if (mins >=60) {
- hours++;
- mins = 0;
- }
- if (hours >=24) {
- hours=0;
- mins = 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) { //обрабатываем пин 10 - температура
- int temp = Getterm(analogRead(4));
- int temptemp = temp*10;
- factored_number_len = factor_digits(temptemp, factored_number3, 10);
- digitalWrite(A2, LOW); // включаем 3 сегмент
- PORTD = 0b11010100;
- delayMicroseconds(delmks);
- digitalWrite(A2, HIGH); // выключаем 3 сегмент
- digitalWrite(A1, LOW); // включаем 2 сегмент
- PORTD = dgt[factored_number3[2]];
- delayMicroseconds(delmks);
- digitalWrite(A1, HIGH); // выключаем 2 сегмент
- digitalWrite(A0, LOW); // включаем 1 сегмент
- PORTD = dgt[factored_number3[1]];
- delayMicroseconds(delmks);
- digitalWrite(A0, HIGH); // выключаем 1 сегмент
- } else {
- // обрабатываем пин 9 часы
- if (digitalRead(9) == LOW) {
- if (hz > 600) {hours = hours+1; hz = 0; sec = 0;};
- if (hours == 24) {hours = 0; hz = 0; sec = 0;};
- factored_number_len = factor_digits(temphours, factored_number1, 10); // Раскладываем в массив часы
- digitalWrite(A3, LOW); // включаем 4 сегмент
- PORTD = dgt[factored_number1[2]];
- delayMicroseconds(delmks);
- digitalWrite(A3, HIGH); //выключаем 4 сегмент
- hz = hz+10;
- digitalWrite(A2, LOW); // включаем 3 сегмент
- PORTD = dgt[factored_number1[1]];
- delayMicroseconds(delmks);
- digitalWrite(A2, HIGH); // выключаем 3 сегмент
- hz = hz+10;
- };
- // обрабатываем пин 8 - минуты
- if (digitalRead(8) == LOW) {
- if (hz > 600) {mins = mins+1; hz = 0; sec = 0;};
- if (mins == 60) {mins = 0; hz = 0; sec = 0;};
- factored_number_len = factor_digits(tempmins, factored_number2, 10);
- digitalWrite(A1, LOW); // включаем 2 сегмент
- PORTD = dgt[factored_number2[2]];
- delayMicroseconds(delmks);
- digitalWrite(A1, HIGH); // включаем 2 сегмент
- hz = hz+20;
- digitalWrite(A0, LOW); // включаем 1 сегмент
- PORTD = dgt[factored_number2[1]];
- delayMicroseconds(delmks);
- digitalWrite(A0, HIGH); // выключаем 1 сегмент
- hz = hz+20;
- };
- if (digitalRead(7) == LOW) { sec = 0; };
- factored_number_len = factor_digits(temphours, factored_number1, 10); // Раскладываем в массив часы
- digitalWrite(A3, LOW); // включаем 4 сегмент
- PORTD = dgt[factored_number1[2]];
- delayMicroseconds(delmks);
- digitalWrite(A3, HIGH); //выключаем 4 сегмент
- digitalWrite(A2, LOW); // включаем 3 сегмент
- PORTD = dgt[factored_number1[1]];
- delayMicroseconds(delmks);
- digitalWrite(A2, HIGH); // выключаем 3 сегмент
- //пишем единицы минут в порт
- factored_number_len = factor_digits(tempmins, factored_number2, 10);
- digitalWrite(A1, LOW); // включаем 2 сегмент
- PORTD = dgt[factored_number2[2]];
- delayMicroseconds(delmks);
- digitalWrite(A1, HIGH); // включаем 2 сегмент
- digitalWrite(A0, LOW); // включаем 1 сегмент
- PORTD = dgt[factored_number2[1]];
- delayMicroseconds(delmks);
- digitalWrite(A0, HIGH); // выключаем 1 сегмент
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement