Hello,
I'm a complete noob when it comes to programming and I'm pretty stuck on a college assignment so apologies if this doesn't make a lot of sense
I'm just wondering if anyone can help me...I'm trying to set up a reaction timer when the keypad is pressed and have it displayed on the four 7-segment displays. Some of the code I have so far is below (The part with the error) but I keep getting the error: " 'extractDigitsFromNumber' was not declared in this scope"...would anybody be able to tell whats going wrong with it?
Thank you in advance
// Arduino I/O pins: 7-segment display switches
#define DISPLAY1 2
#define DISPLAY2 19
#define DISPLAY3 3
#define DISPLAY4 18
// Arduino I/O pins: LED segments of each display
#define SEGA 6
#define SEGB 15
#define SEGC 7
#define SEGD 14
#define SEGE 8
#define SEGF 10
#define SEGG 9
#define SEGDP 11
// Arduino I/O pins: Keypad rows (Top row is 1; bottom row is 4)
#define KP_ROW1 11
#define KP_ROW2 9
#define KP_ROW3 10
#define KP_ROW4 8
// Arduino I/O pins: Keypad columns (Far left column is 1; far right column is 3)
#define KP_COL1 7
#define KP_COL2 15
#define KP_COL3 6
// Arduino I/O pins: LED array
#define LED0 6
#define LED1 15
#define LED2 7
#define LED3 14
#define LED4 8
#define LED5 10
#define LED6 9
#define LED7 11
//Declare global variables (assessible by all fuctions)
//Initalise array to hold Arduino connections to keypad columns for keys 0-9,* and #
char keyPadColumnConnection[] = {
KP_COL2, KP_COL1, KP_COL2, KP_COL3, KP_COL1,
KP_COL2, KP_COL3, KP_COL1, KP_COL2, KP_COL3, KP_COL1, KP_COL3
};
char keyPadRowConnection[] = {
KP_ROW4, KP_ROW1, KP_ROW1, KP_ROW1, KP_ROW2, KP_ROW2,
KP_ROW2, KP_ROW3, KP_ROW3, KP_ROW3, KP_ROW4, KP_ROW4,
};
int digit[4];
void setup(){
switchOffLedDisplays();
initialiseKeypad();
randomSeed(15874);
Serial.begin(9600);
//Enable the Arduino to drive 7-segment displays
pinMode(DISPLAY1, OUTPUT); pinMode(DISPLAY2, OUTPUT);
pinMode(DISPLAY3, OUTPUT); pinMode(DISPLAY4, OUTPUT);
/*
//Enable the arduino to drive the individual LED segments within the displays
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(){
int userReactionTime;
unsigned long reactionTime;
flashStimulusLED(LED7, random(2000, 10000));
userReactionTime = keypressResponseTime(11, 2000);
Serial.println(userReactionTime);
reactionTime = userReactionTime;
extractDigitsFromNumber(reactionTime);
Serial.println(digit[0]);
Serial.println(digit[1]);
Serial.println(digit[2]);
Serial.println(digit[3]);
int displayOnTime;
int i;
for (i=200; i>-1; i--){
showDigitOnLedDisplay(4, digit[0], 5);
showDigitOnLedDisplay(3, digit[1], 5);
showDigitOnLedDisplay(2, digit[2], 5);
showDigitOnLedDisplay(1, digit[3], 5);
}
digitalWrite(DISPLAY1, LOW); digitalWrite(DISPLAY2, LOW);
digitalWrite(DISPLAY3, LOW); digitalWrite(DISPLAY4, LOW);
delay(2500);
}
void extractDigitsFromNumber(long num)
int i;
{
for (i=3; i>-1; i--);{
digit[i] = num%10;
num=(num-digit[i])/10;
}
}
int keypressResponseTime(char keyNumber,int maxTimeAllowed){
unsigned long startTime, reactionTime;
int elapasedTime;
char keyPressed = 0;
digitalWrite(keyPadColumnConnection[keyNumber], HIGH);
pinMode (keyPadRowConnection[11],INPUT);
startTime = millis(); //Starting time of millisecond stopwatch timer
//Loop until the active key is pressed or the maximum timeout has elapsed
while( (keyPressed == 0)&&(elapsedTime <= maxTimeAllowed) ) {
//Read the row corresponding to the specified key
keyPressed = digitalRead(keyPadRowConnection[keyNumber]);
elapsedTime = millis() - startTime; //Calculate time taken to press key
}
digitalWrite(keypadColumnConnection[keyNumber], LOW);
return elapsedTime;
}
void flashStimulusLED(char stimulusLED, unsigned long ledOnTime) {
pinMode(stimulusLED, OUTPUT);
digitalWrite(stimulusLED,HIGH); //Turn on stimulus LED
delay(ledOnTime);
digitalWrite(stimulusLED,LOW); //Turn off stimulus LED
}
void switchOffLedDisplays() {
pinMode(DISPLAY1, OUTPUT); digitalWrite(DISPLAY1, LOW);
pinMode(DISPLAY2, OUTPUT); digitalWrite(DISPLAY2, LOW);
pinMode(DISPLAY3, OUTPUT); digitalWrite(DISPLAY3, LOW);
pinMode(DISPLAY4, OUTPUT); digitalWrite(DISPLAY4, LOW);
}
void initialiseKeypad() {
pinMode(KP_COL1, OUTPUT); digitalWrite(KP_COL1, LOW);
pinMode(KP_COL2, OUTPUT); digitalWrite(KP_COL2, LOW);
pinMode(KP_COL3, OUTPUT); digitalWrite(KP_COL3, LOW);
pinMode(KP_ROW1, INPUT); pinMode(KP_ROW2, INPUT);
pinMode(KP_ROW3, INPUT); pinMode(KP_ROW4, INPUT);
}