void TM1637Display::showNumberDec(int num, bool leading_zero, uint8_t length, uint8_t pos) { uint8_t digits[4]; const static int divisors[] = { 1, 10, 100, 1000 }; bool leading = true; for(int8_t k = 0; k < 4; k++) { int divisor = divisors[4 - 1 - k]; int d = num / divisor; if (d == 0) { if (leading_zero || !leading || (k == 3)) digits[k] = encodeDigit(d); else digits[k] = 0; } else { digits[k] = encodeDigit(d); num -= d * divisor; leading = false; } } setSegments(digits + (4 - length), length, pos); }
std::string encodeDigits(const std::string & word) const{ std::stringstream ss; char lastLetter = ' '; for(auto letter : word){ if(isComplete(ss.str())){ break; } if(lastDigit(ss.str()) != encodeDigit(letter) || isVowel(lastLetter)){ ss << encodeDigit(letter); } lastLetter = letter; } return ss.str(); }
void Soundex::encodeLetter(std::string& encoding, const char letter, const char lastLetter) const { const char digit = encodeDigit( letter ); const char last = lastDigit( encoding ); if ( digit != notDigit && ( last != digit || isVowel( lastLetter ) ) ) encoding += digit; }
/* * @fn showNumberDec * @brief Print Decimal number on the 4-Digit Display * @param[in] num number to print * @param[in] leading_zero * @param[in] length * @param[in] pos position of the digit */ void showNumberDec(uint16_t num, bool leading_zero, uint8_t length, uint8_t pos){ uint8_t digits[4], i; const uint16_t divisors[] = {1, 10, 100, 1000}; bool leading = true; for(i = 0; i < 4; i++){ uint8_t divisor = divisors[3 - i]; uint8_t d = num / divisor; if( d == 0){ if( leading_zero || !leading || (i == 3)) digits[i] = encodeDigit(d); else digits[i] = 0; } else{ digits[i] = encodeDigit(d); num -= d * divisor; leading = false; } } setSegments(digits + (4 - length), length, pos); }
/* * @fn showTime * @brief Convert and print data on 4Digit-Display * @param[in] clock data date structure. * @param[in] dp flag of double point for clock */ void showTime(struct ds1307_t clock, bool dp, uint8_t msg){ uint8_t d1, d2, d3, d4, data[4]; uint16_t year, divisor[4] = {1000, 100, 10, 1}; switch (msg){ case 0: d1 = clock.seconds%10; d2 = (clock.seconds - d1)/10; d3 = clock.minutes%10; d4 = (clock.minutes - d3)/10; data[0] = encodeDigit (d4); if (dp) data[1] = 0x80 | encodeDigit (d3); else data[1] = encodeDigit (d3); data[2] = encodeDigit (d2); data[3] = encodeDigit (d1); setSegments(data, 4, 0); break; case 1: d1 = clock.minutes%10; d2 = (clock.minutes - d1)/10; d3 = clock.hours%10; d4 = (clock.hours - d3)/10; data[0] = encodeDigit (d4); if (dp) data[1] = 0x80 | encodeDigit (d3); else data[1] = encodeDigit(d3); data[2] = encodeDigit(d2); data[3] = encodeDigit(d1); setSegments(data, 4, 0); break; case 2: showNumberDec (clock.day, false, 4, 0); break; case 3: showNumberDec (clock.date, false, 4, 0); break; case 4: showNumberDec (clock.month, false, 4, 0); break; case 5: year = clock.year; for(d1 = 0; d1 < 4; d1++){ data[d1] = year/divisor[d1]; if(data[d1]) year -= (data[d1] * divisor[d1]); else data[d1] = 0; showNumberDec (data[d1], true, 1, d1); } break; default: break; } }