Pages: [1]   Go Down
Author Topic: Arduino convertir char a integer  (Read 2976 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas noches a todos, mi duda es la que sigue:

Tengo una placa arduino, un potenciometro y el modulo ethernet para arduino.

Lo que quiero conseguir: con el modulo ethernet enviar el valor del potenciometro.

Lo que me pasa: desde el cliente telnet me llegan datos de arduino, pero son caracteres, investigando me di cuenta que server.write() requiere de un dato tipo char o byte. y me envia la consersion ASCII.


Alguien sabe como obtener ese datoo de tipo integer????

adjunto codigo:

Code:
#include <Ethernet.h>
    int pinPote1 = 0;
    int valPote1 = 0;
    byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x10, 0x7D };
    byte ip[] = { 192, 168, 1, 15 };
    Server server = Server(23);
    void setup()                    
    {
        Ethernet.begin(mac, ip);
        server.begin();
    }
    void loop()                    
    {
        Client client = server.available();
        valPote1=analogRead(pinPote1);

  
        if (client)
        {
            server.write(valPote1);
        }
        delay(1000);
    }





  
« Last Edit: April 29, 2012, 05:53:44 pm by coleoptero » Logged

0
Offline Offline
Jr. Member
**
Karma: 5
Posts: 72
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si lo que quieres es enviar un entero tienes que convertirlo a lo que entiende Server.write().

Fíjate que la librería Serial si que permite enviar enteros por el puerto serie, para ello va dividiendo entre diez y almacenando en una array de bytes.

Code:
void SoftwareSerial::printNumber(unsigned long n, uint8_t base)
{
  unsigned char buf[8 * sizeof(long)]; // Assumes 8-bit chars.
  unsigned long i = 0;

  if (n == 0) {
    print('0');
    return;
  }

  while (n > 0) {
    buf[i++] = n % base;
    n /= base;
  }

  for (; i > 0; i--)
    print((char) (buf[i - 1] < 10 ? '0' + buf[i - 1] : 'A' + buf[i - 1] - 10));
}

Se puede usar en tu caso de la siguiente manera:
Code:
void imprimeEntero(int dato)
{
  //Variables auxiliares, un contador y el array de char
  unsigned char buf[8 +sizeof(int)];
  unsigned long i=0;
  //Primero mirar si es negativo
  if (dato<0){
    server.write('-');
    dato = -dato;
  }
  if (dato==0){
    server.write('0');
    return;
  }
  while (dato > 0) {
    buff[i++] = n % 10; //el resto de dividir entre 10;
    dato = dato / 10;
  }
  //y ahora lo sacamos todo de golpe
  for(; i>0; i--){
    server.write((char) (buf[i-1]+'0')); 
  }
}

Añade esto antes del loop() y cambia server.write(valPote1); por imprimeEntero(valPote1);

Espero que te sirva.
Logged

Pages: [1]   Go Up
Jump to: