Здравствуйте, подскажите как можно вывести два числа на одну строку и включить точку int x = 11, int y = 22?
Если это таки означенный выше QuadDisplay, а на каждое число предполагается всегда по два разряда, то можно так: displayFloat(QUAD_PIN,x+y/100.0,2); где QUAD_PIN - номер пина, к которому подключен индикатор.
А можно по подробней displayFloat(QUAD_PIN,x+y/100.0,2);? QUAD_PIN это пин дисплея, x+y это числа 11 и 22, а что это такое /100.0,2?
Для отображения двух двухзнаковых целых с точкой между ними нужно превратить их в десятичную дробь. Первое число берется как есть и образует целую часть. Второе число делится на сто и дает в результате два знака после запятой - сотые доли. Получается выражение x+y/100.0 (100.0 а не просто 100, чтобы деление было не целым с отбрасыванием остатка, а нормальным, с получением float на выходе), которое и передается вторым параметром в функцию. 2 -третий параметр, определяет количество отображаемых знаков в дробной части. Вот и получается. Два знака целой части - x, точка, разделяющая целую и дробную часть, и два знака дробной части - y.
Спасибо большое) вот то что сделал. Код (Text): // Подключаем библиотеку #include <QuadDisplay.h> // Допустим, индикатор подключен к 7-му пину #define PIN 7 // long prevmicros = 0;//переменная для хранения значений таймера boolean counter = false; // счетчик для полусекунд int s = 0;//значение секунд int m = 0;//значение минут int h = 12;//значение часов const int buttonPin = 2;//Вывод кнопки вверх int buttonState = 0; void setup() { pinMode(buttonPin, INPUT); } void loop() { buttonState = digitalRead(buttonPin);//считываем значени с кнопки if (buttonState == LOW) {//если конопка нажата s++;//добавляем 1 число к продыдущему } if (micros() - prevmicros > 500000) { prevmicros = micros(); //принимает значение каждые полсекунды counter =! counter; if (counter == false) { s++; //переменная секунда + 1 if(s>59)//если переменная секунда больше 59 ... { s=0;//сбрасываем ее на 0 m++;//пишем +1 в переменную минута } if(m>59)//если переменная минута больше 59 ... { m=0;//сбрасываем ее на 0 h++;//пишем +1 в переменную час } if(h>12)//если переменная час больше 23 ... { h=1;//сбрасываем ее на 0 } displayFloat(7, h + m /100.0,2); } } }
Доброго времени суток! Собрал QuadDisplay по схеме с сайта Амперки (не кОрысти ради, а чтоб индикаторы побольше использовать)), но на печатке перепутал первый и последний сдвиговые регистры. То есть развернул всё цепь сдвига. Получилось, что символы выводятся в обратном порядке (вместо 1234 видим 4321).Плату курочить не хотелось, полез в QuadDisplay.cpp. Там нашёл функцию Код (C++): void displayDigits(uint8_t pin, uint8_t digit1, uint8_t digit2, uint8_t digit3, uint8_t digit4) { pinMode(pin, OUTPUT); //turnOffPWM work here: digitalWrite(pin, HIGH); sendByte(pin, digit4); //Zdes bilo digit1 sendByte(pin, digit3); //Zdes bilo digit2 sendByte(pin, digit2); //Zdes bilo digit3 sendByte(pin, digit1); //Zdes bilo digit4 latch(pin); Поправил, и всё заработало. Всё, кроме функции Код (C++): void displayFloat(uint8_t pin, float val, uint8_t precision, bool padZeros) { uint8_t dot = 0x1; while (precision) { val *= 10; --precision; dot <<= 1; } displayInt(pin, (int)val, padZeros, dot); Точка горит не там, где нужно, ставлю 2 знака после запятой, горит точка последнего, правого разряда, ставлю 1,- число смещается вправо (с потерей младшего разряда), точка едет влево. Точка первого(левого) знакоместа- горит постоянно, но ключ в 74HC595D целый (при старте не горит). Пришлось отпаять её (точки) резистор. Файл QuadDisplay.cpp написан непросто, и лишён комментариев. Некоторые синтаксические конструкции (digits = (val || padZeros) ? numerals[digit] : 0xff пришлось долго искать в интернете. С программированием я только разбираюсь, посему прошу энтузиастов помочь мне поправить библиотеку под мой случай схемотехнической ошибки!