course du soleil
MichelHohm
21 Messages
Le mercredi 6 novembre 2019 à 08:35:58
bonjour à tout les membres du forum
j'ai 59 Ans je suis à la retraite et j'aimerai faire sur un ecran st7920 la course du soleil.
sur un plan horizontal de 0° a gauche et 180 ° a droite
dans mon programme j'ai sunrise et sunset avec la library Timelord .
elle me donne chaque jour le levé et couché du soleil avec la longitude et latitude de nice ou j'habite .
j'utilise map pour calculer l'angle :
ci-joint code arduino ;
mon soucis c'est que l'angle n’évolue pas au cours de la journée .
calcSun () et bien dans le loop ()
si vous auriez une solution à mon probléme ça serait super .
je vous souhaite une bonne journée .
j'ai 59 Ans je suis à la retraite et j'aimerai faire sur un ecran st7920 la course du soleil.
sur un plan horizontal de 0° a gauche et 180 ° a droite
dans mon programme j'ai sunrise et sunset avec la library Timelord .
elle me donne chaque jour le levé et couché du soleil avec la longitude et latitude de nice ou j'habite .
j'utilise map pour calculer l'angle :
ci-joint code arduino ;
int CalcSun () {
//Calculates the Sunrise and Sunset times
DateTime now = RTC.now();
sunTime[3] = now.day();
// Give Timelordthe current date
sunTime[4] = now.month();
sunTime[5] = now.year();
uint16_t time = now.hour() * 60 +now.minute();
myLord.SunRise(sunTime);
// Computes SunRise.
uint16_t sunrise = sunTime[2] * 60 +sunTime[1];
// Sunrise returned in minutes past midnight
myLord.SunSet(sunTime);
// Computes SunSet.
uint16_t sunset = sunTime[2] * 60 +sunTime[1];
// Sunset returned in minutes past midnight
int16_t angle = map(time, sunrise, sunset,0, 180);
if(angle < 0) angle = 0;
else if(angle > 180) angle= 180;
}
mon soucis c'est que l'angle n’évolue pas au cours de la journée .
calcSun () et bien dans le loop ()
si vous auriez une solution à mon probléme ça serait super .
je vous souhaite une bonne journée .
https://github.com/
Le mercredi 6 novembre 2019 à 09:23:56
Salut et bienvenue. Je me suis permis de déplacer ton message dans le bon forum et j'ai mis en forme ton code Arduino pour qu'il soit lisible.
MichelHohm
21 Messages
Le mercredi 6 novembre 2019 à 09:27:58
BONJOUR MERCI INFINIMENT
https://github.com/
Le mercredi 6 novembre 2019 à 12:22:04
Par contre je ne comprends pas trop ton code. Pour commencer, ta fonction est censée retourner un integer et là elle ne retourne rien. Ça m'étonne d'ailleurs que ça compile.
Ensuite, tu utilises des variables qui ne sont déclarée null part. Sont-elles déclarées globalement ?
Normalement tu n'as pas besoin de faire le if/else à la fin de ton script, la fonction map() fait le job.
Ensuite, tu utilises des variables qui ne sont déclarée null part. Sont-elles déclarées globalement ?
Normalement tu n'as pas besoin de faire le if/else à la fin de ton script, la fonction map() fait le job.
MichelHohm
21 Messages
Le mercredi 6 novembre 2019 à 15:48:37
bonjour
retourner à angle c'est ce que vous voulez dire ?
ce n'es pas moi qui es fait ce code .
les variables sont déclarées globalement .
if /else avec ou sans cela ne change rien .
peut-être une idée pour m'aider svp merci.
retourner à angle c'est ce que vous voulez dire ?
ce n'es pas moi qui es fait ce code .
les variables sont déclarées globalement .
if /else avec ou sans cela ne change rien .
peut-être une idée pour m'aider svp merci.
https://github.com/
MichelHohm
21 Messages
Le mercredi 6 novembre 2019 à 18:00:30
rebonjour
pour bien comprendre j'ai refait un code simple juste avec le code et les éléments pour calculer l'angle .
je vous joint le code
merci pour votre aide et vous souhaite une bonne soirée .
pour bien comprendre j'ai refait un code simple juste avec le code et les éléments pour calculer l'angle .
je vous joint le code
merci pour votre aide et vous souhaite une bonne soirée .
#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
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];
/* Calcul de l'angle en fonction de levée et couché du soleil */
uint16_t time = now.hour() * 60 + now.minute();
uint16_t sunrise = sunTime[2] * 60 + sunTime[1];
uint16_t sunset = sunTime[2] * 60 + sunTime[1];
uint16_t angle = map(time, sunrise, sunset, 0, 180);
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);
/* Affichage de l'angle obtenu */
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
}
}
https://github.com/
Le mercredi 6 novembre 2019 à 21:03:14
Re, mets ton code entre balises [code=arduino]ton code ici[/code] stp, c'est un peu compliqué de le lire comme ça
MichelHohm
21 Messages
Le jeudi 7 novembre 2019 à 08:04:23
bonjour désolé je n'arrive pas à le faire
pas l'habitude
bonne journée
pas l'habitude
bonne journée
https://github.com/
Le jeudi 7 novembre 2019 à 09:48:33
Non, ne reposte pas ton code, édite ton message :
PS: je sais que c'est pas évident pour les novices, je travaille à rendre l'insertion de code plus user friendly
[code=arduino]
ton code ici
[/code]
PS: je sais que c'est pas évident pour les novices, je travaille à rendre l'insertion de code plus user friendly
Le vendredi 8 novembre 2019 à 17:11:18
Salut, je ne comprends pas comment ton code fait savoir l'heure qu'il est. Tu utilises un module externe ?
Quand tu print ta variable "time" elle évolue bien ?
Autre question annexe : est-ce que tu gagnerais pas en précision en exprimant "time", "sunset" et "sunrise" en secondes ?
PS: l'adresse mail de ton compte utilisateur ne semble pas valide
Quand tu print ta variable "time" elle évolue bien ?
Autre question annexe : est-ce que tu gagnerais pas en précision en exprimant "time", "sunset" et "sunrise" en secondes ?
PS: l'adresse mail de ton compte utilisateur ne semble pas valide
MichelHohm
21 Messages
Le vendredi 8 novembre 2019 à 18:02:34
BONSOIR ?
j'utilise un module rtc ds 1307
oui ma variable DateTime now =RTC.now me donne heures minutes secondes
pour ta question annexe je ne peux pas te répondre je ne sais pas .
merci d'avance .
j'utilise un module rtc ds 1307
oui ma variable DateTime now =RTC.now me donne heures minutes secondes
pour ta question annexe je ne peux pas te répondre je ne sais pas .
merci d'avance .
https://github.com/
Le mardi 12 novembre 2019 à 13:00:58
Ah mais c'est normal que tu ais toujours le même retour, il n'y a aucune différence entre sunset et sunrise :
Tu dois stocker les sunset et sunrise dans des variables différentes :
uint16_t sunrise = sunTime[2] * 60 + sunTime[1];
uint16_t sunset = sunTime[2] * 60 + sunTime[1];
Tu dois stocker les sunset et sunrise dans des variables différentes :
myLord.SunSet(sunSet); // Computes Sun Set.
myLord.SunRise(sunRise); // Computes Sun Rise.
uint16_t sunset = sunSet[2] * 60 + sunSet[1];
uint16_t sunrise = sunRise[2] * 60 + sunRise[1];
MichelHohm
21 Messages
Le jeudi 14 novembre 2019 à 10:50:05
Bonjour à tout les membres
merci pour le code .
maintenant comment je pourrais faire depuis l'angle pour faire bouger la droite drawline en fonction de l’angle je n'en es aucune idée .
j'ai trouvé cela sur internet mais je ne' y comprend rien .
https://busy.org/@pakganern/oled-display-gauge-meter-using-potentiometer-arduino .
peut - être en remplaçant le potentiomètre par l'angle incrémenter par sunrise sunset
d'avance merci .
merci pour le code .
maintenant comment je pourrais faire depuis l'angle pour faire bouger la droite drawline en fonction de l’angle je n'en es aucune idée .
j'ai trouvé cela sur internet mais je ne' y comprend rien .
https://busy.org/@pakganern/oled-display-gauge-meter-using-potentiometer-arduino .
peut - être en remplaçant le potentiomètre par l'angle incrémenter par sunrise sunset
d'avance merci .
https://github.com/
MichelHohm
21 Messages
Le dimanche 17 novembre 2019 à 17:28:56
bonsoir à tous les membres
j'ai trouvé ce code es-que je pourrais l'utiliser en le modifiant en remplaçant le potentiomètre p = A1 PAR ANGLE
d’avance merci
j'ai trouvé ce code es-que je pourrais l'utiliser en le modifiant en remplaçant le potentiomètre p = A1 PAR ANGLE
d’avance merci
#include "U8glib.h"
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
U8GLIB_ST7920_128X64 u8g(13, 11, 12, U8G_PIN_NONE);
int xmax=128;
int ymax=62;
int xcenter=xmax/2;
int ycenter=ymax/2+10;
int arc=ymax/2;
int angle=0;
int backlight = 6; //backlight control pin 6
char* label[] = {"LOAD","COOLANT","INTAKE", "VOLT", "TEMP"};
int labelXpos[] = {53, 45, 49, 53};
#define potmeterPin A1
int p, w, m,a=10;
u8g_uint_t xx=0;
void gauge(uint8_t angle) {
// draw border of the gauge
u8g.drawCircle(xcenter,ycenter,arc+6, U8G_DRAW_UPPER_RIGHT);
u8g.drawCircle(xcenter,ycenter,arc+4, U8G_DRAW_UPPER_RIGHT);
u8g.drawCircle(xcenter,ycenter,arc+6, U8G_DRAW_UPPER_LEFT);
u8g.drawCircle(xcenter,ycenter,arc+4, U8G_DRAW_UPPER_LEFT);
// draw the needle
float x1=sin(2*angle*2*3.14/360);
float y1=cos(2*angle*2*3.14/360);
u8g.drawLine(xcenter, ycenter, xcenter+arc*x1, ycenter-arc*y1);
u8g.drawDisc(xcenter, ycenter, 5, U8G_DRAW_UPPER_LEFT);
u8g.drawDisc(xcenter, ycenter, 5, U8G_DRAW_UPPER_RIGHT);
u8g.setFont(u8g_font_chikita);
// show scale labels
u8g.drawStr( 20, 42, "0");
u8g.drawStr( 25, 18, "25");
u8g.drawStr( 60, 14, "50");
u8g.drawStr( 95, 18, "75");
u8g.drawStr( 105, 42, "100");
// show gauge label
u8g.setPrintPos(labelXpos[0],32);
u8g.print(label[4]);
// show digital value and align its position
u8g.setFont(u8g_font_6x10);//(u8g_font_profont22);
u8g.setPrintPos(54,60);
if (w<10){
u8g.print("0");
}
if (w>99) {
u8g.setPrintPos(47,60);
}
u8g.print(w);
}
void setup(void) {
u8g.setFont(u8g_font_chikita);
u8g.setColorIndex(1);
analogWrite(backlight, 255);
// assign default color value
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
u8g.setColorIndex(255);
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
u8g.setColorIndex(3);
}
else if ( u8g.getMode() == U8G_MODE_BW ) {
u8g.setColorIndex(1);
}
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
u8g.setHiColorByRGB(255,255,255);
}
}
void loop(void) {
p = analogRead(A1);
w = map(p,0,1023,0,100);
m = map(p,0,1023,0,90);
// show needle and dial
xx = m;
if (xx<45){
xx=xx+135;
}
else {
xx=xx-45;
}
// picture loop
{
u8g.firstPage();
do {
gauge(xx);
}
while( u8g.nextPage() );
}
}
https://github.com/
Le lundi 18 novembre 2019 à 16:19:45
En principe j'ai envie de dire oui. T'as essayé ?