Read character and do function.

Hey,
I've set up a common anode 7 segment display and made the code for a seperate library that I havn't got around to yet.

Something further I want to do with my code is be able to read a pre-assigned character data type, or one that's input from serial through the IDE. And somehow what the value of char is it needs to be divided up into each character and display the function it's assigned to.

For example:
If I enter 3.141592654 in the IDE serial monitor, it will save what is entered as a char. Then read and perform the '_3_on()' and so on.

Here is the code for those who want it:

#define greenLED 1
#define redLED 0
#define yellowLED 13
#define segA 3
#define segB 2
#define segC 8
#define segD 7
#define segE 6
#define segF 4
#define segG 5
#define segDP 9

void setup()
{
  pinMode(greenLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  pinMode(yellowLED, OUTPUT);
  pinMode(segA, OUTPUT);
  pinMode(segB, OUTPUT);
  pinMode(segC, OUTPUT);
  pinMode(segD, OUTPUT);
  pinMode(segE, OUTPUT);
  pinMode(segF, OUTPUT);
  pinMode(segG, OUTPUT);
  pinMode(segDP, OUTPUT);
}

void loop()                     
{
  digitalWrite(redLED, HIGH);
  delay(1000);
  digitalWrite(redLED, LOW);
  digitalWrite(yellowLED, HIGH);
  delay(1000);
  digitalWrite(yellowLED, LOW);
  digitalWrite(greenLED, HIGH);
  delay(1000);
  digitalWrite(greenLED, LOW);
  
  _0_on();
  delay(1000);
  _0_off();
  _1_on();
  delay(1000);
  _1_off();
  _2_on();
  delay(1000);
  _2_off();
  _3_on();
  delay(1000);
  _3_off();
  _4_on();
  delay(1000);
  _4_off();
  _5_on();
  delay(1000);
  _5_off();
  _6_on();
  delay(1000);
  _6_off();
  _7_on();
  delay(1000);
  _7_off();
  _8_on();
  delay(1000);
  _8_off();
  _9_on();
  delay(1000);
  _9_off();
  _DP_on();
  delay(1000);
  _DP_off();
}

void _0_on()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
}

void _0_off()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
}

void _1_on()
{
  digitalWrite(segB, LOW);
  digitalWrite(segC, LOW);
}

void _1_off()
{
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
}

void _2_on()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segD, LOW);
}

void _2_off()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segD, HIGH);
}

void _3_on()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segD, LOW);
}

void _3_off()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
}

void _4_on()
{
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segC, LOW);
}

void _4_off()
{
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
}

void _5_on()
{
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segD, LOW);
}

void _5_off()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
}

void _6_on()
{
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segG, LOW);
}

void _6_off()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segG, HIGH);
}

void _7_on()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segC, LOW);
}

void _7_off()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
}

void _8_on()
{
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segB, LOW);
}

void _8_off()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segB, HIGH);
}

void _9_on()
{
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segD, LOW);
}

void _9_off()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
}

void _DP_on()
{
  digitalWrite(segDP, LOW);
}

void _DP_off()
{
  digitalWrite(segDP, HIGH);
}

You could create an array of function pointers for the on functions, and another for the off functions.

Then, invoke the function at the appropriate array position, based on the incoming character value.

Thanks Paul,
I'm somewhat completely new to most capabilities of arduino coding. So could you please write the code for displaying 0 and then I can do the rest...

If you could, I'd appreciate it a lot...

This is a sample only. I've compiled, uploaded and tested this:

void (*Funcs[])() = {&A, &B, &C};

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if(Serial.available())
  {
    char aChar = Serial.read();
    switch(aChar)
    {
      case 'A':
        Funcs[0]();
        break;
      case 'B':
        Funcs[1]();
        break;
      default:
        Funcs[2]();
        break;
    }
  }
}

void A()
{
  Serial.println("Function A called...");
}

void B()
{
  Serial.println("Function B called...");
}

void C()
{
  Serial.println("Some other function should be called...");
}

The switch code could be replaced with this:

    if(aChar >= 'A' && aChar <= 'B')
      Funcs[aChar-'A']();
    else
      Funcs[2]();

You should be able to adapt this approach to your situation.