Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 3 of 3

Thread: Need help writing a library

  1. #1
    Senior Member
    Join Date
    Apr 2017
    Posts
    189

    Need help writing a library

    All,

    I have a neat graphing function that plots stuff like temperatures or voltages over time. The problem is a big ugly function and is hard to update to draw say 2 variables. I can re-code it for 2 variables, but maybe I want more. Ultimately I would like a library to make plotting data easier. I've made my function available (shown in a YouTube vid) and I'd like to make this lib publicly available as well. Maybe something such as:

    create a MyGraph object (pass in display)
    create Plot1 object (pass in graph object)
    create Plot2 object (pass in graph object)

    then in setup ()
    MyGraph.draw() // draws graph, scale, title on the display

    then in loop()
    Getdata()
    Plot1.draw(temperature)
    Plot2.draw(humidity)


    Here's the start of my class but complier errors out when I try to pass the graph object into the plot objects.

    How do I pass the graph object to other objects? so the plot objects writes lines and such to the graph object?

    .h
    Code:
    #ifndef GRAPH_H
    #define GRAPH_H
    
    #if ARDUINO >= 100
     #include "Arduino.h"
     #include "Print.h"
    #else
     #include "WProgram.h"
    #endif
    
    #include <ILI9341_t3.h>   
    
    class Graph {
    
     public:
    	Graph(ILI9341_t3 *disp);		
    	void init(float scaleLow = 100.0, float scaleHi = 100.0, float scale = 0.0, float snap = 0.0);		
    	void draw();
         
    private:
    	ILI9341_t3 *_d;	
    	float _sl;
    	float _sh;
    	float _sc;
    	float _sn;
    	uint16_t _sColor;		
    	uint16_t _bColor;		
    	uint16_t _hColor;			
      };
    
    
    
    
    class Plot {
    
    public:
    
    ///////////////////////////////////////////////////////////// 
    
    // here's where it fails to compile but I don't know how to pass an object to an object
    	Plot(Graph *g);		
    	void draw(float x, float y);	
    	
    private:
    	Graph *_g;	
    	float _x;
    	float _y;
    };
    
    #endif

    .cpp
    Code:
    #include "Graph.h"
    #include <ILI9341_t3.h>     // fast display driver lib
    
    Graph::Graph(ILI9341_t3 *disp) {
    		_d = disp;				
    	}
    
    void Graph::init(float scaleLow, float scaleHi, float scale, float snap) {
       	_sl = scaleLow;
    	_sh = scaleHi;
    	_sc = scale;
    	_sn = snap;
    	}
    
    void Graph::draw() {
    	_d->fillScreen(0x255);
    	//draw grid, scales, etc.
    }
    
    
    
    
    
    
    void Plot::Plot(Graph *g) {
    	_g = g;
    }
    
    void Plot::draw(float x, float y) {
    	_x = x;
    	_y = y;
    	// _g->drawLine(_x, _y, x + 10, _y + 10);
    }

    possible .ino code implementation

    Code:
    #include <ILI9341_t3.h>   // fast display driver lib
    #include "UTouch.h"       // touchscreen lib
    #include <Graph.h>        // custom control define file
    
    // create display and DS objects
    ILI9341_t3 Display = ILI9341_t3(10, 9, 240, 320);
    
    // create the touch screen object
    UTouch  Touch( 6, 5, 4, 3, 2);
    
    // create the graph object
    Graph TheGraph(&Display);
    
    // create plot objects to be drawn on TheGraph (need to be flexible so n plots can be drawn
    Plot Temp(&TheGraph);
    Plot Humidity(&TheGraph);
    Plot Pressure(&TheGraph);
    
    void setup() {
    
      Serial.begin(9600);
    
      Display.begin();
    
      // fire up the touch display
      Touch.InitTouch(PORTRAIT);
      Touch.setPrecision(PREC_EXTREME);
      
      TheGraph.init(); // function or functions to draw the cartesian coordinate system (omitted are arguments for the scales colors, etc)
     
    }
    
    
    void loop() {
    
    // get temp
    Temp.draw(TheTemperature);
    
    // get Humidity
    Temp.draw(TheHumidity);
    
    // get pressure
    Temp.draw(ThePressure);
     
    }

  2. #2
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    4,213
    @KrisKasprzak

    I think you are talking about this one on you tube: https://www.youtube.com/watch?v=YejRbIKe6e0&t=4s

    Really nice had it running on the ILI9488 with the T4 as a test.

    Would love to help but right in middle of another test site - a day or two. But just a couple of notes. That one is almost a library in and unto itself and probably more flexible for different graphs. Think the biggest challenge is going to be supporting different displays like the 9341 and 9488.

  3. #3
    Senior Member
    Join Date
    Apr 2017
    Posts
    189
    Yep, that's my graphing function. I think supporting other displays is relatively easy. Just as long as the lib leverages Adafruit_GFX, only the display data type in the object creation needs to be changed.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •