bonjour à tous les membres .
voila le nouveau code qui incrémente mon angle dés le levée du soleil jusqu’au couché .
il ne reste plus qu'a trouver comment faire varier la droite drawline en fonction de l'angle et du temps .
si quelqu'un à une idée je suis preneur .
d'avance merci .
[code]
#include <Wire.h>
#include "RTClib.h" //
#include <LiquidCrystal_I2C.h>
#include <TimeLord.h> //
RTC_DS1307 RTC;
LiquidCrystal_I2C lcd(0x3F,20,4);
const int TIMEZONE = +1; // UTC france = +1hiver, +2 été
const float LATITUDE = 43.70, LONGITUDE = 7.25; // Nice = latidude = 43.7000000 longitude = 7.250000
int Sunrise, Sunset; //sunrise and sunset expressed as minute of day (0-1439)
TimeLord myLord; // TimeLord Object, Global variable
byte sunTime[] = {0, 0, 0, 1, 1, 13}; // 17 Oct 2013
int SunriseHour, SunriseMin, SunsetHour, SunsetMin; //Variables used to make a decent display of our sunset and sunrise time.
int TimeMins;
void setup() {
Wire.begin(); //start I2C interface
RTC.begin(); //start RTC interface
lcd.begin();//Start LCD (defined as 16 x 2 characters)
lcd.backlight();
//Checks to see if the RTC is runnning, and if not, sets the time to the time this sketch was compiled.
if (! RTC.isrunning()) {
RTC.adjust(DateTime(__DATE__, __TIME__));
}
//Timelord initialisation
myLord.TimeZone(TIMEZONE * 60);
myLord.Position(LATITUDE, LONGITUDE);
}
void loop() {
DateTime now = RTC.now(); //get time from RTC
sunTime[3] = now.day(); // Give Timelord the current date
sunTime[4] = now.month();
sunTime[5] = now.year();
myLord.SunRise(sunTime); // Computes Sun Rise.
Sunrise = sunTime[2] * 60 + sunTime[1]; // Sunrise returned in minutes past midnight
SunriseHour = sunTime[2];
SunriseMin = sunTime [1];
sunTime[3] = now.day(); // Uses the Time library to give Timelord the current date
sunTime[4] = now.month();
sunTime[5] = now.year();
myLord.SunSet(sunTime); // Computes Sun Set.
Sunset = sunTime[2] * 60 + sunTime[1]; // Sunset returned in minutes past midnight
SunsetHour = sunTime[2];
SunsetMin = sunTime [1];
uint16_t time = now.hour() * 60 + now.minute();
uint16_t angle = map(time, Sunrise, Sunset, 0, 180);// Sunrise et Sunset incrémente l'angle par Timelord
if(angle < 0)
angle = 0;
else if(angle > 180)
angle = 180;
//Display current time
lcd.setCursor (0,0);
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month());
lcd.print('/');
lcd.print(now.year(), DEC);
lcd.print(" ");
lcd.setCursor (12,0);
lcd.print(now.hour(), DEC);
lcd.print(':');
if (now.minute() <10)
{
lcd.print("0");
}
lcd.print(now.minute(), DEC);
lcd.print(':');
if (now.second() <10)
{
lcd.print("0");
}
lcd.print(now.second());
lcd.print(" ");
lcd.setCursor (0,1);
lcd.print ("Sun");
lcd.setCursor(4,1);
lcd.print("R");
lcd.setCursor(6,1);
lcd.print (SunriseHour);
lcd.print (":");
if (SunriseMin <10)
{
lcd.print("0");
}
lcd.print (SunriseMin);
lcd.setCursor (12,1);
lcd.print ("S");
lcd.setCursor(14,1);
lcd.print (SunsetHour);
lcd.print (":");
if (SunsetMin <10)
{
lcd.print("0");
}
lcd.print (SunsetMin);
lcd.setCursor(1,2);
lcd.print("angle: ");
lcd.print(angle);
// }
TimeMins = (now.hour() * 60) + now.minute();
if (TimeMins >= Sunrise && TimeMins <=Sunset-1) { //If it's after sunrise and before sunset, switch our relay on
lcd.backlight();// lcd rétroéclairage On
}
else { //otherwise switch it off
lcd.noBacklight();// lcd rétroéclairage Off
}
}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
j'utilise l'EEPROM car j'utilise plusieurs draw comme affichage secondaire
void draw2(void){//écran secondaire
DateTime now = RTC.now();
u8g.firstPage();
do {
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos(2,10);
u8g.print(" Draw2 ");
u8g.setPrintPos(55,10);
u8g.print(EEPROM.read(13));//angle
int x1=(64+(sin(EEPROM.read(13))*20));// j'avais mis cela met cela ne fonctionne pas
int y1=(40-(cos(EEPROM.read(13))*20));// j'avais mis cela met cela ne fonctionne pas
u8g.drawLine(20, 50, 110, 50);
u8g.drawLine(x1,y1,65,50);//x1=65,y1=10,x2=65,y2=50
u8g.drawCircle(65, 50, 35, U8G_DRAW_UPPER_RIGHT);
u8g.drawCircle(65, 50, 35, U8G_DRAW_UPPER_LEFT);
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos(5,60);
if(EEPROM.read(9)<10);
u8g.print("0");
u8g.print(EEPROM.read(9));
u8g.print (":");
if (EEPROM.read(10) <10)
u8g.print("0");
u8g.print (EEPROM.read(10));
u8g.setPrintPos(95,60);
if(EEPROM.read(11)<10)
u8g.print("0");
u8g.print (EEPROM.read(11));
u8g.print (":");
if (EEPROM.read(12) <10)
u8g.print("0");
u8g.print (EEPROM.read(12));
}
while (
u8g.nextPage() );
}
voila le code complet :
d'avance merci
[/code]