Go Down

Topic: Besoin d'aide pour mon travail scolaire ^^ (Read 1 time) previous topic - next topic

Nokokette

Apr 27, 2013, 03:07 pm Last Edit: Apr 27, 2013, 03:22 pm by Nokokette Reason: 1
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!

Nokokette

#1
Apr 27, 2013, 03:26 pm Last Edit: Apr 27, 2013, 03:28 pm by Nokokette Reason: 1
Code: [Select]

#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: [Select]

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..

Nokokette

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..

skywodd

Bonjour,

Va voir mon tuto sur VirtualWire et regarde les commentaires ;)
http://skyduino.wordpress.com/2011/12/29/tutoriel-arduino-et-emetteurrecepteur-433mhz-virtualwire/
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Nokokette

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

Nokokette

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!

Nokokette

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: [Select]

#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^^

infobarquee

bonjour,
normal vu ton code ;)
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.

Nokokette

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^^

Nokokette

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! ^^


68tjs


Nokokette


skywodd

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

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

Code: [Select]
if (vw_get_message(buf, &buflen)) {
  // Ton code avec les strcmp()
}
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Nokokette

#14
Apr 28, 2013, 02:54 pm Last Edit: Apr 28, 2013, 02:56 pm by Nokokette Reason: 1
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..

Go Up