LedControl.h 8x8 dot matrix

Can someone please help me out with how i can display a number from a temp sensor "offset to the right" on one of the display panels as i have a decimal interfering with one number.

I read the sensor and than send to the display with lc.displayChar(2,fones);
but it puts it to the far left or column.

What command do i need to move the number over to start on column 3?

Hi,
using the tags </> post your code so that we can understand your difficulty and thus be able to help you.
ArduinoForum


#include "DHT.h"

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);


#include "LedControlMS.h" //  need the library
 LedControl lc=LedControl(12,11,10,4); // lc is our object
 // pin 2 is connected to the MAX7219 pin 1
 // pin 1 is connected to the CLK pin 13
 // pin 0 is connected to LOAD pin 12
 // 1 as we are only using 1 MAX7219
 #include <OneWire.h>
// OneWire DS18S20, DS18B20, DS1822 Temperature Example
// http://www.pjrc.com/teensy/td_libs_OneWire.html
// The DallasTemperature library can do all this work for you!
// http://milesburton.com/Dallas_Temperature_Control_Library

OneWire  ds(6);  // on pin 10 (a 4.7K resistor is necessary)

int powerPin = 5;
int groundPin = 4;

int DHTpowerPin = 7;
int DHTgroundPin = 8;

 float sample;
 float tempC;
 float tempF;
 
 void setup()
 {
 pinMode(powerPin, OUTPUT);
 pinMode(groundPin, OUTPUT);
 digitalWrite(powerPin, HIGH);
 digitalWrite(groundPin, LOW);
  pinMode(DHTpowerPin, OUTPUT);
 pinMode(DHTgroundPin, OUTPUT);
 digitalWrite(DHTpowerPin, HIGH);
 digitalWrite(DHTgroundPin, LOW);

   lc.shutdown(0,false);// turn off power saving, enables display
   lc.shutdown(1,false);// turn off power saving, enables display
   lc.shutdown(2,false);// turn off power saving, enables display
   lc.shutdown(3,false);// turn off power saving, enables display
   
   lc.setIntensity(0,1);// sets brightness (0~15 possible values)
   lc.setIntensity(1,1);// sets brightness (0~15 possible values)
   lc.setIntensity(2,1);// sets brightness (0~15 possible values)
   lc.setIntensity(3,1);// sets brightness (0~15 possible values)

   lc.clearDisplay(0);// clear screen
   lc.clearDisplay(1);// clear screen
   lc.clearDisplay(2);// clear screen
   lc.clearDisplay(3);// clear screen

 Serial.begin(9600);
   dht.begin();

 
 } 
 void printNumberC(float num)
 {
   int ones;
   int tens;
   int hundreds;
   int v=(int)num;
   float diff=num-v;
   diff=diff*100;
   int fones,ftens;
   fones=(int)diff%10;
   diff=diff/10;
   ftens=(int)diff%10;
   diff=diff/10;
   ones=v%10;
   v=v/10;
   tens=v%10;
   v=v/10;
   hundreds=v;  
   

   //Now print the number digit by digit
 
   lc.displayChar(0,tens);
   lc.displayChar(1,ones);
   lc.displayChar(2,ftens);


 // prints degree C symbol.
 int r,c;
  lc.setLed(1,r=7,c=0,true); //Turn off for 1/4 sec
  lc.setLed(1,r=6,c=0,true); //Turn off for 1/4 sec  // decimal dot
  lc.setLed(1,r=6,c=1,true); //Turn off for 1/4 sec
  lc.setLed(1,r=7,c=1,true); //Turn off for 1/4 sec
  
  lc.setLed(3,r=2,c=7,true); //Turn off for 1/4 sec
  lc.setLed(3,r=2,c=6,true); //Turn off for 1/4 sec   // degree `C dot
  lc.setLed(3,r=1,c=7,true); //Turn off for 1/4 sec
  lc.setLed(3,r=1,c=6,true); //Turn off for 1/4 sec
 
 
  lc.setLed(3,r=4,c=5,true); //Turn off for 1/4 sec
  lc.setLed(3,r=4,c=4,true); //Turn off for 1/4 sec   // letter C vertical bar
  lc.setLed(3,r=4,c=6,true); //Turn off for 1/4 sec
  lc.setLed(3,r=4,c=7,true); //Turn off for 1/4 sec
  
  lc.setLed(3,r=5,c=7,true); //Turn off for 1/4 sec
  lc.setLed(3,r=6,c=7,true); //Turn off for 1/4 sec   // letter C top bar
  
  lc.setLed(3,r=5,c=4,true); //Turn off for 1/4 sec
  lc.setLed(3,r=6,c=4,true); //Turn off for 1/4 sec   // letter C lower bar.

 
 }
 void printNumberH(float num)
 {
   int ones;
   int tens;
   int hundreds;
   int v=(int)num;
   float diff=num-v;
   diff=diff*100;
   int fones,ftens;
   fones=(int)diff%10;
   diff=diff/10;
   ftens=(int)diff%10;
   diff=diff/10;
   ones=v%10;
   v=v/10;
   tens=v%10;
   v=v/10;
   hundreds=v;  

   //Now print the number digit by digit

   lc.displayChar(0,tens);
   lc.displayChar(1,ones);
   lc.displayChar(2,ftens);
  
int c,r;
  lc.setLed(1,r=7,c=0,true); //Turn off for 1/4 sec
  lc.setLed(1,r=6,c=0,true); //Turn off for 1/4 sec
  lc.setLed(1,r=6,c=1,true); //Turn off for 1/4 sec
  lc.setLed(1,r=7,c=1,true); //Turn off for 1/4 sec
 
  lc.setLed(3,r=1,c=5,true); //Turn off for 1/4 sec
  lc.setLed(3,r=1,c=6,true); //Turn off for 1/4 sec
  lc.setLed(3,r=2,c=5,true); //Turn off for 1/4 sec
  lc.setLed(3,r=2,c=6,true); //Turn off for 1/4 sec   // percent left dot
  
  lc.setLed(3,r=5,c=1,true); //Turn off for 1/4 sec
  lc.setLed(3,r=5,c=2,true); //Turn off for 1/4 sec
  lc.setLed(3,r=6,c=1,true); //Turn off for 1/4 sec
  lc.setLed(3,r=6,c=2,true); //Turn off for 1/4 sec   // percent right dot
  
  lc.setLed(3,r=1,c=1,true); //Turn off for 1/4 sec
  lc.setLed(3,r=2,c=2,true); //Turn off for 1/4 sec
  lc.setLed(3,r=3,c=3,true); //Turn off for 1/4 sec   
  lc.setLed(3,r=4,c=4,true); //Turn off for 1/4 sec
  lc.setLed(3,r=5,c=5,true); //Turn off for 1/4 sec   // percent diagonal bar
  lc.setLed(3,r=6,c=6,true); //Turn off for 1/4 sec

 
 }

 void loop(){

   byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
  
  ds.search(addr);
 
   delay(25);
   lc.clearDisplay(0);// clear screen
   lc.clearDisplay(1);// clear screen
   lc.clearDisplay(2);// clear screen
   lc.clearDisplay(3);// clear screen
  
  
  
  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();
 
  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      return;
  } 

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
  
  delay(75);     // maybe 750ms is enough for correct start up temp, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  Serial.print("  Data = ");
  Serial.print(present, HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();

  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  
  celsius = raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  celsius = celsius +1;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");

 // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity()+8;
  // Read temperature as Celsius
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);
  // Compute heat index
  // Must send in temp in Fahrenheit!   
  float hi = dht.computeHeatIndex(f, h);

  Serial.print("Humidity: "); 
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: "); 
  Serial.print(t);
  Serial.println(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hi);
  Serial.println(" *F");
  Serial.println(" ");
  Serial.println("--------------------------------------------------------------------------------------------------- ");


    // delay(2000);
   lc.clearDisplay(0);// clear screen
   lc.clearDisplay(1);// clear screen
   lc.clearDisplay(2);// clear screen
   lc.clearDisplay(3);// clear screen
   lc.clearDisplay(4);// clear screen
      
       printNumberC(celsius);
       delay(5000);
   lc.clearDisplay(0);// clear screen
   lc.clearDisplay(1);// clear screen
   lc.clearDisplay(2);// clear screen
   lc.clearDisplay(3);// clear screen
   lc.clearDisplay(4);// clear screen

       tempF=(h);
       printNumberH(tempF);
  
  // delay(2500);    
int c,r;
delay(2500);
lc.clearDisplay(3);// clear screen
lc.setColumn(3,c=7,B00111100);
lc.setColumn(3,c=6,B01000010); 
lc.setColumn(3,c=5,B00100101);
lc.setColumn(3,c=4,B00010001); 
lc.setColumn(3,c=3,B00001001);
lc.setColumn(3,c=2,B11111001); 
lc.setColumn(3,c=1,B01000010);
lc.setColumn(3,c=0,B00111100); 

delay(500);
lc.clearDisplay(3);// clear screen
lc.setColumn(3,c=7,B00111100);
lc.setColumn(3,c=6,B01000010); 
lc.setColumn(3,c=5,B10001001);
lc.setColumn(3,c=4,B10000001);   // CLOSED MOUTH PACMAN
lc.setColumn(3,c=3,B11110001);
lc.setColumn(3,c=2,B10000001); 
lc.setColumn(3,c=1,B01000010);
lc.setColumn(3,c=0,B00111100); 
   delay(500);    
 lc.clearDisplay(3);// clear screen
lc.setColumn(3,c=7,B00111100);
lc.setColumn(3,c=6,B01000010); 
lc.setColumn(3,c=5,B00100101);
lc.setColumn(3,c=4,B00010001); 
lc.setColumn(3,c=3,B00001001);
lc.setColumn(3,c=2,B11111001); 
lc.setColumn(3,c=1,B01000010);
lc.setColumn(3,c=0,B00111100); 

delay(250);
 lc.clearDisplay(3);// clear screen
lc.clearDisplay(2);
lc.setColumn(2,c=7,B00111100);
lc.setColumn(2,c=6,B01000010); 
lc.setColumn(2,c=5,B00100101);
lc.setColumn(2,c=4,B00010001); 
lc.setColumn(2,c=3,B00001001);
lc.setColumn(2,c=2,B11111001); 
lc.setColumn(2,c=1,B01000010);
lc.setColumn(2,c=0,B00111100); 

delay(250);
 lc.clearDisplay(2);// clear screen
lc.setColumn(2,c=7,B00111100);
lc.setColumn(2,c=6,B01000010); 
lc.setColumn(2,c=5,B10001001);
lc.setColumn(2,c=4,B10000001);   // CLOSED MOUTH PACMAN
lc.setColumn(2,c=3,B11110001);
lc.setColumn(2,c=2,B10000001); 
lc.setColumn(2,c=1,B01000010);
lc.setColumn(2,c=0,B00111100); 
delay(250);
lc.clearDisplay(2);
lc.setColumn(2,c=7,B00111100);
lc.setColumn(2,c=6,B01000010); 
lc.setColumn(2,c=5,B00100101);
lc.setColumn(2,c=4,B00010001); 
lc.setColumn(2,c=3,B00001001);
lc.setColumn(2,c=2,B11111001); 
lc.setColumn(2,c=1,B01000010);
lc.setColumn(2,c=0,B00111100); 

delay(250);
 lc.clearDisplay(2);// clear screen
lc.clearDisplay(1);
lc.setColumn(1,c=7,B00111100);
lc.setColumn(1,c=6,B01000010); 
lc.setColumn(1,c=5,B00100101);
lc.setColumn(1,c=4,B00010001); 
lc.setColumn(1,c=3,B00001001);
lc.setColumn(1,c=2,B11111001); 
lc.setColumn(1,c=1,B01000010);
lc.setColumn(1,c=0,B00111100); 

delay(250);
 lc.clearDisplay(1);// clear screen
lc.setColumn(1,c=7,B00111100);
lc.setColumn(1,c=6,B01000010); 
lc.setColumn(1,c=5,B10001001);
lc.setColumn(1,c=4,B10000001);   // CLOSED MOUTH PACMAN
lc.setColumn(1,c=3,B11110001);
lc.setColumn(1,c=2,B10000001); 
lc.setColumn(1,c=1,B01000010);
lc.setColumn(1,c=0,B00111100); 
delay(250);
 lc.clearDisplay(1);// clear screen
lc.clearDisplay(0);
lc.setColumn(0,c=7,B00111100);
lc.setColumn(0,c=6,B01000010); 
lc.setColumn(0,c=5,B00100101);
lc.setColumn(0,c=4,B00010001); 
lc.setColumn(0,c=3,B00001001);
lc.setColumn(0,c=2,B11111001); 
lc.setColumn(0,c=1,B01000010);
lc.setColumn(0,c=0,B00111100); 

delay(250);
lc.clearDisplay(0);// clear screen
lc.setColumn(0,c=7,B00111100);
lc.setColumn(0,c=6,B01000010); 
lc.setColumn(0,c=5,B10001001);
lc.setColumn(0,c=4,B10000001);   // CLOSED MOUTH PACMAN
lc.setColumn(0,c=3,B11110001);
lc.setColumn(0,c=2,B10000001); 
lc.setColumn(0,c=1,B01000010);
lc.setColumn(0,c=0,B00111100); 
delay(250);
lc.clearDisplay(0);// clear screen
lc.setColumn(0,c=7,B00111100);
lc.setColumn(0,c=6,B01000010); 
lc.setColumn(0,c=5,B00100101);
lc.setColumn(0,c=4,B00010001); 
lc.setColumn(0,c=3,B00001001);
lc.setColumn(0,c=2,B11111001); 
lc.setColumn(0,c=1,B01000010);
lc.setColumn(0,c=0,B00111100); 

delay(250);
lc.clearDisplay(0);// clear screen
lc.setColumn(0,c=7,B00111100);
lc.setColumn(0,c=6,B01000010); 
lc.setColumn(0,c=5,B10001001);
lc.setColumn(0,c=4,B10000001); 
lc.setColumn(0,c=3,B11110001);
lc.setColumn(0,c=2,B10000001); 
lc.setColumn(0,c=1,B01000010);
lc.setColumn(0,c=0,B00111100);     
delay(500);
//lc.clearDisplay(0);// clear screen
lc.setColumn(1,c=0,B10000000);     
delay(200);
lc.setColumn(1,c=0,B0100000);     
delay(300);
lc.setColumn(1,c=0,B00100000);     
delay(200);
lc.setColumn(1,c=0,B10100000);     
delay(200);
lc.setColumn(1,c=0,B01100000);     
delay(200);
lc.setColumn(1,c=0,B00100000);     
lc.setColumn(1,c=1,B00100000);     
delay(700);
lc.setColumn(1,c=0,B00100000);     
lc.setColumn(1,c=1,B00100000);     
lc.setColumn(1,c=0,B10100000);     
delay(200);
lc.setColumn(1,c=0,B00100000);     
lc.setColumn(1,c=1,B00100000);     
lc.setColumn(1,c=0,B01100000);     
delay(1500);


//lc.clearDisplay(0);// clear screen
lc.setColumn(0,c=7,B00111100);
lc.setColumn(0,c=6,B01000010); 
lc.setColumn(0,c=5,B10000001);
lc.setColumn(0,c=4,B10000001); 
lc.setColumn(0,c=3,B11110001);
lc.setColumn(0,c=2,B10000001); 
lc.setColumn(0,c=1,B01000010);
lc.setColumn(0,c=0,B00111100);     
delay(250);
lc.setColumn(0,c=7,B00111100);
lc.setColumn(0,c=6,B01000010); 
lc.setColumn(0,c=5,B10001001);
lc.setColumn(0,c=4,B10000001);  
lc.setColumn(0,c=3,B11110001);
lc.setColumn(0,c=2,B10000001); 
lc.setColumn(0,c=1,B01000010);
lc.setColumn(0,c=0,B00111100);     
delay(1000);
lc.clearDisplay(0);// clear screen

}

Hi,
Show pictures of how the display is looking.

You can see my decimal sits very close to the "ftens" number

Hi,
Your decimal point uses 4 points.
Reduce it to just one.
For this, comment out lines 84, 86 and 87.
and your code will look like this:

//  lc.setLed(1, r = 7, c = 0, true); //Turn off for 1/4 sec
  lc.setLed(1, r = 6, c = 0, true); //Turn off for 1/4 sec  // decimal dot
//  lc.setLed(1, r = 6, c = 1, true); //Turn off for 1/4 sec
//  lc.setLed(1, r = 7, c = 1, true); //Turn off for 1/4 sec

Ok so the number cant be moved i have to have have a tiny dot for a decimal point?

Hi,
Yes the number can be moved by changing the library, but moving it will move all numbers in all 8x8, and the library will no longer be the original one.

Here in this part there is the format of the numbers inside the library.


const static byte alphabetBitmap[41][6]={
	{0x7E,0x81,0x81,0x81,0x7E,0x0}, //0
	{0x4,0x82,0xFF,0x80,0x0,0x0},  //1
	{0xE2,0x91,0x91,0x91,0x8E,0x0},//2
	{0x42,0x89,0x89,0x89,0x76,0x0},//3
	{0x1F,0x10,0x10,0xFF,0x10,0x0},//4
	{0x8F,0x89,0x89,0x89,0x71,0x0},//5
	{0x7E,0x89,0x89,0x89,0x71,0x0},//6
	{0x1,0x1,0xF9,0x5,0x3,0x0},//7
	{0x76,0x89,0x89,0x89,0x76,0x0},//8
	{0x8E,0x91,0x91,0x91,0x7E,0x0},//9
	{0x0,0x0,0x0,0x0,0x0,0x0},// blank space
	{0x0,0x0,0x90,0x0,0x0,0x0}, //:
	{0x0,0x10,0x10,0x10,0x10,0x0},// -
	{0x0,0x0,0x80,0x0,0x0,0x0},// .
	{0xFC,0x9,0x11,0x21,0xFC,0x0},//Ñ
	{0xFE,0x11,0x11,0x11,0xFE,0x0},//A
	{0xFF,0x89,0x89,0x89,0x76,0x0},//B
	{0x7E,0x81,0x81,0x81,0x42,0x0},//C
	{0xFF,0x81,0x81,0x81,0x7E,0x0},//D
	{0xFF,0x89,0x89,0x89,0x81,0x0},//E
	{0xFF,0x9,0x9,0x9,0x1,0x0},//F
	{0x7E,0x81,0x81,0x91,0x72,0x0},//G
	{0xFF,0x8,0x8,0x8,0xFF,0x0},//H
	{0x0,0x81,0xFF,0x81,0x0,0x0},//I
	{0x60,0x80,0x80,0x80,0x7F,0x0},//J
	{0xFF,0x18,0x24,0x42,0x81,0x0},//K
	{0xFF,0x80,0x80,0x80,0x80,0x0},//L
	{0xFF,0x2,0x4,0x2,0xFF,0x0},//M
	{0xFF,0x2,0x4,0x8,0xFF,0x0},//N
	{0x7E,0x81,0x81,0x81,0x7E,0x0},//O
	{0xFF,0x11,0x11,0x11,0xE,0x0},//P
	{0x7E,0x81,0x81,0xA1,0x7E,0x80},//Q
	{0xFF,0x11,0x31,0x51,0x8E,0x0},//R
	{0x46,0x89,0x89,0x89,0x72,0x0},//S
	{0x1,0x1,0xFF,0x1,0x1,0x0},//T
	{0x7F,0x80,0x80,0x80,0x7F,0x0},//U
	{0x3F,0x40,0x80,0x40,0x3F,0x0},//V
	{0x7F,0x80,0x60,0x80,0x7F,0x0},//W
	{0xE3,0x14,0x8,0x14,0xE3,0x0},//X
	{0x3,0x4,0xF8,0x4,0x3,0x0},//Y
	{0xE1,0x91,0x89,0x85,0x83,0x0}//Z
};

Hi,
This modification I suggested only modifies the temperature decimal point, the humidity one is on lines 147, 149 and 150.
so these lines:

//  lc.setLed(1,r=7,c=0,true); //Turn off for 1/4 sec
  lc.setLed(1,r=6,c=0,true); //Turn off for 1/4 sec
//  lc.setLed(1,r=6,c=1,true); //Turn off for 1/4 sec
//  lc.setLed(1,r=7,c=1,true); //Turn off for 1/4 sec

oh.. ok i see now.
Thanks very much for your help.

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