custom icons with GFX libs

Post here about your Arduino projects, get help - for Adafruit customers!

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
Nevaargh
 
Posts: 7
Joined: Sat Jan 26, 2013 3:20 pm

custom icons with GFX libs

Post by Nevaargh »

This is being integrated into a sensor display package for my robot. The icons will be arranged visually on my 1.8"tft the same as they are mounted on the robot chassis. I plan to implement simple graphing and other goodies. Maybe even a 3rd dimension to the array to store a differential bitmap for status - flip between the z-axis for on/off or whatever.

Once I have the icons built, I should be able to put status icons with live sensor data anywhere on the screen. Unfortunately, at the moment I have to have a custom icon and function for each icon... and I have to make the icons by hand.

Code has been updated to allow for transparent background ! Code below displays a 'battery'

It'd really be nice to be able to use the output of a tool such as Image2Code natively. :P

Code: Select all

// http://learn.adafruit.com/adafruit-gfx-graphics-library/graphics-primitives
// The GFX libs for the 1.8" display.  
// the display pins in play
// Pins to use - If you arent using a Mega2560, adjust accordingly
#define sclk 23  // BLUE wire
#define mosi 25  // GREEN wire
#define dc   27  // WHITE wire
#define rst  29  // ORANGE wire - you can also connect this to the Arduino reset
#define cs   31  // YELLOW wire
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h> // not using SPI here so probably don't need this.  Doesn't hurt to have it.
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);

// Color definitions  These may not be the same colors from the adafruit tutorials (off brand display & LSB/MSB issue?)
    #define BLACK 0x0000
    #define RED 0x001F
    #define REDdk 0xF00F
    #define BLUE 0xF800
    #define GREEN 0x07E0
    #define GREENdk 0x0570
    #define YELLOW 0x07FF
    #define MAGENTA 0xF81F
    #define CYAN 0xFFE0
    #define WHITE 0xFFFF
    
// a basic icon
// foreground color
int iconBG=0x0000;
// background color
int iconFG=0xFFFF;
// don't draw a pixel - transparent background
int iconTB=0xFFE0; //cyan - it clashes with my intended color scheme
int iconh=12;
int iconw=7;
// const byte icon [iconh] [iconw]
const int icon [12] [7] = {
{iconTB,iconTB,iconFG,iconFG,iconFG,iconTB,iconTB},
{iconTB,iconTB,iconFG,iconBG,iconFG,iconTB,iconTB},
{iconTB,iconFG,iconBG,iconBG,iconBG,iconFG,iconTB},
{iconFG,iconBG,iconBG,iconBG,iconBG,iconBG,iconFG},
{iconFG,iconBG,iconBG,iconBG,iconBG,iconBG,iconFG},
{iconFG,iconBG,iconBG,iconBG,iconBG,iconBG,iconFG},
{iconFG,iconBG,iconBG,iconBG,iconBG,iconBG,iconFG},
{iconFG,iconBG,iconBG,iconBG,iconBG,iconBG,iconFG},
{iconFG,iconBG,iconBG,iconBG,iconBG,iconBG,iconFG},
{iconFG,iconBG,iconBG,iconBG,iconBG,iconBG,iconFG},
{iconFG,iconBG,iconBG,iconBG,iconBG,iconBG,iconFG},
{iconTB,iconFG,iconFG,iconFG,iconFG,iconFG,iconTB},
};

void setup()
{
  delay(50);
  tft.initR(INITR_REDTAB);   // initialize a ST7735R chip, red tab
  tft.fillScreen(RED);
}

void loop()
{  
putICON(40,100);
putICON(10,10);
putICON(74,60);
}

// read the colors from the array and draw the pixel
void putICON(int x, int y){
  int rfoo=0;
  int cfoo=0;
  int r,c;
  for (rfoo=0;rfoo<iconh;)
  {
    for (cfoo=0;cfoo<iconw;)
    {
     if (icon[rfoo][cfoo]!=iconTB) {
       tft.drawPixel(x+cfoo,y+rfoo,icon[rfoo][cfoo]);
     }
     cfoo++;
    }  
    rfoo++;
  }
}


Nevaargh
 
Posts: 7
Joined: Sat Jan 26, 2013 3:20 pm

Re: custom icons with GFX libs

Post by Nevaargh »

OK, found some useful tools for making the bitmaps, but my display renders them as properly sized/scaled gibberish. Yet my hand-constructed icons are functional - go figure. Working with what I had, I made some simple line-art icons which currently take a number of parameters - linecolor, fillcolor, transparencycolor. 8) Going to add alarmcolor as a variant of linecolor on a trigger value.

Entire display system is Themeable! :P though you will want to define additional colors for your palette.

Code: Select all

// note to self:  make the themes a 2D array, then select theme based on timer or event.
//int myTheme [] = {CYAN,GREEN,OLIVE,YELLOW,OLIVE}; // Greens - kinda bright
//int myTheme [] = {CYAN,OLIVE,GREENdk,YELLOW,GREENdk}; // Darker Green
 int myTheme [] = {CYAN,REDdk2,REDdk,YELLOW,REDdk}; // a nice red theme for nighttime
//int myTheme [] = {CYAN,BLUE,BLUEdk1,YELLOW,BLUEGREYdk}; // Da Blues
Sample final code, which I've called RoboShow and include in whole below, renders 12 visual sensor data points in ~1.3 sec on 1.8"tft. Code can likely be optimized. There are dependency libs, but nothing oddball or extremely heavy. SPI, Wire, Adafruit_GFX/ST7735/BMP085, NewPing

PIR (x2)
PING (x2)
Sonar
BMP-temp // selectable F/C display
BMP-alt // selectable f/m display
BMP-bar
ACCEL-x
ACCEL-y
ACCEL-z
Battery // icon/placeholder

So, anyway.

I apologize to everyone who unknowingly contributed, for caught up in the moment as I was I was literally copy/pasting code not expecting it to really work. There is so much of the community in RoboShow, that I believe the code should be set free to mix and mingle with other code-lings as it sees fit.

Do as thou will, harm none.

Code: Select all

#include <SPI.h>  // SPI
#include <Wire.h> // Wire
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <Adafruit_BMP085.h> // BMP - Barometic sensor library
#include <NewPing.h> // NewPing 

// the display pins in play - If you arent using a Mega2560 for this, you should be...
#define sclk 23  // BLUE wire
#define mosi 25  // GREEN wire
#define dc   27  // WHITE wire
#define rst  29  // ORANGE wire
#define cs   31  // YELLOW wire

int maxdistance=150;
// Ultrasonic-01
int echoPINGright=50;
int triggerPINGright=52; // ping return signal pin
unsigned long triggerVALright=0;
NewPing sonarRight(triggerPINGright,echoPINGright,maxdistance); // NewPing setup of pins and maximum distance.

// Ultrasonic-02
unsigned long echoPINGleft = 24;
unsigned long triggerPINGleft = 22; // Ultrasound signal pin
unsigned long triggerVALleft=0;
NewPing sonarLeft(triggerPINGleft,echoPINGleft,maxdistance); // NewPing setup of pins and maximum distance.

// 3-axis accellerometer uses analog pins
const int xpin = A0;                  // x-axis of the accelerometer
const int ypin = A1;                  // y-axis
const int zpin = A2;                  // z-axis (only on 3-axis models)
const int maxSonarpin = A3; // MaxBotix sonar - EZ

Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);
// Color definitions  These may not be the same colors from the adafruit tutorials (off brand display & LSB/MSB issue?)
    #define BLACK 0x0000
    #define RED 0x001F
    #define REDdk2 0x001A
    #define REDdk 0x000A
    #define BLUE 0xF800
    #define BLUEdk1 0x4101
    #define BLUEGREYdk 0x2101
    #define GREEN 0x07E0
    #define GREENdk 0x0100
    #define OLIVE 0x0460
    #define YELLOW 0x07FF
    #define MAGENTA 0xF81F
    #define CYAN 0xFFE0
    #define WHITE 0xFFFF
 
// theme colors.   The icons will reference these for outlione, fill and transparency 

// int myTheme [] = {colorTRAN,iconCOLR,iconFILL,iconALRM,SENSORGRID};
//int myTheme [] = {CYAN,YELLOW,REDdk,RED,dkRED};
//int myTheme [] = {CYAN,GREEN,OLIVE,YELLOW,OLIVE}; // Greens - kinda bright
//int myTheme [] = {CYAN,OLIVE,GREENdk,YELLOW,GREENdk}; // Darker Green
int myTheme [] = {CYAN,REDdk2,REDdk,YELLOW,REDdk}; // a nice red theme for nighttime
//int myTheme [] = {CYAN,BLUE,BLUEdk1,YELLOW,BLUEGREYdk}; // Da Blues

int iconTRAN=myTheme[0]; //cuz it clashes with my intended color scheme - don't draw a pixel - transparent background
int iconCOLR=myTheme[1]; // foreground color
int iconFILL=myTheme[2]; // background color
int iconALRM=myTheme[3]; // 
int SENSORGRID=myTheme[4];


int foo=0;
int myInnerDelay=0;
int mydelay=myInnerDelay;
int myOuterDelay=100;

Adafruit_BMP085 bmp;

float RoboShowVer = .04;
void setup()
{
  //
    Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
    delay(myInnerDelay);
    tft.setTextColor(iconCOLR,iconFILL);
    tft.setTextSize(0);
    tft.initR(INITR_REDTAB);   // initialize a ST7735R chip, red tab
    tft.fillScreen(BLACK);
//  initRoboShow(COLOR,float,wait time in sec);  
    initRoboShow(SENSORGRID,RoboShowVer,5);
     //tft.initR(INITR_REDTAB);   // initialize a ST7735R chip, red tab
    //tft.fillScreen(BLACK);
}
 
 

void loop()
{

  // in general:  foo(x,y,sensorval);
//  putPIR(25,45,23);
//  putPIR(105,45,2);
//  putPING(35,60, 200);
//  putPING(75,60, 200);
  
  unsigned int uSLeft = sonarLeft.ping();
  unsigned int uSRight = sonarRight.ping();
  iconPIRshow(10,35,0); // x,y,value
  iconPIRshow(105,35,0); // x,y,value
  iconPINGshow(35,60,(uSLeft/US_ROUNDTRIP_CM)); // x,y,value
  iconPINGshow(75,60,(uSRight/US_ROUNDTRIP_CM)); // you get the idea
  putBMPalt(35,90,'F'); // 'F' for Farenheight, 'C' for Celsius
  putMAXsonar(5,100);
  putBMPtemp(5,120,'F'); // 'F' for Feet, 'M' for Meters
  putACCEL(60,120);
  putBMPbar(5,140); 
  iconBATTshow(118,145,50); // bottom right of 1.8"tft
}
//
// PIR Display
//
int iconPIRh=12;
int iconPIRw=16;
// const byte icon [h] [w]
const int iconPIR [12] [16] = {
{iconCOLR,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconCOLR},
{iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN},
{iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconCOLR,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconCOLR,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconTRAN,iconTRAN,iconTRAN},
};
// read the colors from the array and draw the pixel
void iconPIRshow(int x, int y,int sensorval){
  int rfoo=0;
  int cfoo=0;
  int r,c;
  for (rfoo=0;rfoo<iconPIRh;)
  {
    for (cfoo=0;cfoo<iconPIRw;)
    {
     if (iconPIR[rfoo][cfoo]!=iconTRAN) {
       tft.drawPixel(x+cfoo,y+rfoo,iconPIR[rfoo][cfoo]);
     }
     cfoo++;
    }  
    rfoo++;
  }
  tft.setTextColor(iconCOLR,iconFILL);
  tft.setTextSize(0);
  tft.fillRect(x, y+rfoo+2, cfoo, 11, iconFILL);
  tft.drawRect(x, y+rfoo+2, cfoo, 11, iconCOLR);
  tft.setCursor(x+3, y+rfoo+4);
  tft.print(sensorval);
}
//
// PING Display
//
int iconPINGh=10;
int iconPINGw=21;
// const byte icon [h] [w]
const int iconPING [10] [21] = {
//FLASH_TABLE(byte, iconPING, 21, 
{iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconCOLR,iconCOLR,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN,iconTRAN},
{iconTRAN,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconTRAN},
{iconCOLR,iconCOLR,iconFILL,iconFILL,iconCOLR,iconFILL,iconFILL,iconCOLR,iconFILL,iconFILL,iconCOLR,iconFILL,iconFILL,iconCOLR,iconFILL,iconFILL,iconCOLR,iconFILL,iconFILL,iconCOLR,iconCOLR},
{iconCOLR,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconCOLR},
{iconCOLR,iconCOLR,iconFILL,iconFILL,iconCOLR,iconFILL,iconFILL,iconCOLR,iconFILL,iconFILL,iconCOLR,iconFILL,iconFILL,iconCOLR,iconFILL,iconFILL,iconCOLR,iconFILL,iconFILL,iconCOLR,iconCOLR},
{iconTRAN,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconTRAN}
};
//);
// read the colors from the array and draw the pixel
void iconPINGshow(int x, int y,int sensorval){
  int rfoo=0;
  int cfoo=0;
  int r,c;
  for (rfoo=0;rfoo<iconPINGh;)
  {
    for (cfoo=0;cfoo<iconPINGw;)
    {
     if (iconPING[rfoo][cfoo]!=iconTRAN) {
       int myPixel=iconPING[rfoo][cfoo];
       tft.drawPixel(x+cfoo,y+rfoo,myPixel);
     }
     cfoo++;
    }  
    rfoo++;
  }
  tft.setTextColor(iconCOLR,iconFILL);
  tft.setTextSize(0);
  tft.fillRect(x-1, y+rfoo+2, cfoo+2, 11, iconFILL);
  tft.drawRect(x-1, y+rfoo+2, cfoo+2, 11, iconCOLR);
  tft.setCursor(x+2, y+rfoo+4);
  tft.print(sensorval);
}
//
// BATTERY Display
//
int iconBATTh=12;
int iconBATTw=7;
// const byte icon [h] [w]
const int iconBATT [12] [7] = {
{iconTRAN,iconTRAN,iconCOLR,iconCOLR,iconCOLR,iconTRAN,iconTRAN},
{iconTRAN,iconTRAN,iconCOLR,iconFILL,iconCOLR,iconTRAN,iconTRAN},
{iconTRAN,iconCOLR,iconFILL,iconFILL,iconFILL,iconCOLR,iconTRAN},
{iconCOLR,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconCOLR},
{iconCOLR,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconCOLR},
{iconCOLR,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconCOLR},
{iconCOLR,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconCOLR},
{iconCOLR,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconCOLR},
{iconCOLR,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconCOLR},
{iconCOLR,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconCOLR},
{iconCOLR,iconFILL,iconFILL,iconFILL,iconFILL,iconFILL,iconCOLR},
{iconTRAN,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconCOLR,iconTRAN},
};
// read the colors from the array and draw the pixel
void iconBATTshow(int x, int y,int sensorval){
  int rfoo=0;
  int cfoo=0;
  int r,c;
  for (rfoo=0;rfoo<iconBATTh;)
  {
    for (cfoo=0;cfoo<iconBATTw;)
    {
     if (iconBATT[rfoo][cfoo]!=iconTRAN) {
       tft.drawPixel(x+cfoo,y+rfoo,iconBATT[rfoo][cfoo]);
     }
     cfoo++;
    }  
    rfoo++;
  }
  tft.setTextSize(0);
  tft.setCursor(x-15, y+3);
  tft.print(sensorval);
}
//
// PING sensor display - linedraw method
//
//void putPING(int x,int y, int sensorval) {
//  tft.setTextSize(0);
//  tft.setCursor(x+2, y+2);
//  tft.fillRect(x, y, 22, 12, iconFILL);
//  tft.drawRect(x, y, 22, 12, iconCOLR);
//  tft.print(sensorval);
//}
//
// PIR sensor display - LineDraw method
//
//void putPIR(int x,int y, int sensorval) {
//  int raysize=15;
//  tft.setTextSize(0);
//  tft.setCursor(x-4, y-13);
//  tft.fillTriangle(x, y, x-raysize , y-raysize ,x+raysize ,y-raysize, iconFILL);
//  tft.drawTriangle(x, y, x-raysize , y-raysize ,x+raysize ,y-raysize, iconCOLR);
//  tft.print(sensorval);
//}
//
// BMP - Barometer, Temp, Altimeter
//
void putBMPtemp(int x,int y,char myUnit) {
    tft.setTextColor(iconCOLR,iconFILL);
    tft.setTextSize(0);
    if (!bmp.begin()) {
	Serial.println("Could not find a valid BMP085 sensor, check wiring!");
	while (1) {}
    }
    float tc=bmp.readTemperature();
    float tf=tc*9/5+32;
    tft.fillRect(x, y, 50, 11, iconFILL);
    tft.drawRect(x, y, 50, 11, iconCOLR);
    tft.setCursor(x+3, y+2);
    if (myUnit=='F') {
      tft.print(tf);
      tft.println("F");    
    } else {
      tft.print(tc);
      tft.println("C");
    }
}
//
// Display Altimeter data
void putBMPalt(int x,int y,char myUnit) {
    tft.setTextColor(iconCOLR,iconFILL);
    tft.setTextSize(0);
    tft.setCursor(x, y);
    if (!bmp.begin()) {
	Serial.println("Could not find a valid BMP085 sensor, check wiring!");
	while (1) {}
    }
    float am=bmp.readAltitude();
    float af=am*3.280839895;
    float amr=bmp.readAltitude(101500);
    float afr=amr*3.280839895;
    tft.fillRect(x, y, 70, 11, iconFILL);
    tft.drawRect(x, y, 70, 11, iconCOLR);
    tft.setCursor(x+3, y+2);
    if (myUnit=='F') {
      tft.print(afr);
      tft.println("ft");
    } else {
      tft.print(amr);
      tft.println("m");
    }
}

void putACCEL(int x,int y) {
  tft.setTextColor(iconCOLR,iconFILL);
  tft.setTextSize(0);
  tft.setCursor(x, y);
  tft.fillRect(x, y, 35, 32, iconFILL);
  tft.drawRect(x, y, 35, 32, iconCOLR);
  tft.setCursor(x+3, y+2);
  tft.print("x:");
  tft.print(analogRead(xpin));
  tft.setCursor(x+3, y+12);
  tft.print("y:");
  tft.print(analogRead(ypin));
  tft.setCursor(x+3, y+22);
  tft.print("z:");
  tft.print(analogRead(zpin));
}




void putMAXsonar(int x,int y) {
    int sensoravg=6;
    int distsensor=0; // maxbotix sonar value initialize
    int i;
    for (i=0; i<sensoravg; i++) {
     distsensor += analogRead(maxSonarpin);
     // delay(50);
    }
  distsensor /= sensoravg;
  tft.setTextColor(iconCOLR,iconFILL);
  tft.setTextSize(0);
  tft.setCursor(x, y);
  tft.fillRect(x, y, 25, 12, iconFILL);
  tft.drawRect(x, y, 25, 12, iconCOLR);
  tft.setCursor(x+3, y+2);
  tft.print(distsensor);
  tft.print("cm");
}


void putBMPbar(int x,int y) {
    tft.setTextColor(iconCOLR,iconFILL);
    tft.setTextSize(0);
    tft.setCursor(x, y);
    if (!bmp.begin()) {
	Serial.println("Could not find a valid BMP085 sensor, check wiring!");
	while (1) {}
    }
    float pa=bmp.readPressure();
    tft.fillRect(x, y, 50, 11, iconFILL);
    tft.drawRect(x, y, 50, 11, iconCOLR);
    tft.setCursor(x+3, y+2);
      tft.print(pa,0);
      tft.println("pa");
}
//
//
//


//
// Show the RoboShow ver# and init the grid.
//
void initRoboShow(uint16_t color,float ver,int waitforsensors) {
  tft.fillScreen(BLACK);
  putGrid(SENSORGRID);
  tft.setCursor(23,3);
  tft.setTextColor(YELLOW);
  tft.print("RoboShow v"); 
  tft.print(RoboShowVer);
  if (waitforsensors>0) {
    tft.setCursor(3,100);
    tft.print("... initializing ...");
    tft.setCursor(3,110);
    tft.print(  "...    sensors   ...");
    tft.fillRect(35, 130, 60, 12, iconFILL);
    tft.drawRect(35, 130, 60, 12, iconCOLR);
    tft.setCursor(40,132);
    // insert a proper counter
    tft.print("cntr:");
    tft.print((waitforsensors/1000));
    tft.print("s");
    delay(waitforsensors*1000); 
    tft.fillScreen(BLACK);
    putGrid(SENSORGRID);
  }
  tft.setCursor(23,3);
  tft.setTextColor(YELLOW);
  tft.print("RoboShow v"); 
  tft.print(RoboShowVer);
}
//
// the grid for the background
//
void putGrid(int gridcolor) {
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawFastHLine(0, y, tft.width(), gridcolor);
  }
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawFastVLine(x, 0, tft.height(), gridcolor);
  }
}

Locked
Please be positive and constructive with your questions and comments.

Return to “Arduino”