Calcular litros de agua en porcentaje según altura

Moda, mucha información, ejemplos de programas de los microcontroladores y tecnologías útiles para todo incluso facilidad para iniciarse.

De todo un poco.

La Raspberry Pi vuela por todas partes, se apuntaron los clones. ;)

Antiguamente la moda era los Spectrum.

¿Quién se imaginaba que ahora controla dispositivo hasta la RAspberry Pi con ese tamaño y precio?
 
ARM también es marca, que yo sepa. A parte de arquitectura.

ARM información lo habrá en internet, libros en español, ninguno.

Antes Arduino era de AVR, antes lo quería para los PIC, pero tuvieron que elegir AVR, que ya lo compró Microchip en su momento.

Como AVR era muy limitado, metieron ARM, muchos fanáticos de Atmel, no le hicieron en su día ni pizca de gracia, jajajajajajjajaa. Lo que tengo que ver por internet.
 
Ya nadie (casi) programa en ensablador porque no hace falta.
Yo era muy talibán del ensamblador, pero lo bueno de opinar algo es que se puede cambiar de opinión.
Últimamente programo en lo que me resulte más cómodo en cada momento, si va lento compro otra placa más rápida por pongamos 10€ más... A mi me paga mi jefe a más de 40€ la hora. Si fuera freelance la fiesta andaría por los 100 o así.
Toda la información está en internet en perfecto español técnico, no sé como dices que hay algo que no esté en español técnico.
Hay gente que sigue llamando inglés o algo así al español técnico.

Arm que yo sepa no fabrica, genera un estándard y me imagino que licencia esa tecnología a terceros cobrando por ello.
Atmel ya usaba arm antes de ser absorbida por microchip.
Yo era muy de atmel cuando usaba los 8052.
 
No se si ARM los fabricas, si los diseña.

Hoy en día, diseñas algo, que te lo fabrique el mejor te convenga.

El más pesado de programar eran los Motorola, la gente le cogía rabia, ajjajajajjajaa, en asm.

En fin, el más usado es el C estándar. Prefiero tipo C++. Más aún C# pero este es más difícil.
 
Última edición:
Por cierto.

Seguimos hablando de temas de optimización.

Poco a poco fuí optimizando un código de 23% de RAM que me consumió en ARduino UNO, lo pasé a 11%. Usando cosas como estas.
Sin optimizar.
C:
       lcd.print("SELECT   ");
        Serial.println("SELECT");

Optimizado. De la RAM se pasa a al Flash o memoria programa.
C:
       lcd.print(F("SELECT   "));
        Serial.println(F("SELECT"));

Más información aquí.

Muchos ya lo sabrán, pero eso explicado arriba con la F lo descubrí hoy por casualidad.

Visto lo visto, pues guardar datos de array o de textos en archivos en la Micro-SD.

Lo que no se si su eficiencia valdrá la pena. Hablo en plan como si fuera memoria Flash o de programa.

PD: Siempre se aprende algo nuevo antes de dormir.
 
Última edición:
Pues no sé lo que hará el compilador, pero la cadena entrecomillado ya está en la flash. El motivo por el que lo copia a la RAM se me escapa, en principio sí lo usa desde la flash ahorra memoria e instrucciones.
 
Hola:

No sabía lo que va entre comilla iba directamente a la RAM.
C:
lcd.print("SELECT   ");
        Serial.println("SELECT");

Pues hay que hacerlo de manera con la F, para ponerlo en la Flash.
Para eso si no me caben todos los textos, como dicen en algunas Web, usar el Arduino con más memoria que haya.

Siguiendo el tema.

Quiero convertir el código de C# en C de Arduino.

Por supuesto, dede el Monitor Serie de Arduino IDE 1.8.13 tiene que pedir información tal como la pide C#, pero sin voz en esta ocasión, jejeje.

Estos son los datos que te piden, solo cuatro y nada más.
Captura.PNG

Desde que pulse Enter con todo lo que indica arriba, en C# lo muestra como indica abajo. Lo que indica en laimagen de abajo, es el resultado que tiene que dar el monitor Serie.

Esto ya parece un reto.

Captura 2.PNG

Códido C#:
C#:
using System;
using System.Speech.Recognition; // No olvidar. Micro.
using System.Speech.Synthesis; // No olvidar. Altavoz.

// No olvidar añadir en "Referencias" Speech en el "Explorador de soluciones".

namespace Calculo_cilindro_voz_consola_02_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            // Mostrar título de la ventana.
            Console.Title = "Cálculo litros de un depósito - By Meta. Electrónica PIC";

            // Tamaño de la ventna. 55 X y 16 Y.
            Console.SetWindowSize(55, 16);

            #region Variables.
            // Variables.
            const double Pi = 3.14;
            float PI = Convert.ToSingle(Pi);
            float radio, altura, volumen, litros, nivelAgua, resultadoPorcentaje,
                resultadoLitros, volumenLitros, mitadBarra, cantidadTubosLitros,
                totalLitros;
            float cantidadTubos;
            #endregion

            do
            {
                try
                {
                    // Inicializar una nueva instancia de SpeechSynthesizer.
                    using (SpeechSynthesizer altavoz = new SpeechSynthesizer())
                    {
                        #region Introducción de datos en la pantalla.
                        // Configure la salida de audio.
                        altavoz.SetOutputToDefaultAudioDevice();

                        // Velocidad de la voz.
                        altavoz.Rate = -2; // Valores entre -10 a 10.

                        // Volumen de la voz.
                        altavoz.Volume = 100; // Valores entre 0 y 100.

                        // Limpiar pantalla.
                        Console.Clear();

                        // Cursor visible.
                        Console.CursorVisible = true;
                        // Introducción de datos.
                        Console.Write("Introduce el radio en m.: ");
                        altavoz.Speak("Introduce el radio en metros.");
                        radio = float.Parse(Console.ReadLine());
                        Console.Write("Introduce la altura del tubo en m.: ");
                        altavoz.Speak("Introduce la altura del tubo en metros.");
                        altura = float.Parse(Console.ReadLine());
                        Console.Write("Introduce altura del agua. Máximo es de {0} m.: ", altura);
                        altavoz.Speak("Introduce altura del agua. Máximo es de " + altura + "metros.");
                        nivelAgua = float.Parse(Console.ReadLine());
                        Console.Write("Introduce cantidad de tubos: ");
                        altavoz.Speak("Introduce cantidad de tubos.");
                        cantidadTubos = int.Parse(Console.ReadLine());
                        #endregion

                        #region Cálculos.
                        // Cálculo volumen.
                        volumen = PI * (radio * radio) * altura;

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

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

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

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

                        // Cálculo cantidad de litros con total de tubos.
                        totalLitros = litros * cantidadTubos;
                        #endregion

                        #region Dibujado barra de progreso.

                        // Posición.
                        Console.SetCursorPosition(0, 4);

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

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

                        if (resultadoPorcentaje <= 15)
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                        }
                        else if (resultadoPorcentaje <= 40)
                        {
                            Console.ForegroundColor = ConsoleColor.Yellow;
                        }
                        else if (resultadoPorcentaje <= 100)
                        {
                            Console.ForegroundColor = ConsoleColor.Green;
                        }

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

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

                        Console.ForegroundColor = ConsoleColor.Gray;

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

                        #region Mostrar textos en pantalla.
                        // Cursor invisible.
                        Console.CursorVisible = false;

                        // Pisición del texto a mostrar.
                        Console.SetCursorPosition(0, 9);

                        // Muestra porcentaje del depósito.
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.Write("\nPorcentaje: ");
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.WriteLine(resultadoPorcentaje.ToString("N2") + " %.");
                        altavoz.Speak("Cantidad de agua que hay en el depósito es de " +
                            //resultadoPorcentaje.ToString("N2") + "%.");
                            resultadoPorcentaje + "%.");

                        // Muestra cantidad de agua que hay actualmente y el total.
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.Write("\nLitros de agua: ");
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.Write(resultadoLitros.ToString("N2"));
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.WriteLine(" / " + litros.ToString("N2") + " L. total de un tubo.");
                        altavoz.Speak("Cantidad de litros de agua en un tubo de " +
                            resultadoLitros.ToString("N2") + "de " +
                            litros.ToString("N2") + " litros total de un tubo.");

                        // Cantidad de tubos sin contar la base conectada, solo tubos independiente.
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.Write("\nCantidad de Litros total por " + cantidadTubos + " tubos: ");
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.Write(cantidadTubosLitros.ToString("N2"));
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.WriteLine(" / " + totalLitros.ToString("N2") + " L.");
                        altavoz.Speak("Cantidad de litros en total por " + cantidadTubos.ToString("N2") +
                            " tubos: " + cantidadTubosLitros.ToString("N2") +
                            " de " + totalLitros.ToString("N2") + " litros.");
                        #endregion
                    }
                }

                catch (FormatException)
                {
                    Console.BackgroundColor = ConsoleColor.Gray;
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Clear();
                    Console.SetCursorPosition(8, 5);
                    Console.Write(@"La cadena de entrada no tiene el
        formato correcto.
        
        Solo debes introducir números y comas.");
                    Console.CursorVisible = false;
                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.ForegroundColor = ConsoleColor.Gray;
                }

                // Pulse cualquier tecla para continuar.
                Console.ReadKey();
            } while (true);
        }
    }
}

Dejo la descarga el programa de C# compilado por si alguien lo quiere probar.

Saludos.
 

Adjuntos

  • Cálculo Voz.zip
    3.6 KB · Visitas: 1
Arriba