Práctica 3

Comunicación entre microcontroladores convertidor a binario.

Regresar a Teoría

Descripción

Se desarrolla un sistema con dos microcontroladores para convertir señales analógicas en binario. El primero codifica la señal de un potenciómetro en un formato binario de 8 bits, y el segundo la transforma a decimal para visualizarla. Esto para evaluar los métodos de comunicación que se utilizan en el área de redes digitales.

Instrucciones PDF
...
Convertidor a Binario

Aquí se desarrolla un sistema para convertir valores analógicos a binario. Un Arduino convierte el valor de un potenciómetro a un número binario de 8 bits, visualizado en sus pines digitales. Otro Arduino recibe estos valores binarios, los convierte a decimal y los muestra en el monitor serial. Esta actividad asegura que los Arduinos se comuniquen correctamente mediante la conversión y transferencia de datos entre analógico, binario y decimal, con la conexión a tierra común necesaria para la comunicación.

Código Parte 1

//CONTADOR DE PULSOS ARDUINO 1
int pot=0;//el valor del pot empieza en 0
int potPin = A0;
String dato = "";

void setup()
{
    pinMode(2, OUTPUT); //Bit0
    pinMode(3, OUTPUT); //Bit1
    pinMode(4, OUTPUT); //Bit2
    pinMode(5, OUTPUT); //Bit3
    pinMode(6, OUTPUT); //Bit4
    pinMode(7, OUTPUT); //Bit5
    pinMode(8, OUTPUT); //Bit6
    pinMode(9, OUTPUT); //Bit7
    Serial.begin(115200);//velocidad de 115200 bits por segundo.
}

void loop()
{
    
    pot=analogRead(potPin);//lee el estado del potenciometro
    Serial.println("Valor pot: ");//imprime el valor del pot 
    Serial.println(pot);
    pot=map(pot,0,1023,0,255);//cambia los valores del pot de 1023 a 255(8bits)
    Serial.println("Valor pot convertido: ");//imprime el valor del pot convertido
    Serial.println(pot);//imprime el valor del pot convertido
    Serial.println("Valor pot 8 bits: ");//imprime el valor del pot convertido
    
    for(int i=2; i<10; i++) //lee del pin 2 al 9
    {
    digitalWrite(i,pot%2);//saca el residuo de la division
    //Serial.print(pot%2);//imprime el residuo
    dato+=(pot%2);
    pot=pot/2;//divide el valor del pot  entre 2 para el siguiente bit
    }
    reverseString(dato);
    Serial.print(dato);
    dato="";
    Serial.println("");
    delay(1000);
    
}

void reverseString(String &str) 
{
    int len = str.length();
    for (int i = 0; i<len/2; i++) 
    {
    char temp = str[i];
    str[i] = str[len - i - 1];
    str[len - i - 1] = temp;
    }
}

Código Parte 2

//ENVIO DE PULSOS ARDUINO 2
int potencia=1;
int suma=0;
int bit;

void setup()
{
    
    pinMode(9, INPUT); //Bit0
    pinMode(8, INPUT); //Bit1
    pinMode(7, INPUT); //Bit2
    pinMode(6, INPUT); //Bit3
    pinMode(5, INPUT); //Bit4
    pinMode(4, INPUT); //Bit5
    pinMode(3, INPUT); //Bit6
    pinMode(2, INPUT); //Bit7
    Serial.begin(115200);//velocidad de 115200 bits por segundo.
}

void loop()
{
    for(int i=9; i>1; i--) //lee del pin 9 al 2
    {
    bit=digitalRead(i); // lee el valor del pin
    suma=suma +(bit*potencia); 
    potencia=potencia*2;//eleva la potencia hasta 128
    }
    Serial.println(suma); //imprime la suma total
    suma=0; //reinicia la suma
    potencia=1; //reinicia la potencia
    delay(1000);
}