Pages: [1] 2   Go Down
Author Topic: Besoin d'aide pour mon travail scolaire ^^  (Read 1405 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à toutes et à tous,
Je me nomme Nathan, je suis en terminale STI 2D option SIN, j'ai un projet à faire pour le BAC en fin d'année. Je suis avec 3 camarades sur le projet "maison domotique". On doit contrôler un maison à distance, enfin je pense que vous le savez! On s'est divisé en plusieurs parties, la mienne est l'éclairage. Je travaille en ce moment même avec un kit de transmetteur/récepteur RF. J'arrive à allumé une LED (j'utilise la LED pour simuler une véritable lumière, j'ai un relais mais je ne sais pas encore trop m'en servir) de la carte arduino réceptrice avec un bouton poussoir de l'émettrice. Mais là j'essaye avec deux LED, pouvoir allumer les deux séparément ou ensemble.., la totale quoi^^
Jusqu'à présent, j'y suis arrivé seul, mais vu que je post ce message, j'y arrive plus! Je suis bloqué, mon prof n'est pas plus habile que moi avec les récepteurs et transmetteurs (espèrons qu'il ne lise jamais ça^^). En gros j'ai le BAC, cette matière est coef 12, tout se joue la dessus!

PS: J'ai voulu mettre mon programme mais je ne sais pas comment faire!
« Last Edit: April 27, 2013, 08:22:18 am by Nokokette » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#include <VirtualWire.h>


const char *msg1 = "VERTE"; // Tableau qui contient notre message numéro 1
const char *msg2 = "ROUGE"; // Tableau qui contient notre message numéro 2
int BP1=7;
int BP2=6;
void setup()
{
    pinMode(BP2, INPUT); // met la broche 6 en sortie
    pinMode(BP1, INPUT); // met la broche 7 en sortie
    Serial.begin(9600); // Initialisation du port série pour avoir un retour sur le serial monitor
    Serial.println("Partie transmetteur"); // Petit message de bienvenue
    digitalWrite (BP1, HIGH);
    digitalWrite (BP2, HIGH);
    vw_setup(2000);    
}
 
void loop()
{
    if (digitalRead(BP1) == 0) {
    Serial.print("Lampe verte : "); // On signale le début de l'envoi
    vw_send((uint8_t *)msg1, strlen(msg1)); // On envoie le message
    vw_wait_tx(); // On attend la fin de l'envoi
    Serial.println("transmi"); // On signal la fin de l'envoi
    delay(1500); //
    }
    
    if (digitalRead(BP2) == 0) {
    Serial.print("Lampe rouge : "); // On signale le début de l'envoi
    vw_send((uint8_t *)msg2, strlen(msg2)); // On envoie le message
    vw_wait_tx(); // On attend la fin de l'envoi
    Serial.println("transmi"); // On signal la fin de l'envoi
    delay(1500); //
    }
}

Et ça me fait une erreur de compilation :

Code:
c:/program files (x86)/arduino-1.0.4/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr6/crtm2560.o: In function `__vector_default':
(.vectors+0xd0): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_52' defined in .text.__vector_52 section in core.a(HardwareSerial.cpp.o)

Je ne sais pas comment résoudre ce problème..
« Last Edit: April 27, 2013, 08:28:29 am by Nokokette » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En fait j'ai réussis! il fallait juste rajouter "vw_set_ptt_inverted(true);" true ou false, je ne sais pas trop ce que ça change mais ça marche!
Maintenant je cherche comme lire un certain message pour allumer une certaine LED, si quelqu'un connait la fonction..
Logged

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

Bonjour,

Va voir mon tuto sur VirtualWire et regarde les commentaires smiley-wink
http://skyduino.wordpress.com/2011/12/29/tutoriel-arduino-et-emetteurrecepteur-433mhz-virtualwire/
Logged

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

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui ce tuto je l'ai lu et relu, mais je ne trouve rien comme fonction pour la partie recepteur, qui me permet de lire un certain message et d'allumer une certaine LED
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah oui ces commentaires là! Les mesquins^^
Merci bien ça m'aide pas mal, sauf que la fonction "strcmp" ne veut pas être lu, j'en déduis qu'il faut avoir une certaine librairie mais je ne la trouve pas, peu tu m'aider une fois de plus stp? Surtout que j'ai un réseau de merde ce soir, c'est impossible!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En fait j'ai pas regardé assez bah x)
Reste toujours un problème que j'essaye toujours de résoudre, les LED déconnents: déjà le premier appui ne marche pas, ça c'est pas trop grave, mais quand les deux sont allumées, il m'est impossible de pouvoir les éteindre, quand j’éteins la verte, elle s'éteint, mais au moment de la rouge, la verte se rallume, et inversement..
Mon programme :

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

uint8_t buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message reçu (de taille maximum VW_MAX_MESSAGE_LEN)
uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau
int LED1=6; // variable de la LED verte symbolisant la lumière
int LED2=5; // variable de la LED rouge symbolisant la lumière

void setup() // Fonction setup()
{
    Serial.begin(9600); // Initialisation du port série pour avoir un retour sur le serial monitor
    Serial.println("Partie recepteur :"); // Petit message de bienvenue
    pinMode(LED1, OUTPUT);  // initialisation de la LED verte en port 6
    pinMode(LED2, OUTPUT);  // initialisation de la LED rouge en port 5
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    vw_set_ptt_inverted(true); // Required for DR3100
    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()
{
    if (vw_wait_rx_max(150)) // Si un message est reçu dans les 150ms qui viennent
    {
       if (strcmp("VERTE", (char*)buf) == 0)
       {
         if (digitalRead(LED1) == 0) // si la LED est etteinte
           {
          digitalWrite(LED1, HIGH);   // allume la LED
           }
         else if (digitalRead(LED1) == 1) // sinon si la LED est allumée
           {
          digitalWrite(LED1, LOW); // éteind la LED
           }
       }
       
       else if (strcmp("ROUGE", (char*)buf) == 0)
       {
         if (digitalRead(LED2) == 0) // si la LED est etteinte
           {
          digitalWrite(LED2, HIGH);   // allume la LED
           }
         else if (digitalRead(LED2) == 1)// sinon si la LED est allumée
           {
          digitalWrite(LED2, LOW); // éteind la LED
           }
       }
       
       
        if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
           {
            Serial.print("Message : "); // début du te
            for (byte i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial
                Serial.write(buf[i]); // on remplace print par write sinon c'est du ASCII
            Serial.println("");
           }
    }
}

Si vous trouvez le problème..
PS: les commentaires ne sont pas tous de moi^^
Logged

Offline Offline
Edison Member
*
Karma: 17
Posts: 1952
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,
normal vu ton code smiley-wink
en fait tu fais quoi dans ton code?
si donnée recu=>
=>verification etat led verte
=>verification etat led rouge
donc si etat led verte en low, elle passe en high
idem pour la led rouge
et ca dans ta boucle

fais une fonction en dehors, ca marchera mieux, comme ca, si tu fais une action, tu sors de la boucle, accède à la fonction, la traite et retourne dans la boucle.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut!
En fait je veux que quand j’envoie un message "VERTE" la LED verte s'allume si elle est éteinte et qu'elle s’éteigne si elle est allumée, pareil pour la rouge.
Je ne vois pas trop ce que tu veux dire, désolé mais en arduino je ne suis pas vraiment une bête^^
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ca doit être avec "void" mais je mets quoi?
Void rouge() et void verte() ? J'ai essayé ya plus rien qui s'allume! même en mettant "int ou/et "char" dans les parenthèses, je ne trouve pas.. Ca m'agace de bloquer sur un truc à la con comme ça! ^^
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

up!
Logged

France S-O
Offline Offline
Edison Member
*
Karma: 41
Posts: 2233
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le dimanche c'est "down"
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Et arduino ne marche pas le dimanche?
Logged

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

Et coco t'as oublié un truc dans ton code smiley-wink
Avec vw_get_message() AVANT de tester la chaine de char ça marche mieux pour recevoir un message smiley-wink

Tu peut relire mon tuto une nouvelle fois je pense smiley-mr-green

Code:
if (vw_get_message(buf, &buflen)) {
  // Ton code avec les strcmp()
}
Logged

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

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aaaaah je t'aime toi! Merci ça marche x)
Je ne savais que vw_get_message(buf, &buflen) servait à ça! jpensais que c'était juste copier le message comme tu l'avais marqué!
Jte remercie beaucoup!

Aight..
« Last Edit: April 28, 2013, 07:56:36 am by Nokokette » Logged

Pages: [1] 2   Go Up
Jump to: