Go Down

Topic: ATtiny & virtual wire pour telecommande (Read 5277 times) previous topic - next topic

messkid

Je ne comprend pas, j'ai juste à rajouter le /0 à la fin de mon message ?
Ces 2 lignes c'est pour arrêter la réception le temps du programme et la reprendre à la fin, ça marche pas comme ça ?
Et si je veux mettre le message dans une variable je fais comment ?
Merci pour cette réponse en tout cas j'essaie des que j'ai l'ordinateur sous la main !

skywodd


Je ne comprend pas, j'ai juste à rajouter le /0 à la fin de mon message ?

Non le compilateur ajoute automatiquement le \0 à toute les chaines de caractères entre "...".
C'est au niveau du strlen(msg) que tu doit faire strlen(msg) + 1.
strlen() renvoi le nombre de caractères de la chaine mais ne compte pas le \0, du coup tu ne l'envoie pas et côté réception le strcmp() n'as plus de \0 et ne sait donc plus où se situe la fin du message.


Ces 2 lignes c'est pour arrêter la réception le temps du programme et la reprendre à la fin, ça marche pas comme ça ?

C'est des fonctions donc les () sont obligatoires sinon tu n'appelles pas la dite fonction.
truc_machin; -> ça fait rien
truc_machin(); -> appelle la fonction truc_machin()


Et si je veux mettre le message dans une variable je fais comment ?

Deux choix :
- soit tu crées une variable de type char[] avec une taille fixe que tu remplis avec strcpy()
- soit tu utilises un pointeur char* que tu fait pointer vers une chaine de char constante.

Exemple avec la 2ieme solution :
Code: [Select]
const char* CMD_TOTO = "toto";
const char* CMD_TATE = "tata";

void envoiCommande(const char* cmd) {
  vw_send((uint8_t *) cmd, strlen(cmd) + 1);
  vw_wait_tx();
}

// ... quelque part dans ton code
envoiCommande(CMD_TOTO);

// ... quelque part ailleurs dans ton code
envoiCommande(CMD_TATA);

// ... et bonus avec une variable
char const * ptr; // "char const *" -> pointeur pas constant sur un truc constant
ptr = CMD_TATA;
envoiCommande(ptr);

Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

messkid

Quel sauveur =)) je vais me debrouiller pour la suite alors, mais j'ai juste une derniere question : Je peux utiliser juste des AT tiny ou mega en reception, ou j'ai besoin de composants en + (quartz etc..) ?

skywodd


mais j'ai juste une derniere question : Je peux utiliser juste des AT tiny ou mega en reception, ou j'ai besoin de composants en + (quartz etc..) ?

Si tu utilises des ATmega tu auras besoin d'un quartz + condensateurs (x2, généralement de 22pF), de même qu'un bouton + résistance pour le reset, ... (voir montage "arduino breadboard" pour la liste exhaustive).

Pour l'ATtiny un condensateur de 100nF à mettre entre VCC (5v) et GND devrait suffire.
L'oscillateur interne de l'Attiny devrait suffire pour VirtualWire.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up