Go Down

Topic: Arduino web client + FreeRTOS (Read 463 times) previous topic - next topic

nad_ii

Salut,

Voila je voudrais mettre une requête à un serveur dans une tache FreeRTOS mais ça ne fonctionne pas
voici le code:

Code: [Select]
// Les bibliothèques utilisées :
#include <SoftwareSerial.h>
#include <Ethernet.h>
#include <SPI.h>
#include <FreeRTOS_AVR.h>

int a,b;

// L'adresse IP de l'Arduino dans le cas où elle n'est pas donnée par le serveur DHCP :
IPAddress IPArduino(192,168,1,10);

// L'adresse MAC de l'Arduino :
byte MACArduino[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED};

// L'adresse IP du serveur :
char IPServeur[]="192.168.1.4";

// Instanciation de la classe EthernetClient :
EthernetClient client;

// Définition des pins 2 et 3 comme un port série (2=RX 3=TX) :
SoftwareSerial MonNouveauPortSerie(3,4);

// Variable pour lire le code du tag RFID :
char val;

// Variable utilisée pour indexer le tableau "code[11]" :
int bytesread;

// Tableau servant à stocker la trame de 11 octets du code du tag RFID :
unsigned char code[11];

//---------------------------------------------------------------------------------------------
//--------------------------------------- Fonction tache 2--------------------------------------------
//---------------------------------------------------------------------------------------------
void FontionTache_2()
  {
//================== PARTIE RFID ==================//
 
  // Si des données sont présentes sur le nouveau port série " le lecteur a detecté un tag RFID " :
  if (MonNouveauPortSerie.available()) {
   
    bytesread = 0;
   
    while (bytesread<11) {
     
      if (MonNouveauPortSerie.available() > 0) {
       
        val = MonNouveauPortSerie.read();
        code[bytesread] =val;
       // Serial.print(code[bytesread],HEX);
        bytesread++;
       
        }
       
      }
   
    // Declancher un bip:
    digitalWrite(PinBuzzer,HIGH);
    delay(100);
    digitalWrite(PinBuzzer,LOW);
     
    // Vider le buffer du nouveau port série :   
    MonNouveauPortSerie.flush();
   
    }
   
    // connexion et envoie du code du tag RFID lu vers la base de données :
  if (client.connect(IPServeur, 80)) {
   
   // Serial.println("1) ->->-> Connecte a la base de donnee.");
   // Serial.println("envoie du RFID a la base de donnee :");
   
    // Faire une requete HTTP vers la page web de traitement des RFID :
    client.print("GET /site2/traitement_medecin_ajax_rfid.php?");
    client.print("rfid=");     
    client.print(code[0],HEX);     
    client.print(code[1],HEX);
    client.print(code[2],HEX);
    client.print(code[3],HEX);
    client.print(code[4],HEX);
    client.print(code[5],HEX);
    client.print(code[6],HEX);
    client.print(code[7],HEX);
    client.print(code[8],HEX);
    client.print(code[9],HEX);
    client.println(code[10],HEX);
    client.println(" HTTP/1.1");
    client.println("Host:192.168.1.5" );
   
    // Deconnexion :
    client.stop();     
   // Serial.println("RFID envoye a la base de donnee." );
   
    }
 
  // Echec lors de la connexion :
  else {
   
   // Serial.println("Erreur lors de l'envoie du RFID a la base de donnee.\n");
   
    }
   
  }


//---------------------------------------------------------------------------------------------
//--------------------------------------- Blink_LED--------------------------------------------
//---------------------------------------------------------------------------------------------
void Blink_LED(const uint8_t Led, int Delay)
  {
    digitalWrite(Led, HIGH);
    delay(Delay);
    //vTaskDelay((Delay * configTICK_RATE_HZ) / 1000L);
    digitalWrite(Led, LOW);
  }

//-------------------------------------------------------------------------------------------
//------------------------------------- Tache 1 ---------------------------------------------
//-------------------------------------------------------------------------------------------
void Tache_1(void * pvParameters )
  {
    while (1)
      {
        Blink_LED(9, 100);
        vTaskDelay(5000);
      }
  }
//---------------------------------------------------------------------------------------------
//--------------------------------------- Tache 2 ---------------------------------------------
//---------------------------------------------------------------------------------------------
void Tache_2(void * pvParameters )
  {
    while (1)
      {
        FontionTache_2();
        vTaskDelay(500);
      }
  }

//---------------------------------------------------------------------------------------------
//--------------------------------------- Setup -----------------------------------------------
//---------------------------------------------------------------------------------------------
void setup()
  {
 
  // Initialisation du nouveau port série :
  MonNouveauPortSerie.begin(9600);
 
  // Initialisation du port série de l'Arduino :
  Serial.begin(9600);
 
  // Initialisation de l'Arduino Ethernet avec une addresse MAC et IP :
  Ethernet.begin(MACArduino,IPArduino);
 
    pinMode(9, OUTPUT);  // configuration de pin 13 en sortie
   
//************ Création de trois taches périodiques *****
    xTaskCreate(Tache_1, NULL, configMINIMAL_STACK_SIZE, NULL, 1, NULL);
    xTaskCreate(Tache_2, NULL, configMINIMAL_STACK_SIZE, NULL, 1, NULL);
   
//*********** Lancement du Scheduler ********************
    vTaskStartScheduler();
    while(1);
}
//------------------------------------------------------------------------------

void loop()
  {
 
  }


si je remplace le code de la requete par autre chose genre clignoter une autre led , les deux taches s'exécutent normalement ça coince à partir de if (client.connect)

REMERCIEMENTS...

infobarquee

bonjour,
ca ne serait pas ?
Code: [Select]
char IPServeur[]="192, 168, 1, 4";
AUCUNE AIDE PAR MP

Go Up