const int BUF_LEN = 50;
byte buffer[BUF_LEN];
int bufferindex = 0;
byte data[5];
void setup()
{
Serial.begin(9600);
Serial.println(F("Type 40 zeros and ones."));
Serial.println(F("Format:"));
Serial.println(F("1000000000000000000000000000000000000000"));
}
void loop()
{
if(Serial.available() > 0)
{
int inChar = Serial.read();
if(inChar == '\n' || inChar == '\r')
{
if(ProcessBuffer())
{
printData();
}
bufferindex = 0;
}
else
{
// The last byte is the zero terminator.
// The byte before that is the last valid character.
if(bufferindex < BUF_LEN - 2)
{
buffer[bufferindex] = (byte) inChar;
bufferindex++;
buffer[bufferindex] = '\0';
}
}
}
}
bool ProcessBuffer()
{
bool ret = false;
if(strlen(buffer) == 40)
{
int i = 0;
for(int j=4; j>=0; j--)
{
for(int k=7; k>=0; k--)
{
byte inChar = buffer[i];
i++;
if(inChar == '0')
bitClear(data[j],k);
else
bitSet(data[j],k);
}
}
ret = true;
}
return(ret);
}
void printData()
{
for(int i=4; i>=0; i--) // index of array
{
for(int j=7; j>=0; j--) // walk the bits
{
int bit = bitRead(data[i],j);
if(bit == 0)
Serial.print("_"); // or "○"
else
Serial.print("#"); // or "●"
}
Serial.print(" ");
}
Serial.println();
}