Go Down

Topic: Projet domotique : teleinfo + 4 relais + T°C 1wire (Read 6 times) previous topic - next topic

bluemax2001

Code: [Select]

       getCurrentTemp(temp_string);
       
       plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><p><h1>Welcome to Arduino Ethernet Shield V1.0  </h1></p> "));
       
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<hr><br><form METHOD=get action=\""));
       plen=es.ES_fill_tcp_data(buf,plen,baseurl);
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<h2> Current Temperature is </h2> "));
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<h1><font color=\"#00FF00\"> "));
       
     
       while (temp_string[i]) {
               buf[TCP_CHECKSUM_L_P+3+plen]=temp_string[i++];
               plen++;
       }

      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("  &#176C</font></h1><br> ") );
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=1>"));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Get Temperature\"></form>"));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</center><hr> <p> V1.0 <a href=\"http://www.nuelectronics.com\">www.nuelectronics.com<a>"));

et ce code dans la pageweb 1 entre la ligne :
sprintf (test, "%ld&chds=0,8000&chl=%ld'>" ,papp, papp) ;

et celle qui suit
plen=es_fill_tcp_data_p (buf, plen, test);

Pour afficher en page 1 la T°C.

bluemax2001

#11
Jan 15, 2011, 01:48 pm Last Edit: Jan 15, 2011, 01:50 pm by bluemax2011 Reason: 1
Code: [Select]

void OneWireReset(int Pin) // reset.  Should improve to act as a presence pulse
{
    digitalWrite(Pin, LOW);
    pinMode(Pin, OUTPUT); // bring low for 500 us
    delayMicroseconds(500);
    pinMode(Pin, INPUT);
    delayMicroseconds(500);
}

void OneWireOutByte(int Pin, byte d) // output byte d (least sig bit first).
{
  byte n;

  for(n=8; n!=0; n--)
  {
     if ((d & 0x01) == 1)  // test least sig bit
     {
        digitalWrite(Pin, LOW);
        pinMode(Pin, OUTPUT);
        delayMicroseconds(5);
        pinMode(Pin, INPUT);
        delayMicroseconds(60);
     }
     else
     {
        digitalWrite(Pin, LOW);
        pinMode(Pin, OUTPUT);
        delayMicroseconds(60);
        pinMode(Pin, INPUT);
     }

     d=d>>1; // now the next bit is in the least sig bit position.
  }
 
}

byte OneWireInByte(int Pin) // read byte, least sig byte first
{
   byte d, n, b;

   for (n=0; n<8; n++)
   {
       digitalWrite(Pin, LOW);
       pinMode(Pin, OUTPUT);
       delayMicroseconds(5);
       pinMode(Pin, INPUT);
       delayMicroseconds(5);
       b = digitalRead(Pin);
       delayMicroseconds(50);
       d = (d >> 1) | (b<<7); // shift d to right and insert b in most sig bit position
   }
   return(d);
}


void getCurrentTemp(char *temp)
{  
 int HighByte, LowByte, TReading, Tc_100, sign, whole, fract;

 OneWireReset(TEMP_PIN);
 OneWireOutByte(TEMP_PIN, 0xcc);
 OneWireOutByte(TEMP_PIN, 0x44); // perform temperature conversion, strong pullup for one sec

 OneWireReset(TEMP_PIN);
 OneWireOutByte(TEMP_PIN, 0xcc);
 OneWireOutByte(TEMP_PIN, 0xbe);

 LowByte = OneWireInByte(TEMP_PIN);
 HighByte = OneWireInByte(TEMP_PIN);
 TReading = (HighByte << 8) + LowByte;
 sign = TReading & 0x8000;  // test most sig bit
 if (sign) // negative
 {
   TReading = (TReading ^ 0xffff) + 1; // 2's comp
 }
 Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25

 whole = Tc_100 / 100;  // separate off the whole and fractional portions
 fract = Tc_100 % 100;


     if(sign) temp[0]='-';
     else              temp[0]='+';
     
       if(whole/100==0)
          temp[1] =' ';
       else
       temp[1]= whole/100+'0';
     temp[2]= (whole-(whole/100)*100)/10 +'0' ;
     temp[3]= whole-(whole/10)*10 +'0';
     
     temp[4]='.';
     temp[5]=fract/10 +'0';
     temp[6]=fract-(fract/10)*10 +'0';
     
     temp[7] = '\0';


     
}      


Celui là je pense le mettre tout à la fin.

Voilà, vous en pensez quoi ? des erreurs ?

PS : après, je verrai pour les relais ON/OFF simple.

bluemax2001

#12
Jan 15, 2011, 03:21 pm Last Edit: Jan 15, 2011, 07:53 pm by bluemax2011 Reason: 1
Code: [Select]

int8_t analyse_cmd(char *str)
{
       int8_t r=-1;
   
       if (find_key_val(str,"cmd")){
               if (*strbuf < 0x3a && *strbuf > 0x2f){
                       // is a ASCII number, return it
                       r=(*strbuf-0x30);
               }
       }
       return r;
}


 Il y a ce code qui est diffèrent entre les deux (le mien et celui mis pour la T°C juste au dessus). Je pense qu'il risque d'y avoir conflit si je le rajoute ? ou si je le transforme ?
Je me demande si ce n'est pas là mon problème  pour joindre les deux  :-/

Ou cela concerne juste l'appel de la page ?

bluemax2001

Bon, mon projet ne semble intéresser personne. Dommage pour moi.


Jean-François

#14
Jan 16, 2011, 05:21 pm Last Edit: Jan 16, 2011, 05:22 pm by jfs Reason: 1
Détrompe toi, je pense plutôt que tu n'as pas de réponse parce que ton code dépasse largement les compétences de beaucoup d'entre nous.
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Go Up