Go Down

Topic: Arduino convertir char a integer (Read 3 times) previous topic - next topic

cuestasergio

Jan 27, 2011, 10:28 pm Last Edit: Apr 30, 2012, 12:53 am by coleoptero Reason: 1
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: [Select]
#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);
   }






 

xlopez

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: [Select]
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: [Select]

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.

Go Up