PCF8583 avec arduino

Bonjours,
Je suis en terminale STI2D et nous devons lire l'heure et le jour avec une puce PCF8583.
Nous avons vue des programmes cependant ils ne marchent pas.
Si vous pouvez m'aider, merci d'avance.

Il faudrait que tu expliques ce qui ne marche pas et que tu donnes les codes que tu as testés. Sinon, c'est pas facile d'aider...

voici le code j’ai essayé:

#include <Wire.h> // necessary, or the application won't build properly
#include <stdio.h> 
#include <PCF8583.h> 
/*****************************************************************************
 *  read/write serial interface to PCF8583 RTC via I2C interface
 *
 *  Sanguino digital pin 16 - I2C SCL (PCF8583 pin 6)
 *  Sanguino digital pin 17 - I2C SDA (PCF8583 pin 5)
 *
 *  You can set the clock by sending the type in this format YYMMDDhhmmss;
 *  the semicolon on the end tells it you're done...
 *
 ******************************************************************************/

int correct_address = 0;
PCF8583 p (0xA2);  
void setup(void){
  Serial.begin(9600);
  Serial.print("booting...");
  Serial.println(" done");
}

void loop(void){
  if(Serial.available() > 0){
       p.year= (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48)) + 2000;
       p.month = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.day = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.hour  = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.minute = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       // Use of (byte) type casting and ascii math to achieve result.  
       p.second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48)); 

       if(Serial.read() == ';'){
         Serial.println("setting date");
   p.set_time();
       }
  }

  p.get_time();
  char time[20];
  sprintf(time, "%02d/%02d/%02d %02d:%02d:%02d",
    p.year, p.month, p.day, p.hour, p.minute, p.second);
  Serial.println(time);
  delay(990);
}

Lors de l’essaie de plusieurs programme de même type, aucun ne marché.

#include <Wire.h>

Ce include n’est pas reconnu alors que les autres si.

#include <stdio.h>

Cette bibliothèque est introuvable.

D’après mon professeur, le montage est correcte.

Salut

Wire.h est situé normalement dans ton répertoire arduino sous hardware/arduino/avr/libraries/Wire/src.
Qu'entends-tu par non reconnu ?
Poste les messages d'erreur.

A première vue stdio.h est inutile dans ton code.

@+

bonjour,

Ce que je veux dire par là: c’est que le " #include" ne devient pas vert tandis que les autres si.
voici le message d’erreur:

#include expects "FILENAME" or <FILENAME>

Tu es sûr d’avoir exactement écrit :

#include <Wire.h>

Poste la ligne en question.

oui j’ai bien écrit

#include <Wire.h>

et c’est cette ligne là qui ne fonctionne pas

C'est pourtant Ok pour moi.
Cette ligne collée dans un sketch tout neuf chez moi compile sans problème.
Tu as peut être un caractère bizarre et invisible quelque part.
Efface la ligne, élimine les lignes vide avant et après et réécris la.

@+

Je suis désolé mais même en réessayant il y a une erreur de compilation.

#include <Wire.h>

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

Et avec un truc tout simple comme ça ?

Quand il est seul, ça marche.

Poste ton code complet.

Le voici:

#include <Wire.h> // necessary, or the application won't build properly
#include <stdio.h> 
#include <PCF8583.h> 
/*****************************************************************************
 *  read/write serial interface to PCF8583 RTC via I2C interface
 *
 *  Sanguino digital pin 16 - I2C SCL (PCF8583 pin 6)
 *  Sanguino digital pin 17 - I2C SDA (PCF8583 pin 5)
 *
 *  You can set the clock by sending the type in this format YYMMDDhhmmss;
 *  the semicolon on the end tells it you're done...
 *
 ******************************************************************************/

int correct_address = 0;
PCF8583 p (0xA2);  
void setup(void){
  Serial.begin(9600);
  Serial.print("booting...");
  Serial.println(" done");
}

void loop(void){
  if(Serial.available() > 0){
       p.year= (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48)) + 2000;
       p.month = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.day = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.hour  = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.minute = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       // Use of (byte) type casting and ascii math to achieve result.  
       p.second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48)); 

       if(Serial.read() == ';'){
         Serial.println("setting date");
   p.set_time();
       }
  }

  p.get_time();
  char time[20];
  sprintf(time, "%02d/%02d/%02d %02d:%02d:%02d",
    p.year, p.month, p.day, p.hour, p.minute, p.second);
  Serial.println(time);
  delay(990);
}

S'agit-il de cette librairie :

Question :
L'espace après le p dans PCF8553 p (0xA2)
est-il gênant ?
N'est-il pas pris pour une fin d'instruction ?

68tjs:
Question :
L'espace après le p dans PCF8553 p (0xA2)
est-il gênant ?
N'est-il pas pris pour une fin d'instruction ?

Non, pas gênant.

No comprendo. Chez moi ça se compile parfaitement.

@+

Pour débuguer on part du plus simple et on ajoute des choses jusqu'à avoir une erreur : là, on sait ce qui l'a provoquée. Commence par un code avec juste les déclarations (que tu écris toi même, avec tes petites mains et ton clavier, au lieu de les copier coller de quelque part) et un setup et une loop vides.
Si ça marche, tu ajoutes (copie colle cette fois) les instructions du setup. Si ça marche, tu ajoutes celles de la loop. Si ça marche, va bene.
Sinon, il faut revenir à l'étape précédente et aller crescendo avec es instructions de la loop. Mais vu le problème, je pense que ça ira au bout de la 3ème étape...