probleme branchement avec lcd keypad shield + DS1307+emetteur 433mhz

bonjour,
sur un arduino uno, je branche un emetteur 433 sur 5v, gnd et le data sur la pin 10
jusque là tout va bien, j'ai un programme qui envoie des nombres, ca marche
je rajoute un shield lcd keypad sur lequel est déjà branché un RTC DS1307 sur 5v, gnd et a4 a5,
et là ca ne marche plus
le background du LCD clignote, et l'emetteur n'emet plus...
je ne comprend pas, on dit qu'il ne faut rien mettre sur la pin 10 avec le lcd keypad, mon emetteur est sur la 12 !...
NB le shield lcd keypad + le DS1307 seuls montés sur la UNO marche
l'emetteur chinois 433mhz seul marche
les 2 (enfin les 3) ensemble marchent avec un programme qui n'envoie pas de données en 433mhz
mais quand je televerse mon petit bout de programme qui emet, c'est l'ecran du shield qui clignote et rien ne part...
mon programme c'est ca :

/******************************************************
 * Envoi de nombres croissants par l'entremise de VirtualWire
 * Sketch de l'émetteur (branché à la pin 12, par défaut).
 * http://electroniqueamateur.blogspot.com/2014/01/modules-rf-433-mhz-virtualwire-et.html
 ******************************************************/

#include <VirtualWire.h>

int Nombre = 0;

char Message[VW_MAX_MESSAGE_LEN]; 

void setup() {
   vw_setup(1000);   // Bits par seconde  pour ameliorer les resultats
  // vw_setup(2000);   // Bits par seconde   
}

void loop() {

  Nombre++;

  // Conversion du int en tableau de chars 
  itoa(Nombre,Message,10);  // 10 car décimal

  vw_send((uint8_t *)Message, strlen(Message));
  vw_wait_tx(); // On attend la fin de la transmission
  delay(200);  // et on se repose un peu...

}

Je suis perdu
merci de votre aide

hello
nous aussi, nous sommes perdus sans le prg complet

il serait intéressant de voir quelles pinoches sont déclarées pour chacun de tes périphériques

bonsoir,
vous avez le programme complet (c'est juste l'envoi de données qui est au dessus)
en fait je veux faire un programme qui va utiliser le lcdkeypad + la ds1307+1emetteur433 et il y aura aussi un recepteur 433 que je n'ai pas encore branché.
comme je l'ai écrit plus haut, j'ai déjà un programme qui utilise le lcd et la rtc,
mais avant de modifier mon programme pour envoyer des données (l'heure entre autre) j'ai voulu d'abord vérifier que l'émetteur était compatible avec mon shield.
je branche mon emetteur et mon programme que affiche l'heure fonctionne toujours ( mais il ne demande pas d'émettre... je constate donc que le branchement ne perturbe pas mon lcd.
pour verifier si le lcd perturbe l'emetteur, j'enlève mon prog et je téléverse le prog ci dessus, et c'est là que ca clignote mais n'émet pas...

mon shield c'est celui là
http://www.ebay.fr/itm/Keypad-Shield-LCD1602-pr-Arduino-Duemilanove-UNO-MEGA2560-MEGA1280-HG-/191941215522?hash=item2cb0968522:g:eOQAAOSwvg9XXgbY
mon emetteur
http://www.ebay.fr/itm/Kit-emetteur-recepteur-433-Mhz-pour-arduino-ou-raspberry-pi-/161236891222?hash=item258a77b656:g:91QAAOxy4t1SkQeb

sur un arduino uno, je branche un emetteur 433 sur 5v, gnd et le data sur la pin 10

oups j'ai écrit une grosse bétise, le data de mon emetteur est sur la pin 12 et (surtout)pas sur la 10

j'ai modifié mon programme en incluant les librairies
<Wire.h> // Required by RTClib
<LiquidCrystal.h> // Required by LCDKeypad
<LCDKeypad.h>
"RTClib.h"
car je me suis dit que les declarations de pins étaient dedans, mais ca ne change rien
je récapitule les pins :
les +5v et le gnd de l'émetteur et de la rtc sont branchés ensemble sur le 5v et le gnd de l'arduino
le data de l'emetteur sur la pin 12
le tx et rx de la rtc sur A4 et A5
le shield est branché sur ses connecteurs, mais en principe l'ordre est :
Pin Connections

Pin Function
Analog 0 Buttons (select, up, right, down and left)
Digital 4 DB4
Digital 5 DB5
Digital 6 DB6
Digital 7 DB7
Digital 8 RS (Data or Signal Display Selection)
Digital 9 Enable

Note: Do not use pin Digital 10 when this board is plugged in

et mon code est :

/******************************************************
 * Envoi de nombres croissants par l'entremise de VirtualWire
 * Sketch de l'émetteur (branché à la pin 12, par défaut).
 * http://electroniqueamateur.blogspot.com/2014/01/modules-rf-433-mhz-virtualwire-et.html
 ******************************************************/

#include <VirtualWire.h>
#include <Wire.h>  // Required by RTClib
#include <LiquidCrystal.h>  // Required by LCDKeypad
#include <LCDKeypad.h>
#include "RTClib.h"
int Nombre = 0;

char Message[VW_MAX_MESSAGE_LEN]; 

void setup() {
   vw_setup(1000);   // Bits par seconde  pour ameliorer les resultats
  // vw_setup(2000);   // Bits par seconde   
}

void loop() {

  Nombre++;

  // Conversion du int en tableau de chars 
  itoa(Nombre,Message,10);  // 10 car décimal

  vw_send((uint8_t *)Message, strlen(Message));
  vw_wait_tx(); // On attend la fin de la transmission
  delay(200);  // et on se repose un peu...

}

Bonjour,

Comment tu sais que ça n'émet pas?
Comment est connécté le récepteur?

hello Kamill,
le recepteur est sur une autre carte, branché sur mon ordi et je lis les réceptions sur le port serie.
De ce coté là aucun problème puisque entre 2 essais je ne change strictement rien.

Coté arduino emetteur, avec le programme téléversé (celui qui est plus haut) j'enlève le shield, je branche l'alim et ca envoie la serie de nombres successif.
j'arrête, je remet le shield et le lcd clignote mais rien n'est transmis...
je me demandais si le fait d'alimenter par le 5 volts de la UNO le shield + le DS1307 + l'émetteur c'était pas trop ? sinon je ne comprends rien, mais comme tu le sais je suis "débutant grave ;o))

je viens de faire une petite verif en changeant le delay, je constate que le lcd clignote à la fréquence du loop

luckymaxou:
je me demandais si le fait d'alimenter par le 5 volts de la UNO le shield + le DS1307 + l'émetteur c'était pas trop ?

Si tu as un doute, le plus simple c'est d'essayer d'alimenter l'émetteur avec une alimentation externe.

Je vois que certaines versions de virtualwire utilisent la pin 10 pour enable

vw_set_ptt_pin(transmit_en_pin)
Configure the transmit enable pin, or "push to talk". Default is pin 10.

C'est peut être ça qui fait clignoter ton LCD

merci à vous 2 pour vos réponses

  • fdufnews effectivement j'ai branché l'emetteur sur une alim externe et maintenant il fonctionne j'ai bien mon emission qui se fait !
    Ca fait la moitié de mon problème qui est résolu...
    mais le clignotement du lcd continue à la fréquence du loop...
  • Kamill tu as peut-être raison mais comment je fais pour le résoudre ? (pour info mon emetteur est sur la 12, pas sur la 10 contrairement à ce que j'avais écrit dans mon premier post)
    merci encore

Essaies de mettre vw_set_ptt_pin(13); dans le setup

merci Kamill
oui tu as raison, sur mon programme d'émission si je rajoute ta ligne dans le setup ca marche... donc tout marche,
par contre avec ce montage je veux faire un mix entre 2 programmes
le programme que je vais mettre en final c'est celui ci
(juste un extrait car trop long pour etre posté)

/**
 
#include <Wire.h>  // Required by RTClib
#include <LiquidCrystal.h>  // Required by LCDKeypad
#include <LCDKeypad.h>
#include "RTClib.h"

#define TIME_OUT 5  // One of the system's FSM transitions
#define ALARM_TIME_MET 6  // One of the system's FSM transitions

#define BUZZER_PIN 3  // Output PWM pin for the buzzer
#define SNOOZE 10  // Minutes to snooze (sommeiller, attendre...)

// The different states of the system
enum states
{
   ...  
};

// Crée une instance LCDKeypad
// Il gère l'écran LCD et les boutons sur le Shield
LCDKeypad lcd;

// Crée une instance RTC_DS1307
// Il gère le Real-Time Clock DS1307
RTC_DS1307 RTC;

states state;   // Contient l'état actuel du système
int8_t button;  // Contient le bouton actuel enfoncé
uint8_t alarmHours = 0, alarmMinutes = 0;  // Contient l'heure d'alarme actuelle
uint8_t heureMontee = 0, heureDescente = 0;  // Contient l'heure d'ouverture & fermeture actuelle
uint8_t tmpHeuresMontee;
uint8_t tmpMinutesMontee;
boolean alarm = false;  // Contient l'état actuel de l'alarme
unsigned long timeRef;
DateTime now;  // Contient les informations sur la date et l'heure actuelle

void setup()
{
 // vw_set_ptt_pin(13);
    pinMode(BUZZER_PIN, OUTPUT);  // Buzzer pin

    // Initialise les instances du LCD et de la RTC
    lcd.begin(16, 2);
    Wire.begin();
    RTC.begin();
   
    state = SHOW_TIME;  // état initial du FSM (traduction : machine à états)
 }

// A le controle principal du FSM (taux de rafraichissement de 1Hz)
void loop()
{
    timeRef = millis();

    // Uses the current state to decide what to process
    switch (state)
    {
        ...
    }

      while ( (unsigned long)(millis() - timeRef) < 970 )
    {
        if ( (button = lcd.button()) != KEYPAD_NONE )
        {
            while ( lcd.button() != KEYPAD_NONE ) ;
            transition(button);
            break;
        }
    }
}

// Observe le declencheur fourni (evenement) et effectue la transition d'etat appropriee
// If necessary, sets secondary variables
void transition(uint8_t declencheur)
{
    switch (state)
    {
       ...
    }
}

// Displays the current date and time, and also an alarm indication
// e.g. SAT 04 JAN 2014, 22:59:10  ALARM
void showTime()
{
    now = RTC.now();
    const char* dayName[] = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };
    const char* monthName[] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" };
    
    lcd.clear();
    lcd.print(String(dayName[now.dayOfTheWeek()]) + " " +
              (now.day() < 10 ? "0" : "") + now.day() + " " +
              monthName[now.month()-1] + " " + now.year());
    lcd.setCursor(0,1);
    lcd.print((now.hour() < 10 ? "0" : "") + String(now.hour()) + ":" +
              (now.minute() < 10 ? "0" : "") + now.minute() + ":" +
              (now.second() < 10 ? "0" : "") + now.second() + (alarm ? "  ALARM" : ""));
}

// Affiche l'heure de l'alarme actuelle et revient en arriere (transition d'etat) pour afficher la
// date et heure apres 2 sec (+ 1 sec de retard a l'interieur de la fonction de boucle)
// par exemple. Heure de l'alarme HEURE: 08 MIN: 20
void showAlarmTime()
{
    lcd.clear();
    lcd.print("Alarm Time");
    lcd.setCursor(0,1);
    lcd.print(String("HOUR: ") + ( alarmHours < 9 ? "0" : "" ) + alarmHours + 
                   " MIN: " + ( alarmMinutes < 9 ? "0" : "" ) + alarmMinutes);
    delay(2000);
    transition(TIME_OUT);
}

// Verifie si l'heure de l'alarme a ete atteinte,
// et si oui initie une transition d'etat
void checkAlarmTime()
{
    if ( now.hour() == alarmHours && now.minute() == alarmMinutes ) transition(ALARM_TIME_MET);
}

// Lorsque le buzzer sonne, en appuyant sur les boutons UP ou DOWN,
// un SNOOZE (la valeur par defaut est 10) retarde l'heure de l'alarme
void snooze()
{
    alarmMinutes += SNOOZE;
    if ( alarmMinutes > 59 )
    {
        alarmHours += alarmMinutes / 60;
        alarmMinutes = alarmMinutes % 60;
    }
}

// La premiere partie du processus en 2 parties qui sert a regler l'heure de l'alarme
// Recoit l'heure de l'alarme. Si non fourni dans les 5 secondes,
// expire et retourne a un etat precedent (heure et date)

  void setAlarmHours()

  {
    unsigned long timeRef;
    boolean timeOut = true;
    
    lcd.clear();
    lcd.print("Alarm Time");

    tmpHeuresMontee = 0;
    timeRef = millis();
    lcd.setCursor(0,1);
    lcd.print("Set hours: ");
     lcd.write(1);//fleche en haut pour montée
     lcd.print(" ");
    while ( (unsigned long)(millis() - timeRef) < 5000 )
    {
        uint8_t button = lcd.button();

        if ( button == KEYPAD_UP )
        {
            tmpHeuresMontee = tmpHeuresMontee < 23 ? tmpHeuresMontee + 1 : tmpHeuresMontee;
            lcd.setCursor(13,1);
            lcd.print("  ");
            lcd.setCursor(13,1);
            if ( tmpHeuresMontee < 10 ) lcd.print(" ");
            lcd.print(tmpHeuresMontee);
            timeRef = millis();
        }
        else if ( button == KEYPAD_DOWN )
        {
            tmpHeuresMontee = tmpHeuresMontee > 0 ? tmpHeuresMontee - 1 : tmpHeuresMontee;
            lcd.setCursor(13,1);
            lcd.print("  ");
            lcd.setCursor(13,1);
            if ( tmpHeuresMontee < 10 ) lcd.print(" ");
            lcd.print(tmpHeuresMontee);
            timeRef = millis();
        }
        else if ( button == KEYPAD_SELECT )
        {
            while ( lcd.button() != KEYPAD_NONE ) ;
            timeOut = false;
            break;
        }
        delay(150);
    }

    if ( !timeOut ) transition(KEYPAD_SELECT);
    else transition(TIME_OUT);
}

// La deuxieme partie du processus en 2 parties qui sert a regler l'heure de l'alarme
// Recoit les minutes d'alarme. Si non fourni dans les 5 secondes,
// expire et retourne a un etat precedent (heure et date)
// Si des minutes sont fournies, regle l'heure de l'alarme et active l'alarme
void setAlarmMinutes()
{
    unsigned long timeRef;
    boolean timeOut = true;
    //uint8_t tmpMinutesMontee = 0;
    
    lcd.clear();
    lcd.print("Alarm Time");

    timeRef = millis();
    lcd.setCursor(0,1);
    lcd.print("Set minutes ");
    lcd.write(1);//fleche en haut pour montée
     lcd.print(" ");
    while ( (unsigned long)(millis() - timeRef) < 5000 )
    {
        uint8_t button = lcd.button();
        
        if ( button == KEYPAD_UP )
        {
            tmpMinutesMontee = tmpMinutesMontee < 55 ? tmpMinutesMontee + 5 : tmpMinutesMontee;
            lcd.setCursor(14,1);
            lcd.print("  ");
            lcd.setCursor(14,1);
            if ( tmpMinutesMontee < 10 ) lcd.print(" ");
            lcd.print(tmpMinutesMontee);
            timeRef = millis();
        }
        else if ( button == KEYPAD_DOWN )
        {
            tmpMinutesMontee = tmpMinutesMontee > 0 ? tmpMinutesMontee - 5 : tmpMinutesMontee;
            lcd.setCursor(14,1);
            lcd.print("  ");
            lcd.setCursor(14,1);
            if ( tmpMinutesMontee < 10 ) lcd.print(" ");
            lcd.print(tmpMinutesMontee);
            timeRef = millis();
        }
        else if ( button == KEYPAD_SELECT )
        {
            while ( lcd.button() != KEYPAD_NONE ) ;
            timeOut = false;
            break;
        }
        delay(150);
    }

    if ( !timeOut )
    {
        alarmHours = tmpHeuresMontee;
        alarmMinutes = tmpMinutesMontee;

        transition(KEYPAD_SELECT);
    }
    else transition(TIME_OUT);
}

et là si je rajoute il plante à la compilation
or ,mon problème est que je souhaite utiliser ce programme, mais en plus faire des transmissions (l'heure notamment) c'est pour ca que j'avais juste mis ce petit bout de programme de transmission de nombres pour verifier la compatibilité avant d'aller plus loin...
NB : en final, mon programme servira à commander des volets roulants et ce que je suis en train de développer c'est la télécommande

C'est quoi le plantage à la compilation?

Arduino : 1.8.4 (Windows 10), Carte : "Arduino/Genuino Uno"

C:\Users\Alain\Documents\Arduino\essai_tuto_alarmclock_lcd_keypad\essai_tuto_alarmclock_lcd_keypad.ino: In function 'void setup()':

essai_tuto_alarmclock_lcd_keypad:111: error: 'vw_set_ptt_pin' was not declared in this scope

     vw_set_ptt_pin(13);

                      ^

exit status 1
'vw_set_ptt_pin' was not declared in this scope

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

il n'y a pas de #include <VirtualWire.h> dans le dernier code que tu as posté

oups, tu as raison je suis vraiment désolé de ma nullité !
je suis en train de regarder sur wiki l'utilité de push to talk.
si je paramètre comme tu le suggère la pin 13 ca veut dire qu'elle deviendra inutilisable ?
j'ai un peu de mal avec les librairies
D'autre part, finalement avec le shield LCD Keypad, quelles sont les pins qui restent dispo ?
merci de ta patience

Le push to talk n'a pas d'utilité (du moins avec l'émetteur que tu utilises), mais avec cette librairie si tu la déclares en 13, tu bloques la pin 13

Il y a des versions de la librairie virtualwire ou cette pin n'est pas utilisée (elle est en commentaire)

D'après le wiki qu'on trouve sur internet le shield utilise les pins 4 à 10 et A0. Toutes les autres pins devraient donc être disponibles.

merci Kamill,
oui tu confirmes bien ce que j'avais écrit plus haut :

Pin   Function
Analog 0   Buttons (select, up, right, down and left)
Digital 4   DB4
Digital 5   DB5
Digital 6   DB6
Digital 7   DB7
Digital 8   RS (Data or Signal Display Selection)
Digital 9   Enable
     
Note: Do not use pin Digital 10 when this board is plugged in

pour virtualwire, j'ai cherché une version sans push to talk (ou press to talk). j'ai cherché et je ne trouve qu'une seule version.
avec l'emetteur qui est en 12, le recepteur qui sera en 11 et la 13 qui sera bloquée PTT, + la A0 qui est prise par les boutons + les A4 A5 qui servent au RTC, j'ai l'impression que l'UNO est full !!!...
merci encore pour ta disponibilité.
Bonne journée