Mostrando entradas con la etiqueta code. Mostrar todas las entradas
Mostrando entradas con la etiqueta code. Mostrar todas las entradas

jueves, 25 de julio de 2024

Generar dos señales de reloj con la ESP32

En los canales se usa el canal cero y el canal dos porque aparentemente los canales vienen en pares y si se usa el cero y el uno tendrán la misma frecuencia.

#define LEDC_TIMER_13_BIT 13
#define LEDC_BASE_FREQ_R1 40  
#define LEDC_BASE_FREQ_R2 80
#define LED_PIN_1 15 // pin for first signal
#define LED_PIN_2 26 // pin for second signal
#define LEDC_CHANNEL_0 0
#define LEDC_CHANNEL_1 2

void setup() {
    pinMode(LED_PIN_1, OUTPUT); // set pin as output
    pinMode(LED_PIN_2, OUTPUT); // set pin as output
   
    ledcAttachChannel(LED_PIN_1, LEDC_BASE_FREQ_R1, LEDC_TIMER_13_BIT, LEDC_CHANNEL_0 );
    ledcAttachChannel(LED_PIN_2, LEDC_BASE_FREQ_R2, LEDC_TIMER_13_BIT, LEDC_CHANNEL_1 );
    // Initiates PWM signals with a 50% duty cycle
    ledcWrite(LED_PIN_1, 4096); // 50% of 2^13 = 4096
    ledcWrite(LED_PIN_2, 4096); // 50% of 2^13 = 4096
}

void loop() {
  // The loop is kept empty or with other commands as needed
}




viernes, 14 de enero de 2022

Media, mediana y moda en Python

 Podemos hacerlo de diferentes manera pero mostraré dos, la primera usando statistics y la segunda con código similar a bajo nivel. El código lee los valores desde un archivo de texto que tiene los datos a manera de columna, solo consideramos enteros y datos con una sola moda pues mas de una moda no podría ser calculada con el código dos.

Código uno:

import statistics as stats

archi=open('datos_nums.txt','r')

contnum=0

sumanums=0

numeros=[]

auxiliar=[]

for linea in archi:

numeros.append(int(linea))

auxiliar.append(0)

sumanums=sumanums+int(linea)

contnum=contnum+1

archi.close()


#ordenar la lista

numeros.sort()

print('Los números son:')

print(numeros)


#calcular la media

print('La media es: '+str(stats.mean(numeros)))

#calcular la mediana

print('La mediana es: '+str(stats.median(numeros)))

#calcular la moda

print('La moda es: '+str(stats.mode(numeros)))







Código dos:

archi=open('datos_nums.txt','r')

contnum=0

sumanums=0

numeros=[]

auxiliar=[]

for linea in archi:

numeros.append(int(linea))

auxiliar.append(0)

sumanums=sumanums+int(linea)

contnum=contnum+1

archi.close()


#ordenar la lista

numeros.sort()

print('Los números son:')

print(numeros)

#calcular la media

v_media=sumanums/contnum

print('La media es:' +str(v_media))

#calcular la mediana

if contnum % 2==0:

v_mediana=(numeros[int((contnum/2)-1)]+numeros[int((contnum/2))])/2

else:

v_mediana=numeros[((contnum-1)/2)]

print('La mediana es:' +str(v_mediana))


#Calcular la moda

for i in range(contnum):

numero=numeros[i]

posicion=i

for j in range(contnum):

if numero==numeros[j]:

auxiliar[j]=auxiliar[j]+1

print(auxiliar)


sábado, 4 de diciembre de 2021

Encender y apagar un LED con Arduino

Materiales:
  • Arduino UNO 
  • LED 
  • Resistencia de 330 o de 220 Ohms
  • Cable rojo y negro
De acuerdo con el diagrama de la Figura siguiente conectamos una terminal de tierra (GND) del Arduino hacia el cátodo del LED. El ánodo del led lo conectamos a una de las terminales de la resistencia. El otro extremo de la resistencia lo conectamos a una de los pines digitales del Arduino, en este caso al 13. Con esta conexión ya tendremos la alimentación del LED, solo nos falta el código para que encienda y apague. El circuito se puede simular en Thinkercad.
El código para encender y apagar el led es el siguiente:

//declaración de variables
int pin_salida = 13;//definimos cual es el número de nuestro pin de                     //salida
//configuración
void setup() {
    pinMode(pin_salida , OUTPUT);//definimos que nuestro pin 13 será                                 //de salida
}
//ciclo infinito
void loop() {
    digitalWrite(pin_salida , HIGH);//escribimos una salida digital,                     //ponemos en ALTO el pin 13 (se enciende el led)
    delay(1000);//retrasamos la continuación del ciclo un segundo (1                 //s=1000 milisegundos)
    digitalWrite(pin_salida , LOW);//escribimos una salida digital,                 //ponemos en BAJO el pin 13 (se apaga el led)
    delay(1000);//retrasamos la continuación del ciclo un segundo (1                 //s=1000 milisegundos)
 }

martes, 7 de septiembre de 2021

Método de selección en C++

 Consiste en lo siguiente:

  • Buscas el elemento más pequeño de la lista.
  • Lo intercambias con el elemento ubicado en la primera posición de la lista.
  • Buscas el segundo elemento más pequeño de la lista.
  • Lo intercambias con el elemento que ocupa la segunda posición en la lista.
  • Repites este proceso hasta que hayas ordenado toda la lista.

Pseudocódigo en C++


for (i=0; i<TAM - 1; i++)
pos_men = Menor(lista, i);
temp = lista[i];
lista[i] = lista [pos_men];
lista [pos_men] = temp;

Nota: Menor(lista, i) es una función que busca el menor elemento entre las posiciones i y TAM-1. 

Ejemplo:


Vamos a ordenar la siguiente lista (la misma del ejemplo anterior):
4 - 3 - 5 - 2 - 1
Comenzamos buscando el elemento menor entre la primera y última posición. Es el 1. Lo intercambiamos con el 4 y la lista queda así:
1 - 3 - 5 - 2 - 4
Ahora buscamos el menor elemento entre la segunda y la última posición. Es el 2. Lo intercambiamos con el elemento en la segunda posición, es decir el 3. La lista queda así:
1 - 2 - 5 - 3 - 4
Buscamos el menor elemento entre la tercera posición y la última. Es el 3, que intercambiamos con el 5:
1 - 2 - 3 - 5 - 4
El menor elemento entre la cuarta y quinta posición es el 4, que intercambiamos con el 5:
1 - 2 - 3 - 4 - 5


Código en C++


#include <iostream>

#include <time.h>//librería ara usar random

#define TAM 10 //se define una variable global

 

int main()

{

    //declaración de las variables a utilizar

    //  temp:para almacenar temporalmente un número

    //  lista:los elementos a ordenar

    //  TAM:tamaño de la lista

    // i, j:para usarse en los ciclos

    int temp, i, j;

    int lista[TAM];

    srand(time(NULL));

    //llenar vector con valores aleatorios

    for (i = 0; i < TAM; i++)

    {

        lista[i] = rand() % 100;//generación de números aleatorios

    }

 

    //imprimir arreglo desordenado, \n para el salto de línea

    printf("Vector desordenado\n");

    for (i = 0; i < TAM; i++)

    {

        printf("%d\t", lista[i]);//\t da la tabulación o con \n para salto de línea

    }

 

    //ciclos anidados para ordenar los elementos con inserción

    for (i = 1; i < TAM; i++)

    {

        temp = lista[i];//se almacena el número en temp

        j = i - 1;//asignamos a j el valor de i menos 1 para comparar con el elemento anterior

        while ((lista[j] > temp) && (j >= 0))//mientras los elementos sean mayores a temp y todavía tengamos elementos

        {

            lista[j + 1] = lista[j];//al ser mayor lo almacenamos en la posición j+1

            j--;//decrementamos j

            lista[j + 1] = temp;//almacenamos temporal en j+1

        }

    }

 

    //imprimir vector ordenado

    printf("\n");

    printf("Vector ordenado\n");

    for (int i = 0; i < TAM; i++)

    {

        printf("%d\t", lista[i]);//\t da la tabulación o con \n para salto de línea

 

    }

 

    //detener la pantalla pidiendo un caracter de entrada

    int flag = getchar();

}

 

Ventajas:

  • Fácil implementación.
  • Requerimientos mínimos de memoria.

Desventajas:

  • Lento.
  • Realiza numerosas comparaciones.

lunes, 6 de septiembre de 2021

Método burbuja en C++

 

Descripción

Consiste en ciclar repetidamente a través de la lista, comparando elementos adyacentes de dos en dos. Si un elemento es mayor que el que está en la siguiente posición se intercambian. 

Pseudocódigo en C++


for (i=1; i<TAM; i++)
    for j=0 ; j<TAM - 1; j++)
if (lista[j] > lista[j+1])
temp = lista[j];
lista[j] = lista[j+1];
lista[j+1] = temp;


Ejemplo

Tenemos la siguiente lista:
4 - 3 - 5 - 2 - 1
Tenemos 5 elementos. Es decir, TAM toma el valor 5. Comenzamos comparando el primero con el segundo elemento. 4 es mayor que 3, así que intercambiamos. Ahora tenemos:
3 - 4 - 5 - 2 - 1
Ahora comparamos el segundo con el tercero: 4 es menor que 5, así que no hacemos nada. Continuamos con el tercero y el cuarto: 5 es mayor que 2. Intercambiamos y obtenemos:
3 - 4 - 2 - 5 - 1
Comparamos el cuarto y el quinto: 5 es mayor que 1. Intercambiamos nuevamente:
3 - 4 - 2 - 1 - 5
Repitiendo este proceso vamos obteniendo los siguientes resultados:
3 - 2 - 1 - 4 - 5
2 - 1 - 3 - 4 - 5
1 - 2 - 3 - 4 - 5

Código


#include <iostream>

#include <time.h>//librería ara usar random

#define TAM 10 //se define una variable global

using namespace std;//para usar strings

 

int main()

{

    //declaración de las variables a utilizar

    //  temp:para almacenar temporalmente un número

    //  lista:los elementos a ordenar

    //  TAM:tamaño de la lista

    int temp;

    int lista[TAM];

    srand(time(NULL));

    //llenar vector con valores aleatorios

    for (int i = 0; i < TAM; i++)

    {

        lista[i]=rand()%100;//generación de números aleatorios

    }

 

    //imprimir arreglo desordenado, \n para el salto de línea

    printf("Vector desordenado\n");

    for (int i = 0; i < TAM; i++)

    {

        printf("%d\t", lista[i]);//\t da la tabulación o con \n para salto de línea

    }

 

    //ciclos anidados para ordenar los elementos con método burbuja

    for (int i = 1; i < TAM; i++)

    {

        for (int j = 0; j < TAM - 1; j++)

        {

            if (lista[j] > lista[j + 1])//se compara el elemento actual con el elemento siguiente

            {

                temp = lista[j];//se almacena temporalmente el elemento actual

                lista[j] = lista[j + 1];//al elemento actual lo reemplazamos por el siguiente

                lista[j + 1] = temp;//reemplazamos al elemento siguiente por el elemento almacenado en el valor temporal

            }

        }

    }

 

    //imprimir vector ordenado

    printf("\n");

    printf("Vector ordenado\n");

    for (int i = 0; i < TAM; i++)

    {

        printf("%d\t", lista[i]);//\t da la tabulación o con \n para salto de línea

 

    }

 

    //detener la pantalla pidiendo un caracter de entrada

    int flag = getchar();

}


Ventajas:

Fácil implementación.

No requiere memoria adicional.

Desventajas:

Muy lento.

Realiza numerosas comparaciones.

Realiza numerosos intercambios.