Go Down

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

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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy