Calcular litros de agua en porcentaje según altura

Lo tengo en unidades de metros.

Quiero calcular un cilindro como este, su volumen.
material-nePaZ7TY.png


h = altura.
r = radio.
v = volumen.

Aquí hice un pequeño programa en la consola C# que calcula solo introduciendo dos valores, el radio del cilindro o depósito de agua y la altura.
C#:
using System;

namespace namespace_Calculo_cilindro_consola_02_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Cálculo geométrico cilindro - C# 2019";
            Console.SetWindowSize(50, 25);

            // Variables.
            double Pi = 3.14;
            double radio = 0;
            double altura = 0;
            double areaLateral = 0;
            double areaTotal = 0;
            double volumen = 0;
            double litros = 0;

            Console.WriteLine("===== Área lateral =====");
            Console.Write("Introduce el radio en m.: ");
            radio = double.Parse(Console.ReadLine());
            Console.Write("Introduce la altura en m.: ");
            altura = double.Parse(Console.ReadLine());

            // Cálculo área lateral.
            areaLateral = 2 * Pi * radio * altura;

            Console.WriteLine("Área lateral = 2 x Pi x radio x altura.");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Área lateral: {0} m^2. (Metros cuadrados). \n", areaLateral);

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("===== Área total =====");

            // Cálculo área Total.
            areaTotal = areaLateral + 2 * (Pi * (radio * radio));

            Console.WriteLine("Área total = Áreal lateral + 2 x (Pi x r^2)");
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("Área total = {0} m^2. \n", areaTotal);

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("===== Volumen =====");
            Console.WriteLine("Volumen = Pi x radio^2 x altura");

            // Cálculo volumen.
            volumen = Pi * (radio * radio) * altura;

            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("Volumen = {0} m^3. (Metros cúbicos). \n", volumen);

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("===== Litros =====");
            Console.WriteLine("Litros = Volumen * 1000");
            Console.WriteLine("Litros = {0} m^3 * 1000", volumen);

            // Cálculo litros.
            litros = volumen * 1000;

            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("Litros = {0}", litros + " L.\n");

            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.WriteLine("FIN DE PROGRAMA. Pulse cualquier tecla para salir.");
            // Pulse cualquier tecla para salir.
            Console.ReadLine();
        }
    }
}
captura-png.192946


Me falta hacer una fórmula que no se hacer sobre saber que cantidad de litros tengo en este depósito de agua o cilindro. Por ejemplo, ya que la altura es de 0 a 2 metros, quiero saber que si cambio la altura del agua, por ejemplo que está a 0.7 metros, que me muestre el porcentaje en %. Está claro que si está el nivel del agua a 2 metros de altura que es la máxima, será el 100 %.

1. Si la altura está en 0.7 metros. ¿Qué porcentaje muestra?

2. ¿Qué cantidad de Litros de agua hay cuando está el nivel de agua a 0.7 metros?

Solo me falta saber estas dos cosas en papel. Luego lo transformo en C#.

Saludos.
 

Adjuntos

  • Captura.PNG
    Captura.PNG
    16.7 KB · Visitas: 128
Me falta hacer una fórmula que no se hacer sobre saber que cantidad de litros tengo en este depósito de agua o cilindro. Por ejemplo, ya que la altura es de 0 a 2 metros, quiero saber que si cambio la altura del agua, por ejemplo que está a 0.7 metros, que me muestre el porcentaje en %.
🤯 🤯 🤯 🤯
Mucha programación y muy poca matemática...
Vol=altura x superficie
Si la superficie es constante (y lo es)--> Vol= altura x K
Porcentaje=Vol_actual x 100 / Vol_maximo
Porcentaje= altura_actual x K x 100 / (altura_max x K) --> Porcentaje= (altura_actual / altura_max) * 100
Para tu ejemplo:
Porc= 0.7 * 100 / 2=35%
 
C#:
using System;

namespace namespace_Calculo_cilindro_consola_02_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Cálculo geométrico cilindro - C# 2019";
            Console.SetWindowSize(55, 30);

            // Variables.
            double Pi = 3.14;
            double radio = 0;
            double altura = 0;
            double areaLateral = 0;
            double areaTotal = 0;
            double volumen = 0;
            double litros = 0;
            double alturaAgua = 0;
            double resultadoPorcentaje = 0;
            double mitadBarra = 0;

            Console.WriteLine("===== Área lateral =====");
            Console.Write("Introduce el radio en m.: ");
            radio = double.Parse(Console.ReadLine());
            Console.Write("Introduce la altura en m.: ");
            altura = double.Parse(Console.ReadLine());

            // Altura del agua.
            Console.Write("Altura del agua máxima es de {0}: ", altura);
            alturaAgua = double.Parse(Console.ReadLine());

            // Cálculo área lateral.
            areaLateral = 2 * Pi * radio * altura;

            Console.WriteLine("Área lateral = 2 x Pi x radio x altura.");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Área lateral: {0} m^2. (Metros cuadrados). \n", areaLateral);

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("===== Área total =====");

            // Cálculo área Total.
            areaTotal = areaLateral + 2 * (Pi * (radio * radio));

            Console.WriteLine("Área total = Áreal lateral + 2 x (Pi x r^2)");
            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.WriteLine("Área total = {0} m^2. \n", areaTotal);

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("===== Volumen =====");
            Console.WriteLine("Volumen = Pi x radio^2 x altura");

            // Cálculo volumen.
            volumen = Pi * (radio * radio) * altura;

            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("Volumen = {0} m^3. (Metros cúbicos). \n", volumen);

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("===== Litros =====");
            Console.WriteLine("Litros = Volumen * 1000");
            Console.WriteLine("Litros = {0} m^3 * 1000", volumen);

            // Cálculo litros.
            litros = volumen * 1000;

            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("Litros = {0}", litros.ToString("N2") + " L.\n");

            Console.ForegroundColor = ConsoleColor.Gray;

            // Cálculo porcentaje en % del litro de agua.
            resultadoPorcentaje = alturaAgua * (100.00 / altura);


            // Dibujo de la barra.
            Console.WriteLine();
            Console.WriteLine("0 %                     50 %                   100 %");
            Console.WriteLine("┌────────────────────────┬───────────────────────┐");
            Console.ForegroundColor = ConsoleColor.Yellow;


            // Mitad de la barra para que no sea muy grande en la pantalla.
            mitadBarra = resultadoPorcentaje / 2;

            if (mitadBarra > 50)
            {
                mitadBarra = 50;
            }

            // Rellenar la barra.
            for (int i = 1; i <= mitadBarra; i++)
            {
                Console.Write("█");
            }

            // Si llega a 100 se pone el # en rojo.
            if (resultadoPorcentaje > 100)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write("#");
            }

            Console.SetCursorPosition(0, 24);
            Console.WriteLine("Porcentaje: " + resultadoPorcentaje.ToString("N0") + " %.");

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("\n\n\nFIN DE PROGRAMA. Pulse cualquier tecla para salir.");
            
            // Pulse cualquier tecla para salir.
            Console.ReadLine();
        }
    }
}

Me funciona, tienes razón. Muchas gracias mi muy distinguido amigo.

captura-png.192950


Hay que indicarle al programa la altura máxima del depósito y luego donde tiene el nivel del agua.

Luego paso todo esto en un LCD de Arduino.

Gracias.
 

Adjuntos

  • Captura.PNG
    Captura.PNG
    21.2 KB · Visitas: 110
¿Por que defines pi con doble precisión con solo dos decimales? Es como comprar un Ferrari V12 de 600HP y remolcarlo con un ciclomotor de 2 HP.
Pi deberías de declararlo const ya que es constante.
También lo puedes declarar con #define que ocupaenos memoria RAM.

Si usas Arduino te vale con float, estás gastando absurdamente tiempo de CPU y memoria. Si además le pones solo dos decimales más absurdo aún.




Perdón , no sé de dónde saqué que era arduino.

Vale en un PC te sobra de todo dos veces, lo mismo te da double que cuádruple...
Pero un poco absurdo si que es pedir más precisión para usar menos
 
Porque quiero adaptarlo a Arduino con el tiempo y indicarlo en un LCD de 20x4.

A parte de eso, es bueno que lo recuerdes.

Se puede poner como dices que es mejor.

const double PI = 3.1415926535897931;

Como todavía estoy traquinando, no lo dejé la versión acabada, se va viendo estos errores como dices. En C# se usa también esto.
Math.PI

Usé 3.14 con solo dos decimales porque es el ejemplo exacto que pusieron los tutoriales en Internet, solo lo convierto de las matemáticas al PC.


Saludos.
Una cosa que no me cuadra.

Altura de un tubo de 2 m.
Su radio es 0.016 m.
Litros total que cabe en ese tubo si está lleno es de 1.61 L.
El porcentaje sería un 100 % Litros de agua.

Independientemente del nivel de agua que está al nivel a 2 m. El tubo es de 2 m. El nivel de agua por ejemplo lo pongo a 0.7 m.

Si la altura del nivel de agua es de 0.7 m. Entonces el porcentaje de agua que hay es un 35 %.

¿Cuántos Litros de agua hay con el 0.7 metros de altura?

Saludos.
 
Última edición:
Ya todo resuelto.
Me funciona todo tal como lo quiero. Sin embargo haré una versión menos liosa a la hora de mostrar datos.

C#:
using System;

namespace namespace_Calculo_cilindro_consola_02_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Cálculo geométrico cilindro - C# 2019";
            Console.SetWindowSize(55, 35);

            // Variables.
            const double Pi = 3.14;
            double radio = 0;
            double altura = 0;
            double areaLateral = 0;
            double areaTotal = 0;
            double volumen = 0;
            double litros = 0;
            double nivelAgua = 0;
            double resultadoPorcentaje = 0;
            double resultadoLitros = 0;
            double volumenLitros = 0;
            double mitadBarra = 0;
            int cantidadTubos = 0;
            double cantidadTubosLitros = 0;

            Console.WriteLine("===== Área lateral =====");
            Console.Write("Introduce el radio en m.: ");
            radio = double.Parse(Console.ReadLine());
            Console.Write("Introduce la altura en m.: ");
            altura = double.Parse(Console.ReadLine());
            Console.Write("Introduce altura del agua máxima es de {0}: ", altura);
            nivelAgua = double.Parse(Console.ReadLine());
            Console.Write("Introduce cantidad de tubos: ");
            cantidadTubos = int.Parse(Console.ReadLine());

            // Cálculo área lateral.
            areaLateral = 2 * Pi * radio * altura;

            Console.WriteLine("Área lateral = 2 x Pi x radio x altura.");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Área lateral: {0} m^2. (Metros cuadrados). \n", areaLateral);

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("===== Área total =====");

            // Cálculo área Total.
            areaTotal = areaLateral + 2 * (Pi * (radio * radio));

            Console.WriteLine("Área total = Áreal lateral + 2 x (Pi x r^2)");
            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.WriteLine("Área total = {0} m^2. \n", areaTotal);

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("===== Volumen =====");
            Console.WriteLine("Volumen = Pi x radio^2 x altura");

            // Cálculo volumen.
            volumen = Pi * (radio * radio) * altura;

            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("Volumen = {0} m^3. (Metros cúbicos). \n", volumen);

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("===== Litros =====");
            Console.WriteLine("Litros = Volumen * 1000");
            Console.WriteLine("Capacidad depósito en Litros = {0} m^3 * 1000", volumen);

            // Cálculo litros.
            litros = volumen * 1000;

            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("Litros máximo de un cilindro o tubo = {0}", litros.ToString("N2") + " L.\n");

            Console.ForegroundColor = ConsoleColor.Gray;

            // Cálculo porcentaje en % del litro de agua.
            resultadoPorcentaje = nivelAgua * (100.00 / altura);

            // Cálculo litros de agua.
            volumenLitros = Pi * (radio * radio) * nivelAgua;
            resultadoLitros = volumenLitros * 1000;

            // Dibujo de la barra.
            Console.WriteLine();
            Console.WriteLine("0 %                     50 %                   100 %");
            Console.WriteLine("┌────────────────────────┬───────────────────────┐");
            Console.ForegroundColor = ConsoleColor.Yellow;


            // Mitad de la barra para que no sea muy grande en la pantalla.
            mitadBarra = resultadoPorcentaje / 2;

            if (mitadBarra > 50)
            {
                mitadBarra = 50;
            }

            // Rellenar la barra.
            for (int i = 1; i <= mitadBarra; i++)
            {
                Console.Write("█");
            }

            // Si llega a 100 se pone el # en rojo.
            if (resultadoPorcentaje > 100)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write("#");
            }

            Console.SetCursorPosition(0, 25);
            Console.WriteLine("\nPorcentaje: " + resultadoPorcentaje.ToString("N0") + " %.");
            Console.WriteLine("\nLitros de agua: " + resultadoLitros.ToString("N2") + " L.");

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.CursorVisible = false;

            // Cálculo litros por cantidad de tubos
            cantidadTubosLitros = cantidadTubos * resultadoLitros;

            // Cantidad de tubos sin contar la base conectada, solo tubos independiente.
            Console.WriteLine("Cantidad de Litros total por {1} tubos: {0}", cantidadTubosLitros.ToString("N2") + " L.", cantidadTubos);

            Console.WriteLine("\n\n\nFIN DE PROGRAMA. Pulse cualquier tecla para salir.");
            
            // Pulse cualquier tecla para salir.
            Console.ReadLine();
        }
    }
}
 
Buenos días.

Les dejo uno fácil y entendinble. Solo calcula el volumen, litros de agua en un tubo, las dimensiones, cantidad de tubos con sus litros totales. Voy a intentar averiguar si en las LD se puede introducir datos como lo hace la consola.

captura-png.192994


Puedes probar el programa por ustedes mismos. Está hecho en C#, si quieren, lo puede adaptar en otros lenguajes pero me lo dicen.

Saludos.
 

Adjuntos

  • Captura.PNG
    Captura.PNG
    11.9 KB · Visitas: 88
  • Calculo_cilindro_consola_03_cs.zip
    2.8 KB · Visitas: 4
Insisto en que con float te funcionará exactamente igual y funcionará el doble de rápido y consumirá la mitad de ram.
En un PC te da lo mismo, en un Arduino es posible que te quedes sin memoria a poco que añadas.
Total, con tres o cuatro decimales te sobra, no tiene sentido hablar de microlitros.
 
Cierto.

C#:
            // Variables.
            const double Pi = 3.14;
            float radio = 0;
            float altura = 0;
            float volumen = 0;
            float litros = 0;
            float nivelAgua = 0;
            float resultadoPorcentaje = 0;
            float resultadoLitros = 0;
            float volumenLitros = 0;
            float mitadBarra = 0;
            int cantidadTubos = 0;
            float cantidadTubosLitros = 0;
            float totalLitros = 0;


Pi 3.14 es double.


No lo hacía antes por el tema de las connversiones. No se si se puede hacer con Arduino, en C# si.


Al final se queda así y funciona el programa en C#.
C#:
            // Variables.
            const double Pi = 3.14;
            float PI = Convert.ToSingle(Pi);
            float radio, altura, volumen, litros, nivelAgua, resultadoPorcentaje,
                resultadoLitros, volumenLitros, mitadBarra, cantidadTubosLitros,
                totalLitros;
            int cantidadTubos;

En Arduino no lo he probado si funciona algo similar como en C#.

¿Te gusta más así?

Saludos.
 
Hola de nuevo.

Les dejo aquí el programa hecho, lo que cambia que puedes escuchar la voz cuando le piden datos y los resultado que muestra.

Avisen si pueden escuchar.

Saludos.
 

Adjuntos

  • Calculo_cilindro_voz_consola_01_cs.zip
    3.2 KB · Visitas: 5
A ver, si no me equivoco, pi es como sea si usas la variable por del paquete matemático, es normal que sea double para que tenga más precisión.
Si defines pi tu, pues la haces como creas conveniente.
math.PI es una cosa que alguien definió en la librería math
Pi que no es math.PI ni es PI es una variable que estás definiendo tu con solo dos decimales, y la defines directamente como quieras. Por ejemplo en Arduino podrías usar coma fija y definirla como 314 y luego dividir el resultado por 100, si año vas a poner % sin decimales lo puedes hacer todo en enteros que son dos bytes por variable en lugar de seis u ocho que son en float. En double serán 12 o no sé.
En Arduino también está la librería math y habría que ver cómo está definido math.PI en esa librería para que no tengas un conflicto de tipos.
 
Eso de poner un 314 para luego dividirlo por 100... :unsure::unsure::unsure::unsure::unsure::unsure::unsure::unsure::unsure::unsure::unsure:

Hablando en Arduino, claro.

¿Por qué no lo haces directamente a 3,14 o con decimales que desees directamente y tipo constante?

Por cierto, se puede usar Visual Studio Community 2019 añadiendo este pluging de Arduino, Microchip......


La diferencia que trabajar con Arduino IDE, es mucho más rápido con Visual Studio.

Sigo pensando lo del 314 dividirlo a 100. :unsure:
 
Pues porque si tienes claro que quieres dos decimales, por decir algo, fijas dos decimales tomando todos los cálculos enteros en centesimas de unidad, según el caso eso consumirá uno o dos bytes para cada número en lugar de los 8 que ocupa un float.
Eso para una CPU de 8 bits es ir 10 o más veces más rápido. Aparte de culpar 1/4 de memoria.
A la hora de imprimir el resultado, pones la coma a mano. O directamente borras los decimales si vas a usar % y te vale 35% y no necesitas 35,3% .
Dependería de la implementación del compilador pero en general sería así la diferencia.


A ver, yo nunca he sido muy talibán del ahorro, pero con el IDE del Arduino me he quedado sin RAM muchas veces porque no es muy eficiente. De ahí mi "obsesión" actual, si de partida ya vas definiendo todo pequeñito eso que vas adelantando... Si con todo el código depurado, le añades una opción y te quedas sin RAM, tienes que volver atrás a ver dónde ahorras y revisar que ese cambio no estropee algo.
Prefiero ser tacaño en origen.
 
Hola:

Vaya, buenísimo el truco. Eso de ser talibán en ahorrar todo recurso está muy bien. Bienvenido sea.

Mi forma de pensar antes era.
Me falta RAM en el microcontrolador. ¿Qué hacer?

1. Cambiar de microcontrolador más potente que contenga más RAM con los mismos pines.

2. Solo usar la RAM interna del microcontrolador para cosas justas y extenderte en la RAM externa.

En la Web que puso indica que usa el protocolo SPI, que es mucho más aconsejable y rápida que el I2C.

Arduino Playground - SpiRAM

Aquí hay mucha más RAM de la firma Microchip.
404 | Microchip Technology

Arduino_SRAM_23A256_1.png


C:
#include <SPI.h>

#define SRAM_DEVICE 10  // SRAM on pin 10

// 23A256 commands

#define SRAM_READ  0b011  // Read data from memory array beginning at selected address
#define SRAM_WRITE 0b010  // Write data to memory array beginning at selected address
#define SRAM_RDSR  0b101  // Read STATUS register
#define SRAM_WRSR  0b001  // Write STATUS register

// operation modes (status register)

#define SRAM_BYTE_MODE 0b00000000  // Byte mode (default operation)
#define SRAM_PAGE_MODE 0b10000000  // Page mode
#define SRAM_SEQN_MODE 0b01000000  // Sequential mode
#define SRAM_RSVD_MODE 0b11000000  // Reserved
#define SRAM_HOLD_MODE 0b00000001  // Set this bit to DISABLE hold mode

// setup SRAM device by turning into sequential mode
void sram_setup (const byte device)
{
  digitalWrite (device, LOW);   // select device
  SPI.transfer (SRAM_WRSR);
  SPI.transfer (SRAM_SEQN_MODE);
  digitalWrite (device, HIGH);  // deselect device
}  // end of sram_setup

// write 'length' bytes from 'data' to device at address 'address'
void sram_write (const byte device, unsigned int address, byte * data, unsigned int length)
{
  if (length == 0)  // don't bother if nothing to do
     return;
   
  digitalWrite (device, LOW);
  SPI.transfer (SRAM_WRITE);     // write mode
  SPI.transfer (address >> 8);   // high-order address byte
  SPI.transfer (address & 0xFF);   // low-order address byte
  for ( ; length ; --length)
    SPI.transfer (*data++);     // data byte
  digitalWrite (device, HIGH);  // deselect device
}  // end of sram_write

// read 'length' bytes into 'data' to device from address 'address'
void sram_read (const byte device, unsigned int address, byte * data, unsigned int length)
{
  if (length == 0)  // don't bother if nothing to do
     return;

  digitalWrite (device, LOW);     // select device
  SPI.transfer (SRAM_READ);       // read mode
  SPI.transfer (address >> 8);    // high-order address byte
  SPI.transfer (address & 0xFF);  // low-order address byte
  for ( ; length ; --length)
    *data++ = SPI.transfer (0);     // data byte
  digitalWrite (device, HIGH);    // deselect device
}  // end of sram_write

void setup (void)
{
  Serial.begin (9600);
  SPI.begin ();  
  sram_setup (SRAM_DEVICE);
}

char test [] = "hello, world";

void loop (void)
{
sram_write (SRAM_DEVICE, 100, (byte *) test, sizeof test);

char buf [100];

sram_read (SRAM_DEVICE, 100, (byte *) buf, sizeof buf);

Serial.println (buf);
delay (1000);

}

Gammon Forum : Electronics : Microprocessors : Connecting SRAM to your microprocessor using SPI

3. Con el tiempo, los fabricantes harán más SRAM a parte y si hay mucha demanda, harán los super microcontroladores con más RAM todavía en su interior, esto de esperar tienes que leer noticias para saber cuando llegan y que llegan. Quieren hacer negocio, por eso las RAM externas y saber usarlas. También puedes usar varios módulos de RAM, preferiblemente en SPI que es más rápido, si es posible y más rápido todavía, que sean en paralelo las comunicaciones, nada de SPI, ni I2C que con seriales.

4. Optimizar el código hasta en la tumba. Ahorrando RAM por todas partes hablando en lenguaje de alti nivel como el C.

5. Usar el microcontrolador sin usar RAM o SRAM externas, manejando el lenguaje C pero dentro poner algunos códigos en asm, que se puede incrustar. Optimizas muchos, sobre todo las partes en usar RAM.

6. Una tarea que te pegas media vida en hacer programas a cambio de optimizar en velocidad y mucha RAM, hacer todo en ensamblador, como se hacía antes. ¿Quién se atreve ahora?

7. ¿Cuál es la mejor cuestión de todo arriba indicado?
¿Alguna sugerencia más o quedarse en silencio?

Un cordial saludos.
 
Pero una memoria externa te limita enormemente, aparte de por tiempos de acceso, en principio no es una memoria "normal" en la que guardar variables sin más, tendrás que enviar variables allí para descargas memoria interna y un follón de muerte.
Por ejemplo no hagas prinln("hola Pepito") porque el string "hola Pepito" lo guarda en RAM... Veas tú la estupidez
Usa prinln(F(”hola Pepito")) re string estará en flash.
 
Buenas gente:

Hay memoras RAM por comunicación serie la lenta es I2C y la rápida es el SPI. Aconsejable es la comunicación de paralelo, en el cual su desventaja es que tiene muchos pines y la ventaja extremadamente rápida..

Si lo hacen, es porque está bien. La mejor opción es usar microcontroladores que tenga muchísima RAM. Puedes usar aunque sea para encender y apagar un Led un PIC32, RAM le sobra para eso, para otras cosas no tanto.

Puedes optar con una Raspberry PI de 8 GB que hay ahora, el micro soporta hasta los 16 GB que no se sabe si harán esa placa nueva o esperan ya a por la Raspberry Pi 5, que habrá también de 1 GB, 2 GB, 4 GB, 8 GB, de 16 GB no se sabe pero hay gente que lo pide. Eso si, la RaspBerry 5 ya incluirá más procesaror.

Tanto microcontrolador o procesador....................

¿No creen que ya los 8 bit están un poco viejo?

¿Por qué no usar los PIC32 de las mismas dimensiones?

Se que tienen los PIC64 fabricados pero no lo venden. No hay demanda, por ahora.

Son solo preguntas de curiosidad.

Saludos.
 
Por cierto, la marca muchos les gustan el ARM.

¿Dónde están los libros de ARM a mansalva?

¿Por qué hay tantos libros de PIC de Arduinos?

¿Por qué ya no sacan libros de asm de PIC como hacían antes?

Pues......................... por la moda según la época.

Por ahora siguen Arduino y Raspberry Pi por excelencia. Como bajó los PIC y asm en poco tiempo, impresioante.
 
No es moda, es soporte gratuito de software y hardware...algo de lo que los PICs tienen muuuuy poco.
Para los Arduino hay una parva de bibliotecas (buenas y malas) para hacer lo que te plazca...para los PIC hay pocas y muchas de ellas integradas a IDEs que todos se roban (por que no quieren pagar). Para Arduino el IDE es libre, los compiladores y demas herramientas son libres y miles de programadores que saben electrónica (lo que no es lo común en estos días) desarrollan bibliotecas excelentes y libres para miles de problemas comunes que con los PIC no sucede...o no al menos en esa cantidad.
 
Atrás
Arriba