Go Down

Topic: Arduino 1.0, errores (Read 2963 times) previous topic - next topic

fm

Se abren sin ningún problema. Hay algunas cosas que han cambiado, como #include "Arduino.h", quizás es lo que mas afecte a los sketch. Si tienes librerías propias o heredadas, es otra historia ya que han cambiado algunas clases del core y de las librerías standard, un ejemplo es Wire, Stream,... para controlar el bus i2c (que ahora lo hacen mejor).
El pequeño hipo que han descubierto en este hilo y poco mas.
Eso no quiere decir que algo mas haya cambiado de cara a los sketch.
   

Cheyenne

Gracias fm, entonces esta misma tarde me actualizo.
http://cuadricopterodiyarduino.blogspot.com/

Cheyenne

Pues he tenido un poco de mala suerte... Estoy con mi proyecto de un cuadricóptero y tengo el IMU 9 DOF Razor. Lo tenía con el código que adapté de la tarjeta Mongoose (de haber sabido antes de ella la habría comprado en lugar de la Razor). Así que tengo que cambiar varias cosas. Hago un pequeño resumen de las cosas que he visto que cambian al actualizarse a Arduino 1.0 por si le sirve a alguien.

Como mi código tiene #include "WProgram.h" tengo que cambiarlo por #include "Arduino.h". Concretamente si en tu código tenías cualquiera de las siguientes librerías:

#include "wiring.h"
#include "WProgram.h"
#include "WConstants.h"
#include "pins_arduino.h"

ahora hay que incluir #include "Arduino.h". He encontrado una recomendación que hacen si quieres que tu código siga compilando en versiones anteriores. Es:

Code: [Select]

#if ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif


La librería Wire.h cambian las instrucciones:

Wire.send() cambia a Wire.write()
Wire.receive() cambia a Wire.read()

En mi caso también he tenido que cambiar estas instrucciones dentro de una librería que utiliza el código de Mongoose (la libraría del HMC5883L, el magnetómetro).

Al cambiar la librería Wire.h al parecer tampoco funciona igual la instrucción Wire.write() (antes Wire.send()). La explicación no la entiendo muy bien, tal vez alguien lo pueda aclarar, pero es algo relativo a que hay que especificar el tipo para argumentos constantes de modo que por ejemplo:

write(0x10) tiene que ser sustituido por write((byte)0x10)

Debo decir que mi código Mongoose está plagado de instrucciones del tipo Wire.write(0x10), no las he cambiado y aparentemente me lo ha compilado bien. Sólo ha habido una instrucción de Wire.h, concretamente Wire.write(0) que no la compila y no he sabido cómo sustituirla. ¿Alguien puede indicarme algo? Por el momento lo que he hecho es anularla. No debía ser una instrucción muy importante porque me ha compilado y parece que funciona  :P

Siguiendo con mi caso me hice un pequeño protocolo para enviar por puerto serie los valores de los ángulos desde el Razor al Arduino UNO. Para ganar velocidad básicamente lo que hice fue multiplicar los ángulos en grados por 100, convertirlos a unsigned int y enviar los dos bytes que lo componen. Pues bien, esto ahora tampoco funciona. ¿Por qué? Pues porque ha cambiado la forma en la que funcionan print() y println(). Antes print(byte) imprimía el byte, ahora imprime el valor numérico del byte como caracteres ASCII. Esto afecta fundamentalmente a Serial, Ethernet y Wire. Solución:

Sustituir Serial.print(byte) por Serial.write(byte)

Lo he sustituido en mi código... et voilà, ¡mi código funcionando!

La explicación de los cambios con la nueva versión que me ha ayudado podéis verla completa en http://blog.makezine.com/archive/2011/12/arduino-1-0-is-out-heres-what-you-need-to-know.html

Si alguien ha leído hasta aquí que me disculpe por el rollo... Espero que le pueda servir a alguien.
http://cuadricopterodiyarduino.blogspot.com/

chiva

Code: [Select]
Wire.write((uint8_t) 0x00);

Es un bug que arreglarán para la siguiente versión
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Cheyenne

Gracias chiva, así ha compilado sin problema.
http://cuadricopterodiyarduino.blogspot.com/

Go Up