Esempio n. 1
0
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);
}
Esempio n. 2
0
  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();
  }
Esempio n. 3
0
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;
    }
}