Partage
  • Partager sur Facebook
  • Partager sur Twitter

Webserver I/O avec led temporiser help..

Sujet résolu
    8 janvier 2014 à 19:02:02

    bonjour,
    Voila je voudrais faire un webserver I/O mais avec des sorties temporiser
    après plusieurs essaye et recherche sur le net ca n’existe pas,
    Alors j ai commencé par le plus dur, faire un temporisation ça fonctionne plutot bien..
    sauf que il faut que le client reste connecter pendant la procédure de la temporisation
    Autrement la led reste allumer .
    Alors comme faire pour quelle puisse finir la procédure et s’éteindre même si il n y a plus de client connecter?
    Et comme je ne suis pas très doué dans la programmation, une aide serait la bienvenue
    merci d’avance ANDRO
    voila le code
    #include <SPI.h>
    #include <Ethernet.h>
    
    byte mac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; //physical mac address
    byte ip[] = { 192, 168, 0, 116 }; // ip in lan
    byte gateway[] = { 192, 168, 0, 1 }; // internet access via router
    byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
    EthernetServer server(80); //server port
    
    String readString; 
    const int temporisation_A = 4000;//
    int stringA;
    int etat_A;
    int const outputledport4 = 4;
    unsigned long temps_A;
    ////////////////initialisation et configuration des entrées/sorties ///////////
    
    void setup()
    {
    pinMode(outputledport4 , OUTPUT);
    
    Ethernet.begin(mac, ip, gateway, subnet);
      server.begin();
    }
    void loop()
    {
    // Create a client connection
    EthernetClient client = server.available();
    if (client) {
    while (client.connected()) 
    {
    if (client.available()) 
    {
    char c = client.read();
    
    //read char by char HTTP request
    if (readString.length() < 100) {
    
    //store characters to string 
    readString += c; 
    //Serial.print(c);
    } 
    
    if (c == '\n') {
           
    if(readString.indexOf('?') >=0) 
    {
    client.println("HTTP/1.1 204 xxx");
    client.println();
    client.println();  
    }
    else 
    {
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println("Refresh: 5"); 
    client.println();
    client.println("<HTML>");
    client.println("<HEAD>");
    client.println("<TITLE>tempo I/O</TITLE>");
    client.println("</HEAD>");
    client.println("<BODY>");
    client.println("<H1>tempo I/O</H1>");
    client.println("<a href=\"/?out4\" target=\"inlineframe\">ON TIMMER PORT4</a><p>"); 
    client.println("<IFRAME name=inlineframe style=\"display:none\" >");          
    client.println("</IFRAME>");
    client.println("</BODY>");
    client.println("</HTML>");
    }
    delay(1);
    //stopping client
    client.stop();
    
    // Vérifie les String A pour savoir s'il faut allumer la led
    stringA = readString.indexOf("out4");
    if(stringA >0)
    {
     temps_A = millis(); 
     etat_A = HIGH; //
    digitalWrite(outputledport4, HIGH);//enclenche la led
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Vérifie la led A si il faut l'éteindre
    if(etat_A == HIGH && ((millis() - temps_A) > temporisation_A))
    {
    etat_A = LOW;
    digitalWrite(outputledport4, LOW);
    
    }
    //clearing string for next read
    readString="";
    }
    }
    }
    }
    }



    • Partager sur Facebook
    • Partager sur Twitter
      8 janvier 2014 à 21:49:04

      Tu devrais utiliser un timer pour déclencher une IT toutes les millis secondes et vérifier les LED qui doivent être éteinte.

      Voici un petit exemple de code que j'ai l'habitude de donner :

      #include "TimerOne.h"
      
      
      
      /**
      	Tableau des temps (en ms) avant changement d'état pour toutes les pins.
      */
      uint16_t pulseTickTab[64] = { 0 };
      
      
      
      /**
      	Base de temps du système.
      */
      uint16_t tick = 0;
      
      
      
      /**
      	Fonction digitalWrite en mode impulsion.
      	Note : 0 provoque un temps infini.
      */
      void digitalPulseWrite(uint8_t pin, uint8_t val, uint16_t timeMs) {
      	noInterrupts();
      	pulseTickTab[pin] = timeMs;
      	digitalWrite(pin, val);
      	interrupts();
      }
      
      
      
      /**
      	Fonction de gestion de la base de temps du système.
      	=> Doit être appelée toutes les ms pour le bon fonctionnement de digitalPulseWrite.
      */
      void systymeTick() {
      	noInterrupts();
      	for ( uint8_t i = 0 ; i < 64 ; i++ ) {
      		if ( pulseTickTab[i] == 0 ) {
      			continue;
      		}
      		pulseTickTab[i]--;
      		if ( pulseTickTab[i] == 0 ) {
      			digitalWrite(i, digitalRead(i)^1);
      		}
      	}
      	tick++;
      	interrupts();
      }
      
      
      
      /**
      	Setup
      */
      void setup(void) {
      	Timer1.initialize(1000);
      	Timer1.attachInterrupt(systymeTick);
      	pinMode(13, OUTPUT);
      	pinMode(14, OUTPUT);
      	pinMode(15, OUTPUT);
      }
      
      
      
      /**
      	Loop
      */
      void loop() {
      	digitalPulseWrite(13, HIGH, 300);
      	digitalPulseWrite(14, HIGH, 500);
      	digitalPulseWrite(15, HIGH, 700);
      	delayMs(1000);
      }
      





      • Partager sur Facebook
      • Partager sur Twitter
        8 janvier 2014 à 23:25:31

        merci lorrio ,de me dirigier sur une voie ,malheureusement comme je debute sur arduino ca met très dificile d'avance,pas assez de notion mais je prends note ,déja une solution c est tout bon a prendre.

        si personne ne trouve une autre solution plus facile , je me lancerai dans cette voie..

        merci d'avance
        • Partager sur Facebook
        • Partager sur Twitter
          10 janvier 2014 à 17:09:22

          toute ok j'ai compris c'etait que un problème d'imbrication (merci a john sans lui j'aurais pu chercher encore un moment) 

          toute bon week Andro
          • Partager sur Facebook
          • Partager sur Twitter

          Webserver I/O avec led temporiser help..

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown