TDS Gravity zip no me instala

Hola!
De testeo intentaba instalar este zip en mi arduino uno
link zip
para comprobar
tarjeta TDS

al bajarme el zip he visto que tengo que cambiar un nombre de la carpeta si no tampoco se instala da error
GravityTDS-master.zip
solo entrar en la carpeta cambio -->"GravityTDS-master" por "GravityTDS" para que detecte el HEADER, pero se queda en que no encuentra la librería de propiedades...
Captura 1
aquí ya no se que hacer?
ha alguien le ha pasado
hago algo mal ?
hay otra manera de incluirlo sin zip?
gracias por vuestro tiempo.

Puedes intentar copiarla a mano.

Si estas en Windows, copia la carpeta GravityTDS en "Documentos/Arduino/Libraries".

Muchas Gracias!
no caí en hacerlo así
hecho!!!
voy a pelearme a ver si hago que funcione

Jamas tuve que cambiar un archivo que incluia Master para que el IDE lo reconozca. Eso lo pensaba al comienzo pero el sistema funciona bien si sigues los pasos

image

Ahora voy a probarlo y te comento.
Bueno, tal como te he indicado. Ningun problema

image
Mi version de IDE es la 1.8.14 pero eso funciona bien desde hace mucho.

Hola @Surbyte ! no tenia actualizado el IDE, me soluciono el tema @victorjam, ya tengo el proyecto casi terminado, me falta que los valores en el TFT, no se me sobrescriban, de hecho, ya no se sobrescriben hago un sobrescribir en negro, pero los valores parpadean, queda un poco feo, quedaría mejor que se actualizasen sin parpadear, he investigado un poco en el foro y alguna solución he visto, pero algo no hago bien o no se ejecutarlo apropiadamente, seguiré probando :slight_smile: gracias por la ayuda

Para evitar sobreescrituras puedes usar sprintf.
Busca como usarlo pero básicamente te permite imprimir con formato.
Si quieres imprimir un entero con 3 dígitos pues todo se presentará asi, si quieres algo con decimales es mas díficil presentarlo porque el UNO y/o NANO no tienen soporte de punto flotante habilitado para sprintf pero se puede resolver con un truco.
Otros Arduinos mas potentes y los ESP y SMT32 no tienen este problema.

Un ejemplo con enteros

  int numero = 100;
  char buffer[20];
  sprintf(buffer, "Dato = %3d", numero);
  Serial.println(buffer); // esto imprime cualquier número de 0 a 999 siempre justificado a derecha

y hay soluciones para floats %f, para string %s, para hexadecimales %x, etc, etc.

Ops entonces ese es el problema, si que hay decimales : / y la placa es un UNO.
lo tengo con "dtostrf" consigo los decimales pero parpadeando, con sprintf no me funciona lo estaba probando ahora.
que truco hay para este caso?
gracias!

El parpadeo no tiene nada que ver con dtostrf(), ahí hay otro problema pero sin ver el código...

Saludos

Hola @anon90500195 , el parpadeo lo genero yo para que no se sobreimpriman los valores, escribo y fundo a negro

dtostrf(tdsValue,4,2,cdv);
tft.setCursor(74, 50);                          // posición en tft
tft.setTextColor(ST7735_GREEN, ST7735_BLUE);// color texto y fondo
tft.println(cdv);                          // print en tft
dtostrf(tdsValue,4,2,cdv);
tft.setCursor(74, 50);                          // posición en tft
tft.setTextColor(ST7735_BLACK, ST7735_BLACK);// color texto y fondo
tft.println(cdv);                          // print en tft

es la única manera que he encontrado que no se me sobrescriban los valores, escribo y fundo a negro
he probado con sprintf pero al tener decimales no furulla : P
saludos!

Varios errores pero mejor mira como se hace correctamente.

float tdsvalue = 3.14;
char cdv[4];
char buffer[20];

void setup() {
  Serial.begin(115200);
  dtostrf(tdsvalue,4,2,cdv);
  sprintf(buffer, "%s", cdv );
  Serial.println(buffer);    
}

void loop() {
  // put your main code here, to run repeatedly:
}

Resumiendo, sprintf termina guardando todo un paquete de datos formateados en un array de caracteres que yo llamé buffer de longitud 20 pero puede ser menos en este caso.
Podrias por ejemplo poner

sprintf(buffer, "Temperatura: = %s", cdv );
char cdv[4];

cdv debería tener 5 elementos.

La solución de @laghzer0 (imprimir directamente cdv) también es válida salvo que no puede formatear la salida.

Se deslizó un error con el [4].

Este código usando Platformio permite usar sprintf sin dtostrf

#include <Arduino.h>

double tdsvalue = 3.14;
char cdv[5];
char buffer[20];

void setup() {

  Serial.begin(115200);
  dtostrf(tdsvalue,4,2,cdv);
  sprintf(buffer, "%s", cdv );
  Serial.println(buffer);  
  Serial.println("Ahora gracias a Platformio usando punto floatnte");  
  sprintf(buffer, "%4.2f", tdsvalue );
  Serial.println(buffer); 
}

void loop() {
  // put your main code here, to run repeatedly:
}

Esta es la salida en el monitor serie

--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Miniterm on COM9  115200,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
3.14
Ahora gracias a Platformio usando punto floatnte
3.14

Para ello hay que agregar en Platformio.ini las maravillosa línea

build_flags = -Wl,-u,vfprintf -lprintf_flt -lm

Acá todo el archivo Platformio.ini que uso para el nano ATmega328 equivalente al Old Bootloader del IDE.

[env:nanoatmega328]
platform = atmelavr
board = nanoatmega328
framework = arduino
monitor_speed = 115200
build_flags = -Wl,-u,vfprintf -lprintf_flt -lm

Insisto.
En Platformio con solo una línea agregando comandos para el compilador se puede incluir la libreria de punto flotante en los Arduinos cualquiera sea. Hay que ver con detalle como hacerlo en cada caso. No es lo mismo en DUE, MKR, etc.
La ventaja es que para quienes usamos sprinf nos permite trabajar con mucha comodidad.
En ESP8266/32 y Blue Pill esto es directo porque tienen una instrucción printf(formato,.....) que hace directamente lo que el sprintf.

Hey muchas gracias @Surbyte y @anon90500195 ahora le meto un repaso, solo decir que soy aficionado, no es ningún trabajo de final de curso ni nada jajajaja, por eso hay tanto fallo.

de hecho esto lo probé ayer

dtostrf(tdsvalue,4,2,cdv);
sprintf(buffer, "%s", cdv );

no me dio resultado usando sus respectivos CHAR
siguen sobreponiéndose

dtostrf(phValue,4,2,phv);
sprintf( phvv, "%s", phv); ///ph print
tft.setCursor(3, 50);                          // posición en tft
tft.setTextColor(ST7735_GREEN, ST7735_BLUE);// color texto y fondo
tft.println( phvv );                     // print en tft

se queda así solo probado con ph

con mi código
VID20220420193625
queda algo así
saludos y gracias

Me recomiendas mejor esas tarjetas?
ESP8266/32 y Blue Pill

y porque no pones el código completo para ver que has usado porque acá hay cosas que no se ven

dtostrf(phValue,4,2,phv);
sprintf( phvv, "%s", phv); ///ph print
tft.setCursor(3, 50);                          // posición en tft
tft.setTextColor(ST7735_GREEN, ST7735_BLUE);// color texto y fondo
tft.println( phvv );                     // print en tft

Como has definido phvv y phv?
Todo el código por favor.

Hola @surbyte con su respectivo char, no?

#define SensorPin A0         //  entrada ph
unsigned long int avgValue;  //ALMACENAMOS EL VALOR QUE NOS DEVUELVE EL SENSOR.
char phv[5];///buffer ph
float b;
int buf[10], temp;
char phvv[5];

void setup() {
///lineas y recuadros en el tft, ahorro info no útil)
}
void loop() {
  for (int i = 0; i < 10; i++)  //COGEMOS 10 MUESTRAS DEL SENSOR PARA EVALUARLAS.
  {
    buf[i] = analogRead(SensorPin);
    delay(10);
  }
  for (int i = 0; i < 9; i++)  //REALIZAMOS EL PROCESO DE TOMA DE DATOS.
  {
    for (int j = i + 1; j < 10; j++) {
      if (buf[i] > buf[j]) {
        temp = buf[i];
        buf[i] = buf[j];
        buf[j] = temp;
      }
    }
  }
 avgValue = 0;
 for (int i = 2; i < 8; i++)  //RECOGEMOS DOS DATOS OBTENIDOS.
 avgValue += buf[i];
 float phValue = (float)avgValue * 5.0 / 1024 / 6;  //CONVERTIMOS EN MILIVOLTIOS.
 phValue = 3.5 * phValue;                           //CONVERTIMOS MILIVOLTIOS EN PH.
 phValue = phValue - 11.0;                           // EN ESTA LINEA el +0,0 REPRESENTA UNA CALIBRACIÓN POR CODIGO.AJUSTE
dtostrf(phValue,4,2,phv);
sprintf( phvv, "%s", phv); ///ph print
tft.setCursor(3, 50);                          // posición en tft
tft.setTextColor(ST7735_GREEN, ST7735_BLUE);// color texto y fondo
tft.println(phvv);                     // print en tft
}

seria esto lo que afecta a esta impresión, no pongo todo ya que es muy extenso y estoy de pruebas con varias cosas.
saludos!

No probaste con ampliar el buffer phvv? tienes 5 bytes para phv y 5 para phvv
Yo en el ejemplo use 20. El hecho de usar 20 no significa que los use pero le doy margen para que use lo necesario.
Prueba con phvv[10]

Probado con 20 compañero, sigue machacandose :stuck_out_tongue:
creía que ese número era proporcional a los espacios necesitados según caracteres, o entendí mal entonces
me he cogido un par de tarjetas ESP8266/32 , ocupan menos espacio
mirare lo de platformIO
saludos!

Si, depende de la cantidad de caracteres + 1 para el fin de cadena.
Si vas a convertir el número 123.45 necesitas un buffer de al menos 7 caracteres para almacenar
'1', '2', '3', '.', '4', '5', '\0'.

Saludos

NO espera no te compliques mas las cosas porque cada micro tienen sus peculiaridades.
Resolvamos esto y si quieres luego mejorarlo con ESP será otro problema.