Pages: [1] 2   Go Down
Author Topic: au bord du suicide !!!  (Read 1520 times)
0 Members and 1 Guest are viewing this topic.
la Reunion
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,
j'ai un soucis avec la bibliothèque virtualwire et wire quand elle sont dans le meme sketch. J'imagine bien que le problème vien de moi je vous rassure (d'ou mon idée de suicide lol ).
en fait, (non je ne me suiciderais pas !!!) quand j'utilise "endTransmission()" de Wire, la connection serie(serial monitor)  plante et la led TX sur ma carte (nano) ne s'allume plus a la reception de mon module RF.
indépendamment tout fonctionne bien.
une idée du problème ?
Logged

Merci !!!!!

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

Bonjour,

Le code complet et un petit schéma du montage serait pas mal smiley-wink
Ça sent le problème de câblage.
Logged

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

Offline Offline
God Member
*****
Karma: 12
Posts: 920
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Je crois qu'il revient pas... il s'est suic******?  smiley-mr-green
Logged

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

Je crois qu'il revient pas... il s'est suic******?  smiley-mr-green
Il a du ce pendre au bout d'un Wire smiley-mr-green
Logged

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

la Reunion
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Au bout du wire...  smiley <-- pas mal !!!
bon apres m'être suicidé une demi-dizaine de fois, j'ai avancé (c'est déjà bien) et du coup je bloque sur cela:

   byte x = 256;       //de 0 a 255

je n'arrive pas a envoyer un int ou un long via wire. j'ai cru comprendre que c'est pas fait pour. J'ai besoin d'envoyer un nombre a 3 chiffres positif ou négatif.
y'a t'il une maniere de contourner le probleme. J'ai cru lire que c'était possible par la librairie "easytransfert" mais le sketch d'exemple me fais me poser encore plus de questions et je m'imagine partir encore dans une galere, alors qu'a la base je trouvais mon probleme simple  smiley-red

je vous joint le code de le carte réceptrice en entier et entièrement repiqué sur le net du coup...

Code:
#include <VirtualWire.h> // Vous devez télécharger et installer la librairie VirtualWire.h dans votre dossier "/libraries" !
#include <Wire.h>

int var = 10;
char buf[30];
int led = 13;
 
    void setup()
    {
        Serial.begin(9600);    // On initialise "le serial monitor", j'ai laissé 9600 bauds ici car c'est la valeur par défaut mais vous pouvez la modifier. Attention à bien mettre la même valeur dans votre Serial Monitor et dans votre programme.
        vw_setup(2000);                 // Bits par seconde (vous pouvez le modifier mais cela modifiera la portée). Voir la documentation de la librairie VirtualWire.
        vw_set_rx_pin(3);             // C'est sur cette broche que l'on reliera les broches DATA du récepteur, vous pouvez changez de broche si vous le désirez.
        vw_rx_start();                    // On démarre le récepteur.
          pinMode(12, OUTPUT);   
           Wire.begin(); // join i2c bus (address optional for master)
 
    }

   byte x = 256;       //de 0 a 255

 
void loop()
    {
      sprintf(buf, "%d", var);
        uint8_t buf[VW_MAX_MESSAGE_LEN];
        uint8_t buflen = VW_MAX_MESSAGE_LEN;
        char msg[30] = "";
   
        if (vw_get_message(buf, &buflen))
        {
          digitalWrite(led,HIGH);
          //analogWrite(led1,0);
        for (int i = 0; i < buflen; i++)
        msg[i]=0;
        {
                  int i;
          // Un message est reçu.
        char vBuff[10] = "";
        for (int i = 0; i < buflen; i++){
          msg[i] = buf[i];
        }
        strcat(vBuff, msg);
 
        Serial.println(vBuff);
        const char separator[] = "-";
        char* accum;
        char* lecture = strtok_r(vBuff,separator,&accum);
                     
                 
                       if ( lecture[0]=='1'){
                           Wire.beginTransmission(4); // transmit to device #4
                            Wire.write("x is ");        // sends five bytes
                              Wire.write(x);              // sends one byte 
                                Wire.endTransmission();    // stop transmitting
                                   Serial.println("reception de 1");
                                    digitalWrite(12,HIGH);
                     
                     }
                       else if ( lecture[0]=='B'){
                           Serial.println("reception de B");
                            Serial.println(lecture);
                               while(lecture = strtok_r(NULL,separator,&accum)){
                                  digitalWrite(12,LOW);
                               }


                   }
                  }

      }
 }
Logged

Merci !!!!!

la Reunion
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

D'ailleurs à la relecture, je vais vous exposer l'ensemble de mon projet afin que vous me disiez si vous le trouvez pertinent:

Sur la carte esclave Wire:
j'aimerais asservir un moteur DC un peu comme un servomoteur. Le moteur est celui d'essuie glace de voiture. J'ai pas besoin d'aller tres vite et pas non plus besoin de gérer la vitesse. Donc j'ai opté pour un pont en H a base de relais (qui mon étonnés par leur vitesse de reaction d'ailleurs).  
Jusque la sa va encore, j'utilise un potentiomètre de 10 tours pour le controle d'angle, il est couplé à l'axe de sortie du moteur via une courroie crantée.
Je pourrais utiliser un encodeur rotatif mais l'avantage de ce système est qu'en cas de coupure de l'alimentation ou n'importe quel problème, il ne perdra pas son réglage, ou son zéro, je sais pas comment dire: la position de départ en fait.
 
sur la carte maitre wire:
Reception 433mhz d'une commande (via une troisieme carte mais ça c'est bon , c'est fini et sa fonctionne ouf!!  smiley-sweat.) la commande définit un scenario (avec des delays , interaction capteur etc...)
Et ce qui me bloque : une valeur angulaire a appliquer sur un "moteur asservis". Sans forcement de retour d'information dans un 1er temps > on fera confiance au système.
La valeur angulaire doit parfois être négative (le moteur doit tourner dans les deux sens).


« Last Edit: February 01, 2013, 09:10:30 am by vassi974 » Logged

Merci !!!!!

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5213
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Au bout du wire...  smiley <-- pas mal !!!
bon apres m'être suicidé une demi-dizaine de fois, j'ai avancé (c'est déjà bien) et du coup je bloque sur cela:

   byte x = 256;       //de 0 a 255


bonjour
 si x (byte) est prévu pour 0-255 pourquoi lui affecter la valeur 256 ?
Logged

la Reunion
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bah oui , je sais mais j'aimerais : de -360 à 360 si possible..... smiley-grin
Logged

Merci !!!!!

la Reunion
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

j'ai essayé "int" mais sa fonctionne pas non plus , je m'y suis surement mal pris.
Logged

Merci !!!!!

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5213
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

j'ai essayé "int" mais sa fonctionne pas non plus , je m'y suis surement mal pris.
re
c'est comme pour le permis de conduire   smiley-mr-green
ne pas confondre departementale et nationale
voir les data type
http://arduino.cc/en/Reference/HomePage
Logged

la Reunion
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, donc je vais essayer avec un "long". J'imagine qu'il faut faire de meme dans la partie réceptrice ?
Logged

Merci !!!!!

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

Donne un coup de ctrl+T sur ton code, j'ai l'impression que tu as des accolades à des endroits plus que louche ...
- "buf" est déclaré deux fois.
- msg ne sert à rien, utilise directement buf ...
- de même les boucles de copie -> memcpy() smiley-wink

Sinon pourquoi envoyer tes valeurs en texte ?
Code:
int valeur = 42;
vw_send((uint8_t *) &valeur, sizeof(valeur));

Code:
int valeur, len = sizeof(int);
if (vw_get_message((uint8_t *) &valeur, &len)) {
  // ...
}
Logged

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

la Reunion
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci et desolé pour le temps de réaction> bcp de boulot en ce moment...

en fait mon problème est d'envoyer une variable type "int" d'une carte à l'autre. De préférence en I2C mais pas obligatoirement.
c'est juste cela qui bloque.
Et sur ce coup la google est pas mon amis... j'ai essayé plein de choses mais y'a rien qui fonctionne pour moi.
la base du code que j'aimerais modifier est celle la :
Code:
// Wire Master Writer
// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library
// Writes data to an I2C/TWI slave device
// Refer to the "Wire Slave Receiver" example for use with this

// Created 29 March 2006

// This example code is in the public domain.


#include <Wire.h>

void setup()
{
  Wire.begin(); // join i2c bus (address optional for master)
}

byte x = 0;

void loop()
{
  Wire.beginTransmission(4); // transmit to device #4
  Wire.write("x is ");        // sends five bytes
  Wire.write(x);              // sends one byte 
  Wire.endTransmission();    // stop transmitting

  x++;
  delay(500);
}

mais au lieu d'une variable type "Byte" je voudrais envoyer un "int".
merci de repondre meme si sa vous parrait facil comme question. (suis pas programmeur moi !!!! smiley-lol)
Logged

Merci !!!!!

la Reunion
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

je me répond a moi meme :

http://www.bajdi.com/i2c-communication-between-2-arduinos/

Logged

Merci !!!!!

Paris
Offline Offline
Sr. Member
****
Karma: 2
Posts: 368
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Très intéressant ton lien !
Logged

EN: Libraries are my Gurus, they make me believe anything they want !
FR: Les librairies sont mes gourous, elles me font croire ce qu'elles veulent !

Pages: [1] 2   Go Up
Jump to: