Hi
I have add some code to the sketch that uses a I2C temperature sensor to read the temperature.
The code as it it shows the temperature using the serial monitor.
How can I send the temperature reading to the matrix ?
//
// Display text on the matrix followed by the time and the cycle repeats.
//
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <Wire.h>
#include <Rtc_Pcf8563.h>
//init the real time clock
Rtc_Pcf8563 rtc;
// Define the number of devices we have in the chain and the hardware interface
// NOTE: These pin numbers will probably not work with your hardware and may
// need to be adapted
#define MAX_DEVICES 6
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
// set to 1 if we are implementing the user interface pot
#define USE_UI_CONTROL 0
#if USE_UI_CONTROL
#define SPEED_IN A0
#endif // USE_UI_CONTROL
#define PAUSE_TIME 1000
#define SPEED_DEADBAND 5
uint8_t frameDelay = 25; // default frame delay value
MD_Parola P = MD_Parola(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
#define SPEED_TIME 10
#define PAUSE_TIME 1000
// Global message buffers shared by Serial and Scrolling functions
#define BUF_SIZE 100
char curMessage[BUF_SIZE];
char newMessage[BUF_SIZE];
bool newMessageAvailable = false;
int tmpAddress = B1001000;
int ResolutionBits = 10;
void readSerial(void)
{
static uint8_t putIndex = 0;
while (Serial1.available())
{
newMessage[putIndex] = (char)Serial1.read();
if ((newMessage[putIndex] == '\n') || (putIndex >= BUF_SIZE-3)) // end of message character or full buffer
{
// put in a message separator and end the string
newMessage[putIndex++] = ' ';
newMessage[putIndex] = '\0';
// restart the index for next filling spree and flag we have a message waiting
putIndex = 0;
strcpy(curMessage, newMessage); // copy it in
}
else
// Just save the next char in next location
newMessage[putIndex++];
}
}
// Global variables
uint8_t curText;
char szTime[9];
char szDate[11];
char szYear[5];
char *pc[] =
{
"The Time",
"is",
szTime,
"The Date",
"is",
szDate,
szYear,
curMessage,
};
uint8_t inFX, outFX;
MD_Parola::textEffect_t effect[] =
{
// MD_Parola::PRINT,
MD_Parola::SCROLL_LEFT,
// MD_Parola::WIPE,
// MD_Parola::SCROLL_UP,
// MD_Parola::OPENING_CURSOR,
// MD_Parola::BLINDS,
// MD_Parola::CLOSING,
// MD_Parola::WIPE_CURSOR,
// MD_Parola::DISSOLVE,
// MD_Parola::OPENING,
// MD_Parola::CLOSING_CURSOR,
// MD_Parola::SCROLL_RIGHT,
// MD_Parola::SCROLL_DOWN,
// MD_Parola::SLICE,
};
float getTemperature(){
Wire.requestFrom(tmpAddress,2);
byte MSB = Wire.read();
byte LSB = Wire.read();
int TemperatureSum = ((MSB << 8) | LSB) >> 4;
float celsius = TemperatureSum*0.0625;
Serial.print("Celsius: ");
Serial.println(celsius);
}
void SetResolution(){
if (ResolutionBits < 9 || ResolutionBits > 12) exit;
Wire.beginTransmission(tmpAddress);
Wire.write(B00000001); //addresses the configuration register
Wire.write((ResolutionBits-9) << 5); //writes the resolution bits
Wire.endTransmission();
Wire.beginTransmission(tmpAddress); //resets to reading the temperature
Wire.write((byte)0x00);
Wire.endTransmission();
}
void setup(void)
{
Serial.begin(9600);
Serial1.begin(9600); //bluesmirf default baud rate=9600
SetResolution();
//clear out the registers
//rtc.initClock();
//set a time to start with.
//day, weekday, month, century(1=1900, 0=2000), year(0-99)
// uncomment to set
//rtc.setDate(2, 3, 1, 0, 14);
//hr, min, sec
//uncomment to set
//rtc.setTime(13, 35, 0);
P.begin();
P.setInvert(false);
P.displayText(pc[curText], MD_Parola::CENTER, SPEED_TIME, PAUSE_TIME, effect[inFX], effect[outFX]);
}
void loop(void)
{
getTemperature();
readSerial(); // read serial input
if (P.displayAnimate()) // animates and returns true when an animation is completed
{
strcpy(szTime, rtc.formatTime()); //gets the complete time and stores the complete time in format 23:30:54
strncpy(szDate, rtc.formatDate(RTCC_DATE_WORLD),5); //Gets the complete date in the format 15/12/2013 and stores only
//the day and date in the format 15/12
strncpy(szYear,&rtc.formatDate(RTCC_DATE_WORLD)[6],4); //Gets the complete date in the format 15/12/2013
//and stores only the year in the format 2014
// Set the display for the next string.
curText = (++curText) % ARRAY_SIZE(pc);
P.setTextBuffer(pc[curText]);
// When we have gone back to the first string, set a new exit effect
// and when we have done all those set a new entry effect.
if (curText == 0)
{
outFX = (++outFX) % ARRAY_SIZE(effect);
if (outFX == 0)
{
inFX = (++inFX) % ARRAY_SIZE(effect);
if (inFX == 0)
P.setInvert(false);
}
P.setTextEffect(effect[inFX], effect[outFX]);
}
// Tell Parola we have a new animation
P.displayReset();
}
}