Go Down

Topic: Converting an int into separate bytes (segment display) (Read 874 times) previous topic - next topic

aKiwi

Hey there.

Am using a 4 digit, 7seg display with a 74HC595 bitshifter.

I have seen examples of where people have used a bitshifter for each digit.
Which seems overkill.

I have it displaying random numbers without any issues of flickering.

However i want to use a analogRead varible and display that.

Anyone have any tips on how to approach this?


This is a common anode display, so i am sending the bits to the shifter then setting pin high and then low on the anode (with a small delay) before moving to the next digit.

so some how getting an int 1024 to be a char 1, char 0, char 2, char 4?

Any help would be appreciated.


Aeturnalus

Try this? It should split 1024 into {'1', '0', '2', '4'}, but it's not tested whatsoever.

Code: [Select]

char digits[4];
int val = analogRead(0);

for (uint8_t i = 0; i < 4; i++) {
  digits[i] = (val / (10 * (3 - i))) + '0';
  val %= 10 * (3 - i);
}

aKiwi

Thanks, when i print out the binary with your code it seems to be doing what i want.


The way my code works is it uses this character set
Code: [Select]

const byte ledCharSet[10] =
{
  // Binary Digits
  B01111110, B00110000, B01101101, B01111001, // 0123
  B00110011, B01011011, B01011111, B01110000, // 4567
  B01111111, B01111011       // 89     
};


hence if i want a '3' to display i call bitShift(ledCharSet[3])

So i am having trouble linking your digits
  • to this ledCharSet.

Aeturnalus

Oh.  You implied you wanted characters - just remove the + '0' from the digits line - that converts it from the number 0 to the character '0', and you need the number to use as an index.

aKiwi

#4
May 30, 2011, 09:31 am Last Edit: May 30, 2011, 10:04 am by aKiwi Reason: 1
Thanks for your help Aeturnalis,

I managed to get it sorted just before your reply.

Code: [Select]

int digits[4] ;
 
 for (int i = 3; i >= 0; i--) {
   digits[i] = val % 10;
   val /= 10;
 }


then used that to access the array of digits.

I tried yours (without the zero) for test sake, but it makes the digits go into all sorts of weird characters.
(Im assuming it is due to passing a char instead of a byte to my shift function -> might try out some bitwise operators to get it working.

Thanks again

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy