[SOLVED] Can I map an analog input and then display on an ST7735 TFT display

I am aware my question is about sensors and displays but I have put it here as it is a programming question, I hope that is right.
I am trying to understand displaying an analog input signal on an ST7735 using the TFT library.
The programme I am trying to alter is the example from the library
TFTDisplayext.ino

/*
  Arduino TFT text example

  This example demonstrates how to draw text on the
  TFT with an Arduino. The Arduino reads the value
  of an analog sensor attached to pin A0, and writes
  the value to the LCD screen, updating every
  quarter second.

  This example code is in the public domain

  Created 15 April 2013 by Scott Fitzgerald

  http://www.arduino.cc/en/Tutorial/TFTDisplayText

 */

#include <TFT.h>  // Arduino LCD library
#include <SPI.h>

// pin definition for the Uno
#define cs   10
#define dc   9
#define rst  8

// pin definition for the Leonardo
// #define cs   7
// #define dc   0
// #define rst  1

// create an instance of the library
TFT TFTscreen = TFT(cs, dc, rst);

// char array to print to the screen
char sensorPrintout[4];

void setup() {

  // Put this line at the beginning of every sketch that uses the GLCD:
  TFTscreen.begin();

  // clear the screen with a black background
  TFTscreen.background(0, 0, 0);

  // write the static text to the screen
  // set the font color to white
  TFTscreen.stroke(255, 255, 255);
  // set the font size
  TFTscreen.setTextSize(2);
  // write the text to the top left corner of the screen
  TFTscreen.text("Sensor Value :\n ", 0, 0);
  // ste the font size very large for the loop
  TFTscreen.setTextSize(5);
}

void loop() {

  // Read the value of the sensor on A0
  String sensorVal = String(analogRead(A0));

  // convert the reading to a char array
  sensorVal.toCharArray(sensorPrintout, 4);

  // set the font color
  TFTscreen.stroke(255, 255, 255);
  // print the sensor value
  TFTscreen.text(sensorPrintout, 0, 20);
  // wait for a moment
  delay(250);
  // erase the text you just wrote
  TFTscreen.stroke(0, 0, 0);
  TFTscreen.text(sensorPrintout, 0, 20);
}

It turns the A0 input into a CharArray to print it on the screen but it is scaled 0 to 1023.
I would like to get it to scale to 0 to 254 but map doesn't work with charArray's.
If I read it as an int and 'map' it to 254 it shows all different characters on the screen as I move the pot and not the number I want.
Is it possible to somehow map this to 0 to 254 or write it a different way to the screen so I see 0 to 254 as I move the pot?

Something along the lines of:

// Read the value of the sensor on A0
int val = analogRead(A0);
val = map(val, 0, 1023, 0, 254);
String sensorVal = String(val);
2 Likes

Thank you van_der_decken that is exactly what I wanted.
Sorry for the delay in replying I wiped the wrong area to replace this with , messed everything up and had to start again.
Thank you so much it is not easy when you don't know.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.