Utilisation du Sablier

Forum de support du Sablier

Utilisation du Sablier

Message non lude aquabubulle » Mer 26 Fév 2014 10:37

Bonjour à tous,

Etant dans un groupe de projet pour le lycée, je fais partie de ceux qui se chargent de la programmation.
Afin d'avancer dans notre projet, nous avons acquis un Sablier et installé la bibliothèque proposée.

Néanmoins nous n'arrivons pas à les faire fonctionner! Ce sont nos premiers pas en programmation et l'utilisation de ce composant reste assez floue... Nous n'arrivons pas, par exemple, à mettre l'heure à jour!

Quelqu'un pourrait-t-il nous éclairer?
Merci beaucoup :D
aquabubulle
 
Messages: 3
Inscription: Mer 26 Fév 2014 10:30

Re: Utilisation du Sablier

Message non lude seb03000 » Mer 26 Fév 2014 16:12

Bonjour.

Avais vous bien télécharger les librairie donné l'aure de votre achat sur la boutique ici ----> http://snootlab.com/shields-snootlab/203-le-sablier-fr.html

Quelle est les erreurs qui sons apparu sur votre interface IDE de votre Arduino ???

Cependant moi , je n'est pas le sablier mais j'ai voulu compilé se code là:

Code: Tout sélectionner
#include "LeSablier.h"

#include <Wire.h>

#define LESABLIER_I2C_ADDRESS 104

#ifdef LESABLIER_DAY_NAMES
static const char* dayNames[7] = LESABLIER_DAY_NAMES;
#endif
#ifdef LESABLIER_MONTH_NAMES
static const char* monthNames[12] = LESABLIER_MONTH_NAMES;
#endif

LeSablier_ LeSablier;

void LeSablier_::begin() {
    update();
}

void LeSablier_::end() {
}

void LeSablier_::update() {
    _lastUpdate = millis();
    Wire.beginTransmission(LESABLIER_I2C_ADDRESS);
    Wire.write(0x00); // start at register 0
    Wire.endTransmission();
    Wire.requestFrom(LESABLIER_I2C_ADDRESS, 7); // request seven bytes
    if(Wire.available()) {
        _seconds = _bcd2dec(Wire.read());
        _minutes = _bcd2dec(Wire.read());
        _hours = _bcd2dec(Wire.read());
        _day = (Wire.read() & B00000111);
        _date = _bcd2dec(Wire.read());
        _month = _bcd2dec(Wire.read()); //msb7 is century overflow
        _year = _bcd2dec(Wire.read());
    }
}

void LeSablier_::fastUpdate() {
    if((millis() - _lastUpdate) > 100) {
        update();
    }
}

void LeSablier_::updateTemp() {
    //temp registers (11h-12h) get updated automatically every 64s
    Wire.beginTransmission(LESABLIER_I2C_ADDRESS);
    Wire.write(0x11);
    Wire.endTransmission();
    Wire.requestFrom(LESABLIER_I2C_ADDRESS, 2);
    if(Wire.available()) {
        uint8_t tMSB = Wire.read(); //2's complement int portion
        uint8_t tLSB = Wire.read(); //fraction portion
        _temp = (tMSB & B01111111); //do 2's math on Tmsb
        _temp += ( (tLSB >> 6) * 0.25 ); //only care about bits 7 & 8
    }
}

uint8_t LeSablier_::getYear() {
    fastUpdate();
    return _year;
}

uint8_t LeSablier_::getMonth() {
    fastUpdate();
    return _month;
}

uint8_t LeSablier_::getDay() {
    fastUpdate();
    return _day;
}

#ifdef LESABLIER_DAY_NAMES
const char* LeSablier_::getDayStr() {
    return dayNames[getDay()-1];
}
#endif

#ifdef LESABLIER_MONTH_NAMES
const char* LeSablier_::getMonthStr() {
    return monthNames[getMonth()-1];
}
#endif

uint8_t LeSablier_::getDate() {
    fastUpdate();
    return _date;
}

uint8_t LeSablier_::getHours() {
    fastUpdate();
    return _hours;
}

uint8_t LeSablier_::getMinutes() {
    fastUpdate();
    return _minutes;
}

uint8_t LeSablier_::getSeconds() {
    fastUpdate();
    return _seconds;
}

float LeSablier_::getTemp() {
    updateTemp();
    return _temp;
}


void LeSablier_::setYear(uint8_t year) {
    update();
    setAll(_day, _date, _month, year, _hours, _minutes, _seconds);
}

void LeSablier_::setMonth(uint8_t month) {
    update();
    setAll(_day, _date, month, _year, _hours, _minutes, _seconds);
}

void LeSablier_::setDay(uint8_t day) {
    update();
    setAll(day, _date, _month, _year, _hours, _minutes, _seconds);
}

void LeSablier_::setDate(uint8_t date) {
    update();
    setAll(_day, date, _month, _year, _hours, _minutes, _seconds);
}

void LeSablier_::setHours(uint8_t hours) {
    update();
    setAll(_day, _date, _month, _year, hours, _minutes, _seconds);
}

void LeSablier_::setMinutes(uint8_t minutes) {
    update();
    setAll(_day, _date, _month, _year, _hours, minutes, _seconds);
}

void LeSablier_::setSeconds(uint8_t seconds) {
    update();
    setAll(_day, _date, _month, _year, _hours, _minutes, seconds);
}

void LeSablier_::setAll(uint8_t day, uint8_t date, uint8_t month, uint8_t year, uint8_t hours, uint8_t minutes, uint8_t seconds) {
    Wire.beginTransmission(LESABLIER_I2C_ADDRESS);
    Wire.write(0x00);
    Wire.write(_dec2bcd(seconds));
    Wire.write(_dec2bcd(minutes));
    Wire.write(_dec2bcd(hours));
    Wire.write(_dec2bcd(day));
    Wire.write(_dec2bcd(date));
    Wire.write(_dec2bcd(month));
    Wire.write(_dec2bcd(year));
    Wire.endTransmission();
    _day = day;
    _date = date;
    _month = month;
    _year = year;
    _hours = hours;
    _minutes = minutes;
    _seconds = seconds;
}

uint8_t LeSablier_::_bcd2dec(uint8_t bcd) {
    return ((bcd & B11110000) >> 4)*10 + (bcd & B00001111);
}

uint8_t LeSablier_::_dec2bcd(uint8_t dec) {
    return ((dec/10) << 4) | (dec % 10);
}


Mais une erreur est apparu me disant ce si , ( 'class TwoWire' has no member named 'write' ).
Image

Voici mon chatterbot Jarvise Agent de conversation une IA
http://jarvise.atspace.cc/
Avatar de l’utilisateur
seb03000
 
Messages: 104
Inscription: Mer 17 Aoû 2011 15:03
Localisation: Auvergne

Re: Utilisation du Sablier

Message non lude aquabubulle » Ven 28 Fév 2014 09:35

Bonjour,

Le lien ne fonctionne pas, mais nous avons effectivement installé une librairie.
Il n'y a pas d'erreurs, pour l'instant nous n'avons essayé de faire fonctionner que les exemples de la librairie.
aquabubulle
 
Messages: 3
Inscription: Mer 26 Fév 2014 10:30

Re: Utilisation du Sablier

Message non lude Florian » Ven 28 Fév 2014 10:01

Bonjour,

Pour mettre l'heure à jour, il faut réaliser en premier lieu un "SetTime". Normalement, la librairie contient un sketch "SetTime". Sinon essayez celui-ci;
Code: Tout sélectionner
#include <Wire.h>
#include <LeSablier.h>

void setup()
{
    Wire.begin();
    Serial.begin(9600);
    LeSablier.begin();
}

//Format to set the date:  day   date    month   year    hours  minutes seconds
//Range:                  (1-7) (01-31) (01-12) (00-99) (00-24) (00-59) (00-59)
void loop()
{
    LeSablier.setAll(day, date, month, year, hours, minutes, seconds);
}


Avant d'uploader votre sketch pensez bien à rentrer le jour, la date et l'heure prévu dans la boucle "loop".
On doit donc avoir à la place de la ligne "LeSablier.setAll(day, date, month, year, hours, minutes, seconds);" ceci "LeSablier.setAll(5, 28, 02, 14, 09, 55, 30);". Cette exemple ne fonctionne qu'au moment où je suis en train d'écrire ces lignes. Il faut évidemment le mettre à jour au moment où l'on effectue le "SetTime".

Ensuite pour vérifier que le sablier est bien à l'heure, uploader le sketch "SerialClock" présent dans la librairie.
L'usage majeur du sablier est d'incorporer une horloge de précision dans son programme.
Florian
 
Messages: 75
Inscription: Mer 24 Juil 2013 17:36

Re: Utilisation du Sablier

Message non lude aquabubulle » Sam 8 Mar 2014 19:57

Bonjour,

J'ai bien essayé de faire comme vous l'avez dit, mais je n'arrive pas à faire fonctionner les codes de la librairie correctement.
Je réalise le SetTime puis lance le SerialClock, mais il affiche 0 au lieu des valeurs renseignées.

J'ai essayé votre code mais il y a une erreur de compilation...
aquabubulle
 
Messages: 3
Inscription: Mer 26 Fév 2014 10:30


Retourner vers Le Sablier

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron