Go Down

Topic: Commande a distance RF Grove (Read 42 times) previous topic - next topic

Croixpizza

Bonjour , je suis sur un problème , je souhaite commander a distance deux servomoteurs a l'aide de deux carte arduino et de deux modules RF Grove.
De plus j'envoi un signal que la deuxième carte arduino reçoit en hexa et je souhaite dire en gros "if tu reçois tel lettre en hexa tu appelle tel programme" cependant deux problème ce pose :

1) je ne sais pas si je dois créer une nouvelle variable pour faire cette fonction if

2) je ne sais pas vraiment quelle fonction utiliser pour peller un programme

Voila le programme
Code: [Select]

#include <SoftwareSerial.h>

SoftwareSerial SoftSerial(3, 4); // TX, RX
int buffer[64];
int count=0;
void setup()
{
    SoftSerial.begin(9600);             
    Serial.begin(9600);           

}

void loop()
{
    delay(1000);
//    SoftSerial.write(0xAA);
  //  SoftSerial.write(0xFA);
    //SoftSerial.write(0xE1);

    if (SoftSerial.available())           
    {
        while(SoftSerial.available())         
        {
            buffer[count++]=SoftSerial.read();   
            if(count == 64)break;
        }
        for (int i=0; i<count; i++) {
            Serial.print(buffer[i],HEX);           
        }
        clearBufferArray();         
        count = 0;                 
   
    if (Serial.available())           
    SoftSerial.write(Serial.read());   
//    Serial.println("...");
}




void clearBufferArray()             
{
    for (int i=0; i<count;i++)
    { buffer[i]=NULL;}                 
}

kamill

Bonjour,

Il suffit de tester le premier caractère du buffer et d'appeler la fonction en conséquence:
Code: [Select]
    switch (buffer[0])
    {
      case 0xAA:
        fonction1();
        break;
      case 0xFA:
        fonction2();
        break;
      case 0xE1:
        fonction3();
        break;
    }


Attention au mélange de caractères signés/non signés, tu debrais déclarer buffer comme byte[] et non int[]

Go Up