Pages: 1 2 [3] 4 5   Go Down
Author Topic: [1er Projet] Horloge Pong modifié  (Read 7266 times)
0 Members and 1 Guest are viewing this topic.
France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-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" smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: November 02, 2011, 03:13:56 am by DizHell » Logged

France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous, et meilleurs Voeux.  smiley-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 :
http://code.google.com/p/ht1632c/
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à   smiley-evil
Logged

France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Code:
#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


}
« Last Edit: January 01, 2012, 02:38:58 pm by DizHell » Logged

France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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... smiley-draw
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 :
Code:
sensors.setWaitForConversion(false);
Pour ma gestion du delay minimum de 750ms j'ai utilisé les seconde de mon RTC avec le code :
 
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.  smiley-lol
Logged

France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :
http://emartee.com/product/42059/Arduino%20Tiny%20RTC%20DS1307%20Shield%20V2.0

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.
« Last Edit: January 27, 2012, 02:26:24 pm by DizHell » Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

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 smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
C'est ce que je vais tester aujourd'hui, tout marchait bien avant que je place le protoshield.

Tu est sur une mega ? Les broches I2C sur la mega sont 20 (SDA) et 21 (SCL) vérifie ton câblage smiley-wink
Oui c'est bien cablé voir image si dessous :

Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est ce que je vais tester aujourd'hui, tout marchait bien avant que je place le protoshield.
Haha... ta juste refait ton câblage sur la protoshield et ça marche plus ? Bizarre ...
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui excepté que j'ai changé la borche SS de l'affcheur Led de la PIN 53 à 11.
Afin d'éviter tout conflit avec le shield Ethernet.

Je viens de tester sans le shield Proto, en cablage direct, et ça ne fonctionnai toujours pas.
J'ai donc changer la PIN SS en 53 comme avant et recompilé, uploadé et sa remarche...  smiley-roll

Maintenant j'y pense, il y a aussi une autre modif que j'ai faite j'ai câblé la Matrice LED directement sur les PIN de ICSP excepté la PIN SS.
Mais je ne pense pas que mon problème viennent de là...

Je vais refaire la soudure des PIN de Shield RTC au cas ou il y est un faux contact.  smiley-draw

EDIT : Je viens de refaire mon ProtoShield en câblant le SS sur la broche 53.
J'ai re-soudé les PIN du module RTC.
Je remonte tout et sa fonctionne...
Donc let's go, c'etait surement un faux contact.
« Last Edit: January 28, 2012, 01:46:08 pm by DizHell » Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui excepté que j'ai changé la borche SS de l'affcheur Led de la PIN 53 à 11.
Afin d'éviter tout conflit avec le shield Ethernet.

Je viens de tester sans le shield Proto, en cablage direct, et ça ne fonctionnai toujours pas.
J'ai donc changer la PIN SS en 53 comme avant et recompilé, uploadé et sa remarche...  smiley-roll

Maintenant j'y pense, il y a aussi une autre modif que j'ai faite j'ai câblé la Matrice LED directement sur les PIN de ICSP excepté la PIN SS.
Mais je ne pense pas que mon problème viennent de là...

Je vais refaire la soudure des PIN de Shield RTC au cas ou il y est un faux contact.  smiley-draw
L'icsp c'est le port SPI, la pin 11 aussi (même sur un mega, l'ethernet shield "route" le port icsp sur les broches spi "classique")
Je pense que ton probléme vient de ton câblage sur la pin11, essaye d'utiliser un autre broche.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je pense aussi que mon problème venait aussi de l'alim. je viens de placer une alim 12V 3A directement sur l'arduino.

Mais depuis mon horloge affiche tout le temps 0:0:0 0/0/0... J'ai testé juste la démo du DS1307 mais j'obtiens toujours le 0:0:0...

Je pense que le fait que j’alimente directement en 12v l'arduino génère plus de parasite qui perturbe les fils de donnée de l'horloge. il faut que je re-cable l'horloge à l'opposé.

EDIT: Je viens de tester seulement mon module DS1307 sur une plaque d'essai et il fonctionne nickel. Conclusion j'ai un problème de câblage sur ma carte Proto.
Il me faut vérifier et/ou refaire mes soudures avant de continuer dans le projet.  smiley-small
« Last Edit: March 04, 2012, 03:13:43 pm by DizHell » Logged

Pages: 1 2 [3] 4 5   Go Up
Jump to: