je branche un rtc déjà misà l'heure, j'ai supprimé les fonctions mise a l'heure lecture sérial
çà fonctionne , à l'heure chaque fois que je branche sur pile ou adapteur secteur 5volts
/
- DS1307 RTC j'ai supprimer la methode de mise a l'eure par le
port usb, le rtc doit etre mis à l'heure avant de brancher
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h" //pas besoin de changer pour ili9340
#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>
#define BLACK 0x0000 /* 0, 0, 0 */
#define NAVY 0x000F /* 0, 0, 128 */
#define DARKGREEN 0x03E0 /* 0, 128, 0 */
#define DARKCYAN 0x03EF /* 0, 128, 128 */
#define MAROON 0x7800 /* 128, 0, 0 */
#define PURPLE 0x780F /* 128, 0, 128 */
#define OLIVE 0x7BE0 /* 128, 128, 0 */
#define LIGHTGREY 0xC618 /* 192, 192, 192 */
#define DARKGREY 0x7BEF /* 128, 128, 128 */
#define BLUE 0x001F /* 0, 0, 255 */
#define GREEN 0x07E0 /* 0, 255, 0 */
#define CYAN 0x07FF /* 0, 255, 255 */
#define RED 0xF800 /* 255, 0, 0 */
#define MAGENTA 0xF81F /* 255, 0, 255 */
#define YELLOW 0xFFE0 /* 255, 255, 0 */
#define WHITE 0xFFFF /* 255, 255, 255 */
#define ORANGE 0xFD20 /* 255, 165, 0 */
#define GREENYELLOW 0xAFE5 /* 173, 255, 47 */
#define PINK 0xF81F
#define BACKGROUND BLACK
#define FACE YELLOW
#define HAND_S RED
#define HAND_M CYAN
#define HAND_H CYAN
#define NUMERIC_POINT WHITE
#define TFT_DC 9// pas defini dans le sketch original
#define TFT_CS 10 // idem
#define Xo 119
#define Yo 119
#define RADIUS 90
#define HELLO_X 2
#define HELLO_Y 250
#define TEXT_SIZE 2
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);//
void setup(){}
/** -------- Functions -------- **/
// Draw Clock Face
void drawFace()
{
int i=0, angle=0;
float x, y;
// Draw outer frame
tft.drawCircle(Xo, Yo, RADIUS+24, FACE);
tft.drawCircle(Xo, Yo, RADIUS+23, FACE);
// Draw inner frame
tft.drawCircle(Xo, Yo, RADIUS+12, FACE);
tft.drawCircle(Xo, Yo, RADIUS+11, FACE);
tft.drawCircle(Xo, Yo, RADIUS+10, FACE);
//Draw Numeric point
for (i=0;i<=12;i++) {
x=Xo+RADIUS*cos(angle*M_PI/180);
y=Yo+RADIUS*sin(angle*M_PI/180);
tft.drawCircle(x, y, 2, NUMERIC_POINT);
angle+=30;
}
for (i=0;i<360;i+=6){
tft.drawPixel(Xo+RADIUS*cos(i*M_PI/180), Yo+RADIUS*sin(i*M_PI/180), NUMERIC_POINT);
}
}
// Draw Second hand
void secondHand(int s, int color)
{
float angle = -90;
float Xa, Ya, Xb, Yb;
Xa=Xo+(RADIUS-15)*cos((angle+s*6)*M_PI/180);
Ya=Yo+(RADIUS-15)*sin((angle+s*6)*M_PI/180);
Xb=Xo+(15)*cos((180+angle+s*6)*M_PI/180);
Yb=Xo+(15)*sin((180+angle+s*6)*M_PI/180);
tft.drawLine(Xb, Yb, Xa, Ya, color);
tft.fillCircle(Xb, Yb, 2, color);
}
// Draw Minute hand
void minuteHand(int m, int s, int color)
{
float angle=-90;
float Xa, Ya;
Xa=Xo+(RADIUS-20)*cos((angle+m*6/*+(s*6/60)*/)*M_PI/180);
Ya=Yo+(RADIUS-20)*sin((angle+m*6/*+(s*6/60)*/)*M_PI/180);
tft.drawLine(Xo, Yo, Xa, Ya, color);
}
// Draw Hour hand
void hourHand(int h, int m, int s, int color)
{
float angle=-90;
float Xa, Ya;
Xa=Xo+(RADIUS-(RADIUS/2))*cos((angle+h*30+(m*30/60))*M_PI/180);
Ya=Yo+(RADIUS-(RADIUS/2))*sin((angle+h*30+(m*30/60))*M_PI/180);
tft.drawLine(Xo, Yo, Xa, Ya, color);
}
// Print Hour
void hour2word(int h)
{
switch (h)
{
case 0: tft.print(" minuit ");break;
case 1:
case 13:tft.print(" UNE ");break;
case 2:
case 14: tft.print(" DEUX ");break;
case 3:
case 15: tft.print(" TROIS ");break;
case 4:
case 16: tft.print(" QUATRE ");break;
case 5:
case 17: tft.print(" CINQ ");break;
case 6:
case 18: tft.print(" SIX ");break;
case 7:
case 19: tft.print(" SEPT ");break;
case 8:
case 20: tft.print(" HUIT ");break;
case 9:
case 21: tft.print(" NEUF ");break;
case 10:
case 22: tft.print(" DIX ");break;
case 11:
case 23: tft.print(" ONZE ");break;
case 12: tft.print(" ZERO ");break;
default: break;
}
}
// Print Minute
void minute2word(int m)
{
switch (m/5)// ecrire les chiffres en lettres ?
//voire chaque minute = 59 case/break
{
case 1: tft.print(" 5 minutes ");break;
case 2: tft.print(" 10 minutes ");break;
case 3: tft.print(" et quart ");break;
case 4: tft.print(" 20 minutes ");break;
case 5: tft.print(" 25 minutes ");break;
case 6: tft.print(" et demi ");break;
case 7: tft.print(" moins 25 ");break;
case 8: tft.print(" moins 20 ");break;
case 9: tft.print(" moins quart ");break;
case 10: tft.print(" moins 10 ");break;
case 11: tft.print(" moins 5 ");break;
}
}
// Print Time in words
void printWordClock(int m, int h, int color)
{
tft.setTextColor(color);
hour2word((m>32)? ((h+1==24)?0:h+1):h); // h+1 for minutes has pass 30
//if (m>57 || m<3) // minute from 58 to 02
//if (h!=12 && h!=0 && h!=23 && h!=11) // 12 = noon, 0 = midnight
tft.print("heures"); // il faudrait mettre au singulier pour
//zero et une heure, et supprimer le string heure quand écrit minuit
// ecrire les minutes au debut de la ligne en dessous de heures
// il est huit heures
// 10 minutes
minute2word(m+2);
}
// Print Hello
void sayHello(int m, int h, int color){
tft.setTextColor(color);
tft.setCursor(HELLO_X, HELLO_Y);
tft.print("BON");
if (h>4&&h<12) tft.print("JOUR, "); // 5AM to 11AM
if (h>11&&h<18) tft.print("JOUR, "); // 12PM to 5PM
if (h>17&&h<22) tft.print("SOIR, "); // 6PM to 9PM
if (h>21||h<5) tft.print("SOIR, "); // 9PM to 4AM
}
// Doing set-up
void startUp()
{
// for easy connect RTC to UNO* PAS UTILISE GND ET VOLTS DIRECT*
pinMode(A3,OUTPUT);
pinMode(A2,OUTPUT);
digitalWrite(A3,HIGH); // connect to VCC
digitalWrite(A2,LOW); // connect to GND
tft.begin();
tft.fillScreen(BACKGROUND);
tft.setTextSize(TEXT_SIZE);
drawFace();
}
void loop(void)
{
int h, m, s, prev_h, prev_m, prev_s;
startUp();
for ( ; ; )
{
setTime(RTC.get());// lit l'heure dans le rtc
s = second();
m = minute();
h = hour();
secondHand(prev_s, BACKGROUND); // clear old hand
hourHand(prev_h, prev_m, prev_s, BACKGROUND); // clear old hand
hourHand(h, m, s, HAND_H); // draw new hand
minuteHand(prev_m, prev_s, BACKGROUND ); // clear old hand
minuteHand(m, s, HAND_M); // draw new hand
secondHand(s, HAND_S); // draw new hand
tft.fillCircle(Xo, Yo, 4, FACE); // draw center dot
//clear old text or print the same old text with background color
if (m!=prev_m || h!=prev_h) //only if different in minute or hour
{
sayHello(prev_m, prev_h, BACKGROUND);
sayHello(m, h, GREEN);
tft.setTextColor(WHITE);
tft.setCursor(2, 267);
tft.print("il est ");
tft.setCursor(76, 267);
printWordClock(prev_m, prev_h, BACKGROUND);
tft.setCursor(76, 267);
printWordClock(m, h, WHITE);//heure moins minute
}
// get the old time before get update in next loop
prev_m=m; prev_s=s; prev_h=h;
delay(990);
}
}