Go Down

Topic: Global variable "not declared in this scope" (Read 2512 times) previous topic - next topic

I'm only used to programming things in PHP, so I understand there are differences.  I don't understand why, no matter where I declare this variable, I keep getting the same errors.

My entire program so far is as follows:

Quote

int greenPin = 11;
int redPin = 10;
int switchPin = 9;
int lightState;

void setup()
{
  pinMode(greenPin,OUTPUT);
  pinMode(redPin,OUTPUT);
  pinMode(switchPin,INPUT);
}
//int lightState;
int lightDisplay(lightState){
  
  switch (lightState)
  {
    case 1:
    digitalWrite(greenPin,HIGH);
    digitalWrite(redPin,LOW);
    break;
    case 2:
    digitalWrite(redPin,HIGH);
    digitalWrite(greenPin,LOW);
    break;
    case 3:
    digitalWrite(redPin,LOW);
    digitalWrite(greenPin,LOW);
    break;
  }
}

void loop()
{

  if (digitalRead(switchPin) == HIGH)
  {
    lightDisplay(3);
  }
  else
  {
    lightDisplay(1);
  }
}



All I want to do is be able to call the lightDisplay() function and tell it whether to light a green LED, a red LED, or nothing at all.  Seems like this would be easier than rewriting the digitalWrite() statements over and over.

Anyway, when clicking the Verify button, I get this:

sketch_apr01a:-1: error: 'lightState' was not declared in this scope
sketch_apr01a:12: error: redefinition of 'int lightDisplay'
sketch_apr01a:-1: error: 'int lightDisplay' previously defined here

lightState is declared at the top of the code so I don't understand how this can be happening.  Am I using the wrong datatype or something?

AWOL

Code: [Select]
int lightDisplay(lightState){

Does lightState have a type?
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

You can get rid of it at the top of your code.  You just need to 'declare' it in your function definition

Code: [Select]

void lightDisplay(int lightState){


And make it a void function because it returns nothing.

Thank you.  I'm not used to having to declare variables that way, so no wonder I couldn't figure it out.  Declaring the variable inside the function worked great.

WillR

There is a reference section for this idea of scoping!
http://www.arduino.cc/en/Reference/Scope

It is worth the time to read and understand.

Global variables should generally be avoided.

Local variables are better.

Except for the exceptions -- but that is the advanced class.
Just another Hacker

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