Buen dia para los lectores, hoy les pdio su ayuda para comprender como retornar una variable, (int, char float ...) de un fichero a la pestaña .ino ; me explico tengo un ejemplo muy basico de una calculadora, la cual en la pestaña principal hago un llamdo a otra pestaña llamada suma, efectivamente logro entrar a ese punto sin embargo no logro comprender como sacar el resultado de esa suma y traerlo a la pestaña .ino (principal), gracias por su ayuda
calc.ino
# include "Calc.h"
void setup() {
Serial.begin(9600);
suma();
//Serial.println(); // me gustaria imprimir en este punto el resultado
}
void loop() {
suma();
}
Calc.h
void suma ();
Calc.cpp
# include <Arduino.h>
int num1 = 5;
int num2 = 10;
int result;
void suma (){
result = num1+num2;
Serial.println(result);
return result;
}
Disculpame la ignorancia, entiendo que del primer fragmento en Calc.cpp donde se realiza la suma, se debe cambiar de void a int porque void no permite devolver nada, del segundo fragmento entiendo que en int suma declaro las variables que seria una segunda opcion, y en el tercer fragmento en el void loop (Calc.ino ) en int r asigno los valores que serian 33 y 9 a num1 y num2 respectivamente, si comprendi bien, siguo presentando error
Realice los cambios que me dijo en Calc.cpp y cuando le asigno valores a las variables me dice hay muchos argumentos y cuando se los retiro me dice void value not ignored as it ought to be
Ok, quiero tambien agradecerle por tomarse el tiempo de ayudarme muchas gracias.
Calc.ino
# include "Calc.h"
void setup() {
Serial.begin(9600);
suma();
//Serial.println();
}
void loop() {
int r = suma();
}
Calc.cpp
# include <Arduino.h>
int num1 = 5;
int num2 = 10;
int result;
int suma (){
result = num1+num2;
//Serial.println(result);
return result;
}
Calc.h
void suma (); // -> int suma();
Acabo de darme cuenta que en calc.h lo tenia como void y tambien debia cambiarlo a int como me recomendo en Calc.cpp, ahora si devuelve la variable jajaja en verdad muchas gracias por su ayuda, el objetivo era aprender a mover variables entre ficheros, para organizar mejor el codigo ejemplo de eso seria hacer la medicion de distancia en un fichero a parte y ejecutar acciones con un servo o hacer otra en otro fichero, mil y mil gracias
Bueno creo que @J-M-L ya te respondió pero .. hice esto para que quede mas claro.
El error estaba en suma() dentro del setup que no tenía parámetros.
Este es stu archivo Calc.ino no Calc.cpp como tu has escrito.
# include "Calc.h"
void setup() {
Serial.begin(9600);
//Serial.println(); // me gustaria imprimir en este punto el resultado
}
void loop() {
int r = suma(33,9);
Serial.print("La suma es: ");
Serial.println(r);
Serial.print("La suma es: ");
Serial.println(suma(25, 6));
}
Y este es Calc.h
int suma (int a, int b){
int sum = a+b;
return sum;
}
verifique el ejemplo de wokwi en la publicación #9
además, si está utilizando un UNO, recuerde que int puede representar solo los números entre -32768 y +32767. entonces, si agrega dos números, podría desbordarse y posiblemente obtener un número negativo
➜
Tengo un pregunta final, si me lo permiten, es que no me quedo claro la diferencia de los archivos .cpp a los .h ya que investigue y no encontre mucho al respecto y en videos que vi la gente usa ambos y en los ejemplos (es el mismo como en 4 videos) usan este metodo pero veo que puedo hacer la operacion en el .h sin usar necesariamente un .cpp, es correcto?
Lo que te hizo @J-M-L responde mejor a tu inquietud.
Tu lo estas haciendo como una librería externa y yo pensé al verlo que se trataba de un .ino al tener setup() y loop().
el .h es la declaración de lo que se comparte (conocido fuera de la implementación) (h para "header") y el .cpp es la implementación en sí, donde se escribe el código y se asigna la memoria para las variables.
debe leer la documentación en una compilación separada, probablemente sea un poco avanzado para lo que está haciendo (pero es bueno estar interesado en él)
Si lo era, y si @J-M-L respondio, en verdad muchas gracias @J-M-L por su ayuda, como mostre en el principio tenia 3 archivos y mencione la extension de los 3; el principal .ino y en ese tenia un llamado a un .h y alli crei que debia (por orden) hacer el llamado de .cpp donde hacia la operacion en este ejemplo suma, pero veo que al parecer puedo hacer la operacion directamente en el .h sin usar el .cpp por lo que me surgio la duda de para que se usan esas dos extensiones; el objetivo de este ejemplo muy basico o inquetud era solamente aprender a mover o retornar entre ficheros variables o resultados de variables.