Blocage d'émission Virtual Wire

Bonsoir,

apres 12h a bloquer la dessus mes nerfs lachent, je suis a bout je devient completement debile :

j’ai une telecommande qui envoie des infos, j’arrive pas a savoir ou ca bloque.

mon systeme qui recois met tout ce qu’il recois dans le buffer puis fait une comparaison :

if paul → etat haut, 1sec, etat bas d’un moteur

else if connexion → on allume une led

else → rien

Aidez moi j’en peux plus, le mot PAUL est toujours recu, mais si je change la reception et que je met “POUL” a la place, il ne tourne pas le moteur(normal) mais au bout de 3 secondes rien ne se passe ? pourquoi ?

CODE emission AT Tiny 8 Mhz

#include <VirtualWire.h> // inclusion de la librairie VirtualWire

const char *msg = "PAUL";
const char *ord = "CONNEXION";
void setup() // Fonction setup()
{
  vw_setup(2000);		
  vw_set_tx_pin(3);
}

void loop() // Fonction loop()
{
  vw_send((uint8_t *)msg, strlen(msg)); // On envoie le premier message 
  vw_wait_tx(); // On attend la fin de l'envoi
  
  delay (3000); //on attend ensuite 3 secondes
  
  vw_send((uint8_t *)ord, strlen(ord));// on envoie le second message
  vw_wait_tx();
   
  delay (500);
   }

Code reception ARDUINO UNO

#include <VirtualWire.h> // inclusion de la librairie VirtualWire

const char *name = "PAUL";
const char *ordre = "CONNEXION";
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN; 
int moteur = 2;
int led = 3;
int temps = 820;
int tempsaj = 820;
void setup() // Fonction setup()
{
  
    pinMode (moteur , OUTPUT);
    pinMode (led , OUTPUT);
    vw_setup(2000);	// initialisation de la librairie VirtualWire à 2000 bauds (note: je n'utilise pas la broche PTT)
    vw_rx_start();  // Activation de la partie réception de la librairie VirtualWire
}

void loop() // Fonction loop()
{
  digitalWrite (led, HIGH);
  digitalWrite(moteur, HIGH);
  vw_wait_rx();
    if (vw_wait_rx_max(200)) // Si un message est reçu dans les 200ms qui viennent
    {
		if (vw_get_message(buf, &buflen)) //		{
           
			if(strcmp(name, (char*)buf) == 0) 
                  {
                    vw_rx_stop();//on arrete la reception
                    digitalWrite(moteur, LOW); //
                     
               
                delay (temps); // On attend le temps necessaire
                digitalWrite(moteur, HIGH);//On éteint le moteur
                 temps = temps + tempsaj; // on ajuste le temps
                vw_rx_start();

                  }
	       else if(strcmp(ordre, (char*)buf) == 0) // 
                {
                vw_rx_stop();
                 digitalWrite (led, LOW);
                delay (1000);
                vw_rx_start();
                }  
           else
      {
       
      }     
    }
}
}

j’offre une boite de ferrero a celui qui arrivera a faire marcher ce foutu tsouin tsouin. envoyez moi un message si vous avez du temps pour que on echange sur les solution a ce probleme sinon laissez un petit bout d’aide sur ce forum.

merci

    if (vw_wait_rx_max(200)) // Si un message est reçu dans les 200ms qui viennent
    {
	  if (vw_get_message(buf, &buflen)) //	{      <------ oh le vilain commentaire qui masque l'accolade
           
		if(strcmp(name, (char*)buf) == 0) 
                {

Non, la j’avais enlevé des commantaires en postant mon message (debile =().

le probleme viens d’un blocage lors d’un delay, en fait le temps est infini, j’ai beau mettre 500ms j’ai fait un test pour eteindre une led apres l’envoi du 1er message mais avec 0.5sec de decalage et elle ne s’eteint pas…

C'est pire que ca en fait, cest le vw_wait_tx qui bloque =( le premier message part mais on ne passe jamais a l'etape d'apres

messkid: C'est pire que ca en fait, cest le vw_wait_tx qui bloque =( le premier message part mais on ne passe jamais a l'etape d'apres

Met des Serial.println() entre chaque ligne de ton loop() pour voir où ça bloque exactement. C'est trés bizarre que vw_wait_tx() bloque comme ça ...

skywodd:

messkid: C'est pire que ca en fait, cest le vw_wait_tx qui bloque =( le premier message part mais on ne passe jamais a l'etape d'apres

Met des Serial.println() entre chaque ligne de ton loop() pour voir où ça bloque exactement. C'est trés bizarre que vw_wait_tx() bloque comme ça ...

Je parle de CE, pas de CS ;)

B@tto: Je parle de CE, pas de CS ;)

Tu t'est planté de topic B@tto :P

Ah jme disais bien que jlavais posté xD

Je suis sur un AT tiny donc je peux pas afficher sur le série ... mais je demande d'allumer une led à la place afin de savoir ou j'en suis. Et rien ne bouge ..

personne d'autre aurais une idée ? =(

Si tu veut faire du debug série sur ATtiny : http://nerdralph.blogspot.ca/2013/12/writing-avr-assembler-code-with-arduino.html (le zip du code source est en bas d'article)

Ce sera plus pratique d'une simple led ;)

Je suis desole de remonter un vieux topis mais j’ai toujours ce probleme que des autres gens sur le net rencontrent, le programme se bloque et est incapable d’effectuer le moindre delay dans une fonction de virtual wire. pourtant sur je met un programme de blink il n’y a aucun soucis …
et ma presentation de projet qui est dans moins de 2 semaines … HEEEELP !