[C] Borlad 5.02 + Beck DK51

Borlad 5.02 + Beck DK51 [C] - C - Programmation

Marsh Posté le 06-05-2008 à 09:52:40    

Bonjour à tous, je suis en période de projet dans mon bts, et je galère sur une acquisition de température...
Je n'arrive PLUS (alors que ca marchait avant) à acquérir une température et à l'envoyer via Socket à mon collègue sur un autre pc.
Si quelqu'un a le courage de jeter un oeil (ou deux) sur ce travail, pour me donner une piste, ca serait cool...Merci à tous!
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <dos.h>
  4. #include <string.h>
  5. #include <math.h>
  6. #include <tcpipapi.h>
  7. #include "io_toss.h"
  8. #include "i2c.h"
  9. #include "adu8591.h"
  10. #include "clib.h"
  11. #include <I2C_API.h>
  12. /*constante*/
  13. #define   ecoute    1080
  14. #define   recu     1080
  15. #define   taille_envoi  20
  16. #define   num_port   1080
  17. /*variable*/
  18. static char recvbuf[recu];
  19. char* sendbuf[taille_envoi];
  20. static char ClientIP[17];
  21. struct sockaddr_in addr;
  22. struct sockaddr_in claddr;
  23.    char* valeur;
  24. char* val="";
  25.    float temperature=0,temperature1=0;
  26.    char* temperature_finale=0;
  27.    char* temp=0;
  28.    char degres[5];
  29. int sd;
  30. int asd;
  31. int established = 0;
  32. int i;
  33. int retval=0;
  34. int error=0;
  35.    int retourne=0;
  36.    void fermeture_socket_serveur(void);
  37.    void envoi(char*);
  38.    void automate(void);
  39. /**************FIN DES DECLARATIONS*********************************/
  40. /**************PARTIE SOCKET ***************************************/
  41. void fermeture_socket_serveur(void)
  42. {
  43. printf("\r\nFermeture de la socket" );
  44.    closesocket(sd, &error);
  45. }
  46. void envoi(char* donnee)
  47. {
  48.                retval = send( asd, donnee, strlen(donnee), 0, &error );
  49.              
  50.                if(retval == API_ERROR)
  51.                {
  52.                    #ifdef TCP_ECHO_SERVER_DEBUG
  53.                    printf("\r\nTCPserver: Senderror %d",error);
  54.                    #endif
  55.                    established = 0;
  56.                    //break;
  57.                }
  58.                else
  59.              {
  60.                #ifdef TCP_ECHO_SERVER_DEBUG
  61.                printf("\r\nTCPserver: Nothing received %d\r\n",error);
  62.                  #endif
  63.              }
  64. }
  65. void automate(void)
  66. {
  67. //envoi vers l'ihm de la donnée
  68.    valeur= strcat(degres,"&" );
  69.    envoi(valeur);
  70. }
  71. void init_dk50 (void)
  72. {
  73.   union  REGS  inregs;
  74.   union  REGS  outregs;
  75.   struct SREGS segregs;
  76.   // Enable bus mask
  77.   inregs.x.ax = 0x8001;             // enable ALE
  78.   inregs.x.dx = 0x0070;             // what bits of databus are inputs/outputs
  79.                                     // only Bits 0..6 on databus
  80.   int86x(PFE_INT, &inregs, &outregs, &segregs);
  81.   // Enable programmable chip selects
  82.   inregs.h.ah = 0x83;
  83.   inregs.x.dx = 0x04;               // PCS2#
  84.   int86x(PFE_INT, &inregs, &outregs, &segregs);
  85. }
  86. void logo(void)
  87. {
  88.       int j=0;
  89.       int y=0;
  90.       text_ini();
  91.       clear_text();
  92.   i2c_transmit(0x70,0x00);
  93.   _gotoxy(0,y+2);printf("Systeme" );      // add some text
  94.   _gotoxy(2,y+3);printf("de Gestion " );
  95.   _gotoxy(4,y+4);printf("et de traitement " );
  96.   _gotoxy(5,y+5);printf("des pontes" );
  97.   i2c_transmit(0x74,0xfe); i2c_release();  // LED1 blue on - Bit 0
  98.   api_sleep(100);
  99.      for(j=0;j<3;j++)
  100.      {
  101.   i2c_transmit(0x74,0xfd); i2c_release();  // LED2 green on - Bit 1
  102.   api_sleep(100);
  103.   i2c_transmit(0x74,0xfb); i2c_release();  // LED3 yellow on - Bit 2
  104.   api_sleep(100);
  105.   i2c_transmit(0x74,0xf7); i2c_release();  // LED4 red on - Bit 3
  106.   api_sleep(100);
  107.     i2c_transmit(0x74,0xfb); i2c_release();  // LED3 yellow on - Bit 2
  108.   api_sleep(100);
  109.     i2c_transmit(0x74,0xfd); i2c_release();  // LED2 green on - Bit 1
  110.   api_sleep(100);
  111.     i2c_transmit(0x74,0xfe); i2c_release();  // LED1 blue on - Bit 0
  112.   api_sleep(100);
  113.      }
  114. }
  115. void f_temperature(void)
  116. {
  117.       int v2=0;
  118.        
  119.     I2C_select_clock_pin (0);// choix de scl
  120.     I2C_select_data_pin  (1);  // choix de sda
  121.       i2c_init();
  122.   RTX_Sleep_Time(400);
  123.       //acquisition temperature
  124.       I2C_release();
  125.     I2C_transmit_char(0x90,0x00);                   /*trame de canal*/
  126.     I2C_receive_char(0x91,&temp,0);                  /*recevoir la valeur*/
  127.     I2C_release();                                  /*initialiser*/
  128.     v2=(int)temp;                                  /*convertie une chaine de caractère en entier*/
  129.       temperature1=(float)((2*v2)/100);
  130.       temperature=temperature1/0.02;
  131.       temperature_finale=(int)temperature;
  132.       itoa(temperature,degres,10);
  133.       //Affichage
  134.    _gotoxy(3,6);
  135.  printf("Temp:%.1f degres", temperature);              /*Affichage en degrés*/
  136.   _gotoxy(3,11);
  137.  printf("Tension: %.1f volt",temperature1);            /*Affichage en Volt*/
  138.    I2C_release();
  139. }
  140. void jeu(void)
  141. {
  142.   int i,j,wert,pos_point=0;
  143.   unsigned char k;
  144.   clear_text();clear_graphic();  // clear text and graphic display
  145.   _gotoxy(0,0);printf("Choisir action" );
  146.   _gotoxy(0,1);printf("<--I2C" );
  147.   _gotoxy(13,1);printf("Bleu ->" );
  148.   _gotoxy(13,5);printf("Vert ->" );
  149.   _gotoxy(13,9);printf("Jaune->" );
  150.   _gotoxy(13,13);printf("Flics->" );
  151.   i=500;
  152.   while (i--)
  153.   {
  154.     wert=(~i2c_receive(0x76))&0x00FF;  // read bus at 0x76 -> keys
  155.     if (wert)
  156.     { j=wert; k=1; while(j>>=1)k++;    // key 1..8 correnpond bit 0..7
  157.       _gotoxy(10,6);printf("%d",k);    // print number of key 1..8
  158.       if(k==1)
  159.       {
  160.       clear_text();
  161.       _gotoxy(10,7);printf("Acquisition en cours" );    // print number of key 1..8
  162.       for(pos_point=0;pos_point<10;pos_point++)
  163.       {
  164.       printf("." );
  165.       api_sleep(100);
  166.       }
  167.       clear_text();
  168.       f_temperature();
  169.       }
  170.       if(k==5)
  171.       {
  172.       i2c_transmit(0x74,0xfe); i2c_release();  // LED1 blue on - Bit 0
  173.       clear_text();
  174.       _gotoxy(10,7);printf("Bleu!" );    // print number of key 1..8
  175.       }
  176.       if(k==6)
  177.       {
  178.       i2c_transmit(0x74,0xfd); i2c_release();  // LED2 green on - Bit 1
  179.       clear_text();
  180.       _gotoxy(10,7);printf("Vert!" );    // print number of key 1..8
  181.       }
  182.       if(k==7)
  183.       {
  184.       i2c_transmit(0x74,0xfb); i2c_release();  // LED2 yellow on - Bit 2
  185.       clear_text();
  186.       _gotoxy(10,7);printf("Jaune!" );    // print number of key 1..8
  187.       }
  188.       if(k==8)
  189.       {
  190.       i2c_transmit(0x74,0xf7); i2c_release();  // LED2 red on - Bit 3
  191.       api_sleep(25);
  192.       i2c_transmit(0x74,0xfe); i2c_release();  // LED1 blue on - Bit 0
  193.       api_sleep(25);
  194.       i2c_transmit(0x74,0xef); i2c_release();  // beep on - Bit 4
  195.     api_sleep(25);
  196.       i2c_transmit(0x74,0xff); i2c_release();
  197.       clear_text();
  198.       _gotoxy(10,7);printf("Flics!" );    // print number of key 1..8
  199.       }
  200.     }
  201.     else
  202.     { del_textline(7);
  203.       // init port 0x74 -> Leds off, beep off, backlight on
  204.       i2c_transmit(0x74,0xff); i2c_release();
  205.       clear_graphic();
  206.     }
  207.     if(wert>250)     // abort
  208.     { clear_graphic();clear_text();
  209.       // init port 0x74 -> Leds off, beep off, backlight on
  210.       i2c_transmit(0x74,0xff); i2c_release();
  211.       return;
  212.     }
  213.     api_sleep(10);   // wait 10ms
  214.   }
  215. }
  216. void invaders()
  217. {
  218. graph_ini();
  219. graph_on();
  220. clear_graphic();
  221. draw_line(6, 0, 9, 0);
  222. draw_line(12, 0, 15, 0);
  223. draw_line(6, 1, 9, 1);
  224. draw_line(12, 1, 15, 1);
  225. draw_line(0, 2, 0, 7);
  226. draw_line(1, 2, 0, 7);
  227. draw_line(2, 6, 2, 9);
  228. draw_line(3, 6, 3, 9);
  229. draw_line(4, 2, 4, 11);
  230. draw_line(5, 2, 5, 11);
  231. draw_line(4, 16, 4, 19);
  232. draw_line(5, 16, 5, 19);
  233. draw_line(6, 0, 6, 1);
  234. draw_line(6, 4, 6, 7);
  235. draw_line(6, 10, 6, 15);
  236. draw_line(7, 0, 7, 1);
  237. draw_line(7, 4, 7, 7);
  238. draw_line(7, 10, 7, 15);
  239. draw_line(8, 0, 8, 1);
  240. draw_line(8, 4, 8, 11);
  241. draw_line(9, 4, 9, 11);
  242. draw_line(10, 4, 10, 11);
  243. draw_line(11, 4, 11, 11);
  244. draw_line(12, 0, 12, 1);
  245. draw_line(12, 4, 12, 11);
  246. draw_line(13,4,13,11);
  247. draw_line(14,0,14,1);
  248. draw_line(14,4,14,7);
  249. draw_line(14,10,14,15);
  250. draw_line(15,0,14,1);
  251. draw_line(15,4,15,7);
  252. draw_line(15,10,15,15);
  253. api_sleep(1000);
  254. }
  255. void main()
  256. {
  257.       init_dk50();
  258.       logo();
  259.       clear_text();
  260.       //invaders();
  261.       jeu();
  262.       f_temperature();
  263.       /*main()*/
  264.       clear_text();
  265.    api_sleep(1000);
  266. retval = opensocket(SOCK_STREAM, &error);
  267.    sd = retval;
  268.    /*Lire adresse local*/
  269.    addr.sin_family = PF_INET;
  270.    //convertir port d'envoie
  271.    retval = htons(ecoute);
  272.    addr.sin_port = retval;
  273.    addr.sin_addr.s_addr = 0L;
  274.    api_sleep(2000);
  275.    /*Bind()*/
  276.    retval = bind(sd, (const struct sockaddr *) &addr, &error);
  277.    if(retval == API_ERROR);
  278.    {
  279.     _gotoxy(2,6);printf("\r\nErreur de bind: %d",error);
  280.       //fermeture_socket_serveur();
  281.    }
  282.    api_sleep(2000);
  283.    while(1)  //Boucle infini
  284.    {
  285.     /*ecoute de la connexion*/
  286.       _gotoxy(2,7);printf("\r\nEcoute pour la connexion" );
  287.       retval = listen( sd,1,&error);
  288.       api_sleep(2000);
  289.       if(retval == API_ERROR);
  290.       {
  291.        _gotoxy(2,8);printf("\r\nErreur lors de l'ecoute: %d",error);
  292.          //fermeture_socket_serveur();
  293.       }
  294.       /*Etablir le connection*/
  295.       claddr.sin_family   = PF_INET;
  296.       claddr.sin_port   = 0;
  297.       claddr.sin_addr.s_addr = 0;
  298.       retval = accept(sd, (struct sockaddr *)&claddr, &error);
  299.       api_sleep(2000);
  300.       if(retval == API_ERROR)
  301.       {
  302.        _gotoxy(2,8);printf("\r\nErreur lors de l'acception: %d",error);
  303.          //fermeture_socket_serveur();
  304.       }
  305.       //Enregistrement la nouvelle description de la socket
  306.       asd = retval;
  307.       established = 1;
  308.       api_sleep(2000);
  309.       //Obtention de l'adresse IP du client
  310.       InetToAscii((unsigned long *) &claddr.sin_addr.s_addr, (char *)ClientIP);
  311.       _gotoxy(2,9);printf("\r\nL'adresse %s vient de se connecter\r\n",ClientIP);
  312.       I2C_release();
  313.       I2C_transmit_char(0x70,0x00);
  314.       I2C_release();
  315.       while(established) //Boucle infini
  316.       {
  317.        /*Attend les donné*/
  318.          do
  319.          {
  320.           /*recv*/
  321.             retval = recv(asd, (char *)recvbuf, recu, MSG_TIMEOUT, 20000, &error);
  322.             if( retval == API_ERROR)
  323.             {
  324.              established = 0;
  325.                break;
  326.             }
  327.             else
  328.             {
  329.              if(retval>0)  //Reception des données
  330.                {
  331.                 //affichage des donnée et analyse de celle-ci
  332.                   val=(char*)recvbuf;
  333.                   if(strcmp (val,"m" ) == 0)
  334.                   {
  335.                    //Test avec les lampes
  336.                      I2C_transmit_char(0x74, 0xfc); //Eteint
  337.                      I2C_release();
  338.                      automate();
  339.                      I2C_transmit_char(0X74, 0xfb); //Allume
  340.                      I2C_release();
  341.                   }
  342.                   if(strcmp (val,"n" ) == 0)
  343.                   {
  344.                    I2C_transmit_char(0x74,0xfc);
  345.                      I2C_release();
  346.                   }
  347.                   printf("Donnees recues: %s",val);
  348.                   recvbuf[0] = NULL;
  349.                   recvbuf[1] = NULL;
  350.                   recvbuf[2] = NULL;
  351.                   recvbuf[3] = NULL;
  352.                   recvbuf[4] = NULL;
  353.                }
  354.             }
  355.          }while((retval!=API_ERROR) && (retval>0));//tant que les donnée sont bonnes
  356.       }
  357.     }
  358. }
  359. /******************************************* PROG JEREMY *************************************/


 
 
Y'a surement du déchet.. :pfff:

Reply

Marsh Posté le 06-05-2008 à 09:52:40   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed