LCD display with overlay and voltage/current control

I'm working on a project and I need to have a display that will show a load line overlay like this

where I can navigate a pointer across the load line and control the voltage/current based on the location of the pointer on the load line.
I also want to have a menu where I can select different pre-loaded devices with different load lines and have a protection mechanism that will not allow you to adjust the operating point beyond a threshhold for the model chosen.

I already have the voltage/current control in the works in which I'll be adjusting with LDRs, for this I just need to figure out the the visual and control functions.

I know nothing of coding or digital electronics. Is this task too ambitious for me?

This seems doable but not as your very first Arduino project. The reason is that the screens available for the Arduino are quite primitive. You don't get nice graph functions so you have to write your own. You also don't get nice sprite functions so a pointer moving over the top of that graph has to redraw the graph behind it when it moves.

It may be better to put the user interface on a PC and send commands to the Arduino so that it will drive the outputs appropriately.

How does an LDR control up to 9A of current?

MorganS:
It may be better to put the user interface on a PC and send commands to the Arduino so that it will drive the outputs appropriately.

Unfortunately the solution must be portable and dedicated so I cannot use a PC.

MorganS:
How does an LDR control up to 9A of current?

The LDR is just a trimmer to adjust the CVS/CCS circuits.

MorganS:
This seems doable but not as your very first Arduino project.

Unfortunately there's no way around the fact that I can't accept anything less. How and where would I begin to embark on this project?

You mention the reason this is not a beginner project is because arduino does not offer the correct display. Can I not just buy a third party display and control it with the arduino during prototyping?

Anyone? I need a direction to start in.

coinmaster:
You mention the reason this is not a beginner project is because arduino does not offer the correct display. Can I not just buy a third party display and control it with the arduino during prototyping?

MorganS was referring to third-party displays.

And the other reason this project would currently be beyond you is:-

I know nothing of coding or digital electronics.

Anyone? I need a direction to start in.

Start learning programming an Arduino with C++. Build test circuits, play around with the examples provided with the IDE. With no programming experience, you don't have a snowball's chance of achieving your goal until you get a fair bit of practice. Learn to crawl before you try to walk, then when you're used to that, try running.

Awww, I thought arduino didn't need C++? I tried learning C++ once, it was not fun.

coinmaster:
Awww, I thought arduino didn't need C++? I tried learning C++ once, it was not fun.

The Arduino language is C++. Take a look at the source files and libraries. All are written in C or C++.
For example, this is part of the header for the "Servo" library - basically a standard C++ class:-

typedef struct
{
    uint8_t nbr        : 6 ;            // a pin number from 0 to 63
    uint8_t isActive   : 1 ;            // true if this channel is enabled, pin not pulsed if false
} ServoPin_t   ;

typedef struct
{
    ServoPin_t Pin;
    volatile unsigned int ticks;
} servo_t;

class Servo
{
    public:
        Servo();
        uint8_t attach(int pin);           // attach the given pin to the next free channel, sets pinMode, returns channel number or 0 if failure
        uint8_t attach(int pin, int min, int max); // as above but also sets min and max values for writes.
        void detach();
        void write(int value);             // if value is < 200 its treated as an angle, otherwise as pulse width in microseconds
        void writeMicroseconds(int value); // Write pulse width in microseconds
        int read();                        // returns current pulse width as an angle between 0 and 180 degrees
        int readMicroseconds();            // returns current pulse width in microseconds for this servo (was read_us() in first release)
        bool attached();                   // return true if this servo is attached, otherwise false
    private:
        uint8_t servoIndex;               // index into the channel data for this servo
        int8_t min;                       // minimum is this value times 4 added to MIN_PULSE_WIDTH
        int8_t max;                       // maximum is this value times 4 added to MAX_PULSE_WIDTH
};

It's not all that hard to learn. Just start with the basics as shown in the IDE examples and work your way up.

What arudino do you recommend for this project? Assuming I learn C++ and whatnot is there a solution to my screen problem?

coinmaster:
What arudino do you recommend for this project? Assuming I learn C++ and whatnot is there a solution to my screen problem?

I'm not a display expert, so can't answer your question. You want to do some fairly advanced stuff, so you'll need to do some research to see what displays have the size, resolution and capabilities to do what you want, then look at which Arduino will be needed to reach your objective.

You won't get anywhere until you learn the basics. For that, a UNO is probably a good choice.

This isn't a project that you can just dive straight into with no experience. You'll need to do a lot of practice and a lot of research.

coinmaster:
Unfortunately there's no way around the fact that I can't accept anything less. How and where would I begin to embark on this project?

Well, first start with the non-portable version. Basically everything I write starts with something simple that uses the Serial monitor to send out raw sensor data or whatever, so I can see that the functional part of the circuit is working.

The job you want to do on the screen is going to consume a lot of your Arduino's memory. Anything beyond "really simple" will exceed the memory available on an Uno or Micro. You might think that the obvious upgrade path is an Arduino Due but the Teensy is even more capable even though it has fewer output pins. Read https://www.arduino.cc/en/Tutorial/Memory to understand the limitations and the different types of memory.

You will need some kind of input - buttons and maybe a keypad. Work out what you want the physical interface to look like, buy some parts and wire them up.

Then you're going to have to jump into the deep end with the screen code. Buy a high resolution screen like this Adafruit 5" one: 5.0 40-pin TFT Display - 800x480 with Touchscreen : ID 1596 : $29.95 : Adafruit Industries, Unique & fun DIY electronics and kits They have the same resolution in a 7" screen or a smaller screen with smaller resolution. This is about as high as you want to go on an Arduino. Any more pixels on the screen and you will spend absolutely seconds waiting for the screen to update.

That particular screen needs a driver board. Adafruit sell the board too.

Then you need a library to drive the board. The Adafruit one works but I recommend the one Sumotoy on Github has written: GitHub - sumotoy/RA8875: A library for RAiO RA8875 display driver for Teensy3.x or LC/Arduino's/Energia/Spark This allows you to access most of the features of the RA8875 chip to off-load some of the graphics work. He also has recommendations for cheaper screens to buy from China

Just getting text to display on the screen is pretty easy. You don't have to follow the exact order of operations above.

But then mounting those Adafruit screens is difficult. There's no screw holes or tabs to allow them to go into a pre-built box. I 3D print my enclosures now. That takes a certain amount of experience with 3D design and the printer's foibles to be able to make the features that hold the screen securely. Duct tape is fine for a desk-bound prototype but making something portable is actually quite difficult.