[1er Projet] Horloge Pong modifié

Bonsoir à tous,

Petit retour sur l'état de mon projet, actuellement j'attend l'arrivé des différente pièces commandé sur Ebay. Donc pour patienté je réfléchie à comment mettre en place tout ça...

Je pense détaché les 2x Matrice 2416, une servira pour l'horloge + date avec une animation dans ce style :

L'autre sera utilisé pour les autres info, Animations, température, météo... dans ce style :

Source : Wise time with Arduino: June 2011 release of Wise Clock 3 software

Concernant l'interface ethernet je cherche comment récupérer les données météo, voir aussi l'heure pour le réglage automatique.
Plus-tard je voudrai accéder au réglage via une page Web compatible IOS donc iphone.

Mon projet pourrai évoluer directement sur le controle de mon aquarium (Temp, Commande Néon, Bulleur...).

Voilà j'ai du taff pour tout l'hiver... :slight_smile:

Salut,

J'avais un temps moi aussi expérimenté différentes choses avec ces matrices (un sablier). Le travail m'a été facilité à partir du moment ou j'ai trouvé ce post:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1225239439/0

Si tu ne le connaissais pas, regarde le bien, il y a plein de choses intéressantes.

Bonne chance dans ton projet.

olivbout:
Si tu ne le connaissais pas, regarde le bien, il y a plein de choses intéressantes.

Merci pour ce lien que je n'avai pas remarqué... En effet sa a l'air bien instructif. XD

Bonjour à tous,

Ce matin mon facteur viens de me livrer le colis de Sure Electronics, soit 2x Matrices LED 3216 RG.
Commandé le 12/10/11, Payé le jour meme,
Envoyé le 14/10/11,
Reçu le 22/10/11 colis remis contre-signature :smiley:

Voici quelques photos :

Bonjour à tous,

Un petit message pour vous annoncé que j'ai reçu toutes mes pièces. Le Méga, EthernetShield et le RTC son arrivé hier.

Premier test hier midi sous linux avec le logiciel arduino, j'ai galéré 1h avant de comprendre qu'il fallait des dossiers pour chaque librairies.
Ensuite le soir j'ai trouvé un code HT1632 pour testé la matrice. Apres avoir modifié les PIN utilisé vu que j'ai un Mega c'est 50,51,52,53... je lance et sa fonctionne.

Voilà je suis prêt à attaquer le projet.

Première étape réaliser le câblage de tout ce matériel, pour ensuite tout faire au propre sur la carte de prototypage.
J'ai comprit qu'une des matrice utilisera les PIN 50 à 53, il me faut trouver comment brancher la deuxième sachant que je veux que ce soit une matrice avec son propre affichage.

Bonjour à tous,

J'ai commencé mes essais. J'en suis à tester le module RTC et La matrice en même temps. Je maitrise le RTC mais pas la Matrice.

Actuellement j'ai un plond dans mon code. Lorsque je le lance pour la premiére fois il m'affiche la date et l'heure, mais dés qui passe la 2eme Loop j'ai 0 sur toute mes données qui s'affiche...

J'ai cherché mais sans trouver... Voici le code :

#include <WProgram.h>
#include <Wire.h>
#include <avr/pgmspace.h>
 
#include "HT1632cRG.h"
#include "font1.h"
#include <DS1307.h>

// Ya toute les fonctions de la matrice ici mais le code est encore trop lourd pour que je l’intègre entièrement sur ce post. 

int second, minute, hour, dayOfMonth, month, year; 
char STRING1[ ]="        ";
char STRING2[ ]="        ";
int x,i,j;

void setup()
{
  Serial.begin(9600);
  ht1632_initialize();
  
 
}
 
void loop ()
{
   second = RTC.get(DS1307_SEC,true);
   minute = RTC.get(DS1307_MIN,false);
   hour = RTC.get(DS1307_HR,false);
   dayOfMonth = RTC.get(DS1307_DATE,false);
   month = RTC.get(DS1307_MTH,false);
   year = RTC.get(DS1307_YR,false);
  
  
  sprintf(STRING1, "%02d/%02d/%02d", dayOfMonth, month, year);
  sprintf(STRING2, "%02d:%02d:%02d", hour, minute, second);
  Serial.print(STRING2);
  
  for(x=1;x<sizeof(STRING1);x++) {
    null_buffer();
    for(i=0;i<8;i++){
      for(j=0;j<8;j++){
        set_buffer(STRING1[x-1]);
        if (~buffer[i][j] & (1<<0)) {
          ht1632_plot(j+(8*(x-1))-1,i,RED);
        } else {
          ht1632_plot(j+(8*(x-1))-1,i,BLACK);
        }
      }
    }
  }
  
  for(x=1;x<sizeof(STRING2);x++) {
    null_buffer();
    for(i=0;i<8;i++){
      for(j=0;j<8;j++){
        set_buffer(STRING2[x-1]);
        if (~buffer[i][j] & (1<<0)) {
          ht1632_plot(j+(8*(x-1))-1,i+8,GREEN);
        } else {
          ht1632_plot(j+(8*(x-1))-1,i+8,BLACK);
        }
      }
    }
  }
  delay(200);
}

Si quelqu'un à une idée.

for(x=1;x<sizeof(STRING1);x++) {

heuu, sizeof ?? je pense que tu devrais plutot utiliser strlen()

vohu:
for(x=1;x<sizeof(STRING1);x++) {

heuu, sizeof ?? je pense que tu devrais plutot utiliser strlen()

Je dirai même :

 for(x = 1 ; x < strlen(STRING1) + 1 ; x++)

(vu qu'il commence à x=1)

Merci je viens de modifier cette partie du code. c'est vrai que cela est plus logique.

Pour info la grande partie du code viens du playground d'Arduino :
http://arduino.cc/playground/Main/HT1632C

J'ai modifié les partie faisant appel au module RTC pour utilisé une autre classe.
Ce qui est bizarre c'est que si je retire les 2 partie de code avec le Trace et que je met un Serial.print(second) tout ce passe correctement par-contre c'est dés qu'il rentre sur le deuxième "for" que sa me met tout à 0...

Je galère pour contrôler la matrice Led.
Je trouve différente version de la classe ht1632, mais elle sont tous plus tordu les une que les autres... Sans parler du fait que la plus part sont construite pour une matrice monoCouleur.

La je test la classe de la wise clock on verra se que sa donne. Je vous tient au jus. :wink:

Je galére avec la librairie ht1632, voici mon code de test qui n'allume pas une led de la matrice :

#include <HT1632.h>
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> // written by  mattt on the Arduino forum and modified by D. Sjunnesson

int second, minute, heure, jour, date, mois, annee;

void setup()
{
  Serial.begin(9600);
  ht1632_setup();
  
}

void loop()
{
  heure = RTC.get(DS1307_HR,true);
  minute = RTC.get(DS1307_MIN,false);
  second = RTC.get(DS1307_SEC,false);
  date = RTC.get(DS1307_DATE,false);
  mois = RTC.get(DS1307_MTH,false);
  annee = RTC.get(DS1307_YR,false);
  jour = RTC.get(DS1307_DOW,false);
  
  Serial.print(heure); 
  Serial.print(":");
  Serial.print(minute);
  Serial.print(":");
  Serial.print(second);
  Serial.print("      ");
  Serial.print(date);
  Serial.print("/");
  Serial.print(mois);
  Serial.print("/");
  Serial.print(annee); 
  Serial.print("   ");
  Serial.print(jour);
  Serial.println();
  //setBrightness(16);
  //ht1632_clear();
  ht1632_plot(1,1,2);
  delay(1000);
}

Y'a til quelqu'un qui pourrai m'expliquer le fonctionnement de cette librairie... SVP :roll_eyes:

DizHell:
Je galère pour contrôler la matrice Led.
Je trouve différente version de la classe ht1632, mais elle sont tous plus tordu les une que les autres... Sans parler du fait que la plus part sont construite pour une matrice monoCouleur.

Pourquoi toujours chercher quelque chose de tout prés :wink: "on n'est jamais mieux servit que par soi même"
Prend le datasheet du HT1632, quelque morceaux de code d'autres librairies (pour comprendre le fonctionnement) et lance toi dans une classe "maison" :wink:

Serte sa peut être une idée. Allez je vais tester de tout reprendre à Zéro.

Je viens de trouver un peu d'aide ici :
http://scuola.arduino.cc/en/content/controlling-sure-electronics-3216-led-matrix-arduino-uno

Bonjour à tous, et meilleurs Voeux. :wink:

Je viens faire le point sur l’évolution de mon projet. J'ai essayé plein de chose, utiliser l'arduino sou linux, windows, en version 022 et +, essayé de compiler avec un autre IDE (eclypse & co), testé d'adapté des projet déjà existant...

Au final après tout ce bazar, je code avec IDE arduino 022 sous windows, j'utilise la classe ht1632c suivante :

Pour la gestion de l'heure j'utilise la classe DS1307 suivante :
http://code.google.com/p/ds1307/

Sa fonctionne avec mes 2 écran en série, je vais commencer par faire un algo de fonctionnement histoire d’arrêter de partir dans tout les sens.

Voilà ]:slight_smile:

Je bloque sur une bêtise...

Actuellement mon programme fait les choses suivante :

Création des variables et objets
|setup(){
Initialisation de celles ci
|}loop(){
Récupération de l'heure et Température
|
Préparation de l'affichage via le buffer de la matrice
|
Affichage sur la matrice.
|}

Mon problème est que la sonde de température peux mètre plus d'1 seconde avant donner la valeur de la sonde du coup sa bloque le programme et l'affichage en même temps.
Je n'arrive pas à trouver l'astuce pour faire du multi tache... pour l'instant je fais du basique mais quand il me faudra affiché un Texte déroulant ou une image animé (météo de la pluie) sa me bloquera tout le reste...
HELP.

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>

#include <ht1632c.h>

// Pour la température
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 31

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

// -----------------------

// Déclaration des Objets
ht1632c ledMatrix = ht1632c(PORTB, 0, 2, 1, 3, GEOM_32x16, 2);
DS1307 RTC=DS1307();

const int bp2 = 2;     // the number of the pushbutton pin
const int bp0 = 0;
const int ledPin =  13;      // the number of the LED pin


int buttonState = 1;
int buttonState0 = 1;
int pwm=0;
int sec=0;
int secdiff=0;


void setup() {
  Serial.begin(9600);
  
  // Initialisation de la Temp.
  sensors.begin();


  // initialisation de l'affichage
  ledMatrix.clear();
  ledMatrix.pwm(5); // Valeurs de 0-15

    // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(bp2, INPUT); 
  digitalWrite(bp2, HIGH); // résistance de rappel
  pinMode(bp0, INPUT); 
  digitalWrite(bp0, HIGH); // résistance de rappel
  
}

void loop() {

  // Lecture de l'état du bouton:
  buttonState = digitalRead(bp2);
  buttonState0 = digitalRead(bp0);
  
  // Actualisation de la connexion a la sonde
  sensors.requestTemperatures();
  
  int temp = sensors.getTempCByIndex(0);
  //Serial.println(temp);


  if (!buttonState0){
    pwm++;
    //delay(1000);
    if(pwm>15){
      pwm=0;
    }
  }


  // Si le bouton est appuyé
  if (buttonState) {     
    // turn LED off:    
    digitalWrite(ledPin, LOW);
    secdiff = sec;


    int hours = RTC.get(DS1307_HR,true);
    int mins = RTC.get(DS1307_MIN,false);
    sec = RTC.get(DS1307_SEC,false); 
    

/*
     Fonction clignotement ne marche pas. sa va trop vite
     
     if(sec!=secdiff){
     ledMatrix.plot(15,1,0);
     ledMatrix.plot(15,2,0);
     ledMatrix.plot(16,1,0);
     ledMatrix.plot(16,2,0);
     
     ledMatrix.plot(15,4,0);
     ledMatrix.plot(15,5,0);
     ledMatrix.plot(16,4,0);
     ledMatrix.plot(16,5,0);
     }
     else{
     ledMatrix.plot(15,1,1);
     ledMatrix.plot(15,2,1);
     ledMatrix.plot(16,1,1);
     ledMatrix.plot(16,2,1);
     
     ledMatrix.plot(15,4,1);
     ledMatrix.plot(15,5,1);
     ledMatrix.plot(16,4,1);
     ledMatrix.plot(16,5,1);
     }
     */

    char buffer[3];

    itoa(hours,buffer,10);
    // fix - as otherwise if num has leading zero, e.g. "03" hours, itoa coverts this to chars with space "3 ". 
    if (hours < 10) {
      buffer[1] = buffer[0];
      buffer[0] = '0';
    }
    ledMatrix.putchar(3, 0, buffer[0], RED);
    ledMatrix.putchar(9, 0, buffer[1], RED);

    itoa(mins,buffer,10);
    // fix - as otherwise if num has leading zero, e.g. "03" hours, itoa coverts this to chars with space "3 ". 
    if (mins < 10) {
      buffer[1] = buffer[0];
      buffer[0] = '0';
    }
    ledMatrix.putchar(18, 0, buffer[0], RED);
    ledMatrix.putchar(24, 0, buffer[1], RED);

    ledMatrix.plot(15,1,1);
    ledMatrix.plot(15,2,1);
    ledMatrix.plot(16,1,1);
    ledMatrix.plot(16,2,1);

    ledMatrix.plot(15,4,1);
    ledMatrix.plot(15,5,1);
    ledMatrix.plot(16,4,1);
    ledMatrix.plot(16,5,1);


    itoa(sec,buffer,10);
    // fix - as otherwise if num has leading zero, e.g. "03" hours, itoa coverts this to chars with space "3 ". 
    if (sec < 10) {
      buffer[1] = buffer[0];
      buffer[0] = '0';
    }
    ledMatrix.putchar(34, 0, buffer[0], RED);
    ledMatrix.putchar(40, 0, buffer[1], RED);
    ledMatrix.putchar(47, 0, 's',1);
    ledMatrix.putchar(53, 0, 'e',1);
    ledMatrix.putchar(59, 0, 'c',1);

    // Affichage Température    
    itoa(temp,buffer,10);
    if (temp < 10) {
      buffer[1] = buffer[0];
      buffer[0] = '0';
    }
    ledMatrix.putchar(45, 8, buffer[0], 3);
    ledMatrix.putchar(51, 8, buffer[1], 3);
    ledMatrix.putchar(56, 8, 'C', 3);


  } 
  else {
    // turn LED on:
    digitalWrite(ledPin, HIGH);

    ledMatrix.plot(0,0,2);
    ledMatrix.plot(32,0,1);
    
  }


  ledMatrix.pwm(pwm);
  ledMatrix.sendframe(); // Actualisation de la matrice LED


}

^^ J'ai trouvé la solution, mais sa ne va pas me facilité la tache... ^^

Pour ma température qui me bloque tout en fait il y a un "delay" caché dans le code de l'objet, il est utilisé pour laisser le capteur prendre sont temps pour relever la température... :%
Mais un petit malin c'est dit qu'on pourrait laissé la main et géré nous meme dans le programme principal ce delay maxi de 750ms.
Du coup j'ai activer le mode a-synchrone avec la méthode :

sensors.setWaitForConversion(false);

Pour ma gestion du delay minimum de 750ms j'ai utilisé les seconde de mon RTC avec le code :

 sec = RTC.get(DS1307_SEC,false); 
  itoa(sec,buffer,10);
  if (sec < 10) {
    buffer[1] = buffer[0];
    buffer[0] = '0';
  }
  bool pulse = buffer[1] %2;

  if(pulse){   // Si les seconde sont PAIR
    // Actualisation de la connexion a la sonde
    sensors.requestTemperatures();
  }
  else{ // Sinon Récupération de la température
    temp = sensors.getTempCByIndex(0);
}

Enfin concernant mes probleme d'affichage (texte défilant & Co) j'ai décortiqué le code d'autre horloge :
PongClock : n'affiche jamais les seconde sauf avec l'appli Pong donc il n'est pas embété.
WiseClock : Ruse plutot bien vu qu'il affiche à chaque fois qu'il envoi des donné au buffer (sadowRam) de la matrice, deplus il utilise un systeme de variable pour signalé au différante fonction ce qu'il trace afin de faire du temps réel et affiché plusieurs info en meme temps.

Conclusion j'ai encore du Taff.....
Je finit en vous indiquant que je viens de découvrir la fonction millis(), moi qui me batai avec mes boutons depuis un moment. XD

Bonsoir à tous,

Je viens de faire un premier support en plexi voici les photos :

Concernant le programme j'y réfléchi mais pour l'instant je note des dessins de l'interface final afin de tout coder au propre et d'élaborer au mieux IHM.

Bonsoir à tous,

Mon projet avance voici les photos de la carte Proto :

Avec la carte Ethernet :

Depuis ces soudure j'ai un problème avec le module RTC qui me renvoi une valeur en 00/00/00 comme s'il n'était pas branché.
Je le connecte sur les Pin en haut à gauche de la première photo via une câble un rallonge (trouvé sur un PC) je pense que c'est le fait qu'il y est cette rallonge (15 cm) qui perturbe les données... Des fois elle fonctionne d'autre fois non, de-plus je la met souvent en défaut dés que je met le module ethernet.

Ou alors l'alim par usb du PC qui est trop faible... (0.5mA)
Je vais tester de relier l'arduino sur l'alim des matrice Led qui elles sont en 5v 4A.

DizHell:
Depuis ces soudure j'ai un problème avec le module RTC qui me renvoi une valeur en 00/00/00 comme s'il n'était pas branché.
Je le connecte sur les Pin en haut à gauche de la première photo via une câble un rallonge (trouvé sur un PC) je pense que c'est le fait qu'il y est cette rallonge (15 cm) qui perturbe les données... Des fois elle fonctionne d'autre fois non, de-plus je la met souvent en défaut dés que je met le module ethernet.

Ou alors l'alim par usb du PC qui est trop faible... (0.5mA)
Je vais tester de relier l'arduino sur l'alim des matrice Led qui elles sont en 5v 4A.

Problème d'alim ... humm possible mais peu probable, un probléme de câblage, trés probable !
Vérifie que tu n'as pas inversé A4 (SDA) et A5 (SCL), que les résistances de tirages au +5v sont bien présente sur A4 et A5, que le module RTC est correctement câble pour l'adresse voulu, et que la broche WP (write protect) n'est pas activé.
Sinon regarde aussi le cable il est peut être défectueux.

skywodd:
Vérifie que tu n'as pas inversé A4 (SDA) et A5 (SCL), que les résistances de tirages au +5v sont bien présente sur A4 et A5, que le module RTC est correctement câble pour l'adresse voulu, et que la broche WP (write protect) n'est pas activé.

C'est le module suivant :

J'ai vérifié le câblage, mes soudures, changer le câble/rallonge qui relie le module. cela n'a rien changé.
Concernant la résistance de tirages j'utilise les library OneWire et Wire, donc pas de réglage pour la résistance de tirage.
La broche WP n'est pas modifiable sur ce module enfin je pense.

Je vais tester avec une alim externe, pour voir.
EDIT : Je viens de testé avec l'alim externe le module ne fonctionne pas...
Je me demande si c'est pas dut au fait que j'utilise la broche 11 du Méga comme broche SS pour la Matrice LED. j'ai changé de brochage après mes soudures dans un souci de compatibilité avec le SS du module Ethernet.

DizHell:
J'ai vérifié le câblage, mes soudures, changer le câble/rallonge qui relie le module. cela n'a rien changé.
Concernant la résistance de tirages j'utilise les library OneWire et Wire, donc pas de réglage pour la résistance de tirage.
La broche WP n'est pas modifiable sur ce module enfin je pense.

Je viens de regarder le schéma de ton module (http://www.emartee.com/Attachment.php?name=42059.pdf)
Pas besoin de résistances de tirage finalement.
Tu devrais essayer de faire marcher chaque morceau pour valider leur bon fonctionnement, la partie DS1307, la partie DS... etc etc afin de voir si c'est un probléme purement software ou hardware.

DizHell:
Je vais tester avec une alim externe, pour voir.
EDIT : Je viens de testé avec l'alim externe le module ne fonctionne pas...
Je me demande si c'est pas dut au fait que j'utilise la broche 11 du Méga comme broche SS pour la Matrice LED. j'ai changé de brochage après mes soudures dans un souci de compatibilité avec le SS du module Ethernet.

Tu est sur une mega ? Les broches I2C sur la mega sont 20 (SDA) et 21 (SCL) vérifie ton câblage :wink: