[Solucionado] Ayuda, no compilar código con librerías avr/pgmspace.h

Buenas amigos

Estoy intentando estudiar un poco esto de las ondas seno con arduino y buscando por el foro muchos de ustedes hace referencia a estas paginas.

http://electronics-diy.com/arduino-sinewave-generator.php

Que al fin y al cabo usan el mismo Codigo.

El problema que tengo es que copie el Codigo tal cual, pero no me compila, me da error en esta linea

#include "avr/pgmspace.h"


// table of 256 sine values / one sine period / stored in flash memory
PROGMEM  prog_uchar sine256[]  = {
  127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,
  242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,
  221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,
  76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,
  33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124

};

El error me dice: sketch_apr29a:114: error: 'sine256' was not declared in this scope

Y no veo donde esta el error, pensé que era de la librería avr, pero he buscado en el foro y esa librería ya viene por defecto en el IDE.

Me podéis ayudar a saber por que no me compila.

Gracias

Han pasado casi 10 años desde que se publicó ese artículo con lo que el IDE se ha actualizado bastante. Al menos en el tratamiento de PROGMEM.

Pero no es mucho problema cambia el tipo del array de seno por esto:

// table of 256 sine values / one sine period / stored in flash memory
const uint8_t sine256[] PROGMEM  = {
  127, 130, 133, 136, 139, 143, 146, 149, 152, 155, 158, 161, 164, 167, 170, 173, 176, 178, 181, 184, 187, 190, 192, 195, 198, 200, 203, 205, 208, 210, 212, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 234, 236, 238, 239, 240,
  242, 243, 244, 245, 247, 248, 249, 249, 250, 251, 252, 252, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, 253, 253, 253, 252, 252, 251, 250, 249, 249, 248, 247, 245, 244, 243, 242, 240, 239, 238, 236, 234, 233, 231, 229, 227, 225, 223,
  221, 219, 217, 215, 212, 210, 208, 205, 203, 200, 198, 195, 192, 190, 187, 184, 181, 178, 176, 173, 170, 167, 164, 161, 158, 155, 152, 149, 146, 143, 139, 136, 133, 130, 127, 124, 121, 118, 115, 111, 108, 105, 102, 99, 96, 93, 90, 87, 84, 81, 78,
  76, 73, 70, 67, 64, 62, 59, 56, 54, 51, 49, 46, 44, 42, 39, 37, 35, 33, 31, 29, 27, 25, 23, 21, 20, 18, 16, 15, 14, 12, 11, 10, 9, 7, 6, 5, 5, 4, 3, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16, 18, 20, 21, 23, 25, 27, 29, 31,
  33, 35, 37, 39, 42, 44, 46, 49, 51, 54, 56, 59, 62, 64, 67, 70, 73, 76, 78, 81, 84, 87, 90, 93, 96, 99, 102, 105, 108, 111, 115, 118, 121, 124

};

En resumidas cuentas:

  • PROGMEM trabajaba con sus propios tipos que eran de la forma "prog_uxxx", ahora puede trabajar con cualquier tipo predefinido, con sus limitaciones.
  • El array debe se declarado como constante usando const.
  • La directiva progmem se puede colocar en varios sitios, pero lo recomendable es como la he colocado en el código (detras de los corchetes).

En la referencia tienes más información sobre como usar PROGMEM.

Muchas Gracias por la ayuda y explicación

Funciona perfecto.

Moderador
@joseGD, por favor edita los enlaces que has posteado.
Nada se pega como simple texto en este foro. Siempre hay una etiqueta que agregarle para que se visualice correctamente.
Gracias.

Lee las Normas del foro