Go Down

Topic: code using photoresistor, 7448 bcd - 7seg converter and arduino error (Read 853 times) previous topic - next topic

I'm not sure how to attach code so i hope i do it right, this is my first post. I am trying to write code to use a 7448 BCD to seven segment display decoder to use less pins when using a seven segment display and just to make things a little different. Also, I am having the display show a number between 0 and 9 to represent the voltage its letting through. I am getting an error with using a void function. i am new to arduino so i am sure i am doing something very wrong but i would like to learn from this mistake. please help...

void setup()
{
  binaryA(0, 0, 0, 0)
 
  pinMode(7, OUTPUT);
 
  pinMode(8, OUTPUT);
 
  pinMode(9, OUTPUT);
 
  pinMode(10, OUTPUT);
 
  int myInts[] = {num0, num1, num2, num3, num4, num5, num6, num7, num8, num9};
}

void loop()
{
  int lightIn = analogRead(0);
 
  lightIn = map(lightIn, 0, 1024, 0, 9);
 
  myInts[lightIn];
}
     
void binaryA(out1, out2, out3, out4)
{
  if (out1 = 1)             //pin 7; A
  {
    digitalWrite(7, HIGH);
  }
  else
  {
    digitalWrite(7, LOW);
  }
 
  if (out2 = 1)             //pin 10; B
  {
    digitalWrite(10, HIGH);
  }
  else
  {
    digitalWrite(10, LOW);
  }
 
  if (out3 = 1)             //pin 9; C
  {
    digitalWrite(9, HIGH);
  }
  else
  {
    digitalWrite(9, LOW);
  }
 
  if (out4 = 1)              //pin 8; D
  {
    digitalWrite(8, HIGH);
  }
  else
  {
    digitalWrite(8, LOW);
  }
}

void num0()
{
  binaryA(0, 0, 0, 0);
}

void num1()
{
  binaryA(1, 0, 0, 0);
}

void num2()
{
  binaryA(0, 1, 0, 0);
}

void num3()
{
  binaryA(1, 1, 0, 0);
}

void num4()
{
  binaryA(0, 0, 1, 0);
}

void num5()
{
  binaryA(1, 0, 1, 0);
}

void num6()
{
  binaryA(0, 1, 1, 0);
}

void num7()
{
  binaryA(1, 1, 1, 0);
}

void num8()
{
  binaryA(0, 0, 0, 1);
}

void num9()
{
  binaryA(1, 0, 0, 1);
}

HazardsMind

#1
May 23, 2013, 12:12 am Last Edit: May 23, 2013, 12:14 am by HazardsMind Reason: 1
There is more to discuss but for now, you don't need to use if/else statements for your outputs (out1..4), just do digitalWrite(7, out1); . . . digitalWrite(10, out4);

1 = HIGH and 0 = LOW, no need to complicate things. Plus I think your binary is backwards too, but I don't know how you have it wired, so it could be correct.
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

You replied so quick! thank you!! and wow i didnt even think about that, it really saves space, thank you! however, the problem im running into is that it is saying binaryA is void, which i know because i set it to be, but why does it tell me it is an error?

HazardsMind

Your program does not know what out1...4 are, are they a byte, an int, your program does not know.

It should be,
void binaryA(byte out1, byte out2, byte out3, byte out4);

Also for these, I would get rid of and just use your "int myInts[]" as,
byte myInt[10][4] = {
{0,0,0,0}, // 0
{0,0,0,1}, // 1
.
.
.
{1,0,0,1} // 9
};

instead of this here
Quote

void num0()
{
  binaryA(0, 0, 0, 0);
}

void num1()
{
  binaryA(1, 0, 0, 0);
}
.
.
.
void num9()
{
  binaryA(1, 0, 0, 1);
}
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

I can tell you are very good at this! thank you alot, i will do this. youve been a huge help, and if i have any other errors i will ask them as well. thanks!

Now i am getting the error at

"int val = mynum[num];"

That says "invalid conversion from "int" to "int*"

any ideas?

Quote
int mynum[10][4] = {
    {0, 0, 0, 0},
    {1, 0, 0, 0},
    {0, 1, 0, 0},
    {1, 1, 0, 0},
    {0, 0, 1, 0},
    {1, 0, 1, 0},
    {0, 1, 1, 0},
    {1, 1, 1, 0},
    {0, 0, 0, 1},
    {1, 0, 0, 1}
  };
 
void setup()
{
  binary(0, 0, 0, 0);
 
  pinMode(7, OUTPUT);
 
  pinMode(8, OUTPUT);
 
  pinMode(9, OUTPUT);
 
  pinMode(10, OUTPUT);
 

   
}

void loop()
{
  int lightIn = analogRead(5);
 
  int num = map(lightIn, 0, 1024, 0, 9);
 
  int val = mynum[num];
 
  binary(val);
}
     
void binary(int out1, int out2, int out3, int out4)
{
  digitalWrite(7, out1);
  digitalWrite(10, out2);
  digitalWrite(9, out3);
  digitalWrite(8, out4);
}

majenko

Code: [Select]

int mynum[10][4] = {


That is a 2-dimentional array, so mynum[num] returns a pointer to an array of 4 values.

You will have to use:

Code: [Select]

int *val = mynum[num];

Then you would access val[0] thru val[3] for the individual elements.

HazardsMind

#7
May 24, 2013, 02:04 am Last Edit: May 24, 2013, 02:20 am by HazardsMind Reason: 1

Code: [Select]

int mynum[10][4] = {


That is a 2-dimentional array, so mynum[num] returns a pointer to an array of 4 values.

You will have to use:

Code: [Select]

int *val = mynum[num];

Then you would access val[0] thru val[3] for the individual elements.


Exactly, so you will need to do something like this,
Code: [Select]

int myInts[10][4] =
{
  { 0, 0, 0, 0 },
  { 1, 0, 0, 0 },
  { 0, 1, 0, 0 },
  { 1, 1, 0, 0 },
  { 0, 0, 1, 0 },
  { 1, 0, 1, 0 },
  { 0, 1, 1, 0 },
  { 1, 1, 1, 0 },
  { 0, 0, 0, 1 },
  { 1, 0, 0, 1 }
};

void setup(){
  Serial.begin(9600);
  for(int j = 0; j < 10 ; j++) // cycle through digits
   {
    int * temp = myInts[j];
    for(int i = 0; i < 4; i++) // cycle through data
     {
       Serial.print(*(temp+i));
     }
    Serial.println();
  }
  delay(500);
}


void loop() {
}


My GitHub:
https://github.com/AndrewMascolo?tab=repositories

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