What you have to understand is the concept of scope.
Everything (well, almost everything) in C and C++ is enclosed in {
and }
. Those define a scope, and everything defined within that scope is available to any other scopes defined within that scope.
You can also assume that the whole sketch is surrounded by {
and }
. This scope is called the global scope. Anything defined within it is available anywhere in your sketch.
So by defining the object in the global scope it is available everywhere:
# include "Leddisplay.h"
Leddisplay *pRightDigit;
void setup() {
byte Digit[9] = { 22, 23 , 24 ,25, 26, 27, 28, 29, 2 };
pRightDigit = new Leddisplay(Digit);
}
void loop() {
pRightDigit->setDigit(5);
pRightDigit->displayDigit();
}
However the use of new
etc is discouraged in low-memory systems. Better is to statically define the object:
# include "Leddisplay.h"
const byte Digit[9] = { 22, 23 , 24 ,25, 26, 27, 28, 29, 2 };
Leddisplay pRightDigit(Digit);
void setup() {
}
void loop() {
pRightDigit.setDigit(5);
pRightDigit.displayDigit();
}
Note that, when statically defined like this, things in the constructor aren't guaranteed to be run at the right time. They should be moved into a .begin()
function that you then call from setup()
:
# include "Leddisplay.h"
const byte Digit[9] = { 22, 23 , 24 ,25, 26, 27, 28, 29, 2 };
Leddisplay rightDigit(Digit);
void setup() {
rightDigit.begin();
}
void loop() {
rightDigit.setDigit(5);
rightDigit.displayDigit();
}
manpreet
Best Answer
2 years ago
I'm new to the Arduino world. The last time i was programming microprocessors, was back with the Z80 in assembly language.
I am also teaching myself C++ and seems to be going quite well.
I have decided to write my own 'library' for driving 7 segment LED's. The reason for writing my own, rather then using an existing one is to aid with the learning process. I'm quite pleased to say it works ( it may not be the most efficient code)
The books I have on C++ are great, but i do find sometimes the explanation of concepts seem to get lost.
what I would like to know, how do you go about initialising an object class in setup() and using it in loop()? I have this sneaky suspicion that it involves creating the object on the heap, and passing a pointer to the object over somehow.
I could just initialise it once in loop(), and make my own continuous loop afterwards, but there are other things done between the and of a loop() and the beginning of the next loop() (things like timer interrupts).
I will post the code im using, but not the library unless asked to, as it is quite a few lines.
^^ Obviously this does not compile ^^
^^ This does, and runs fine, but may not achieve what I want ^^
I'm not sure if I have used the right wording, or even asked the right question. Thank you for any help in advance. Dave