lunes, 19 de diciembre de 2022

MULTIPPLEXOR (MUX) HP4067 de 16 canales para aumentar pines a tu arduino...


código básico
//codigo para usar un MUX MULTIPLEXOR/DEMULTIPLEXOR
int S0 = 7;//CONFIGURACION DE PINES
int S1 = 6;
int S2 = 5;
int S3 = 4;
int SIG = 3;//PIN DE ACTIVACION DE SEÑAL ALTO O BAJO

void setup()
{
  pinMode(S0,OUTPUT);//CONFIGURADOS COMO SALIDA PARA ACTIVAR EL CODIGO BINARIO
  pinMode(S1,OUTPUT);
  pinMode(S2,OUTPUT);
  pinMode(S3,OUTPUT);
  pinMode(SIG,OUTPUT);

}

void loop()
{
  //SE HACEN LAS COMBINACIONES BINARIAS DE CERO A 15 PARA ACTIVAR UNA CANAL
  //SE ACTIVA CANAL 0
 //digitalWrite(S0,LOW);//COMBINACION BINARIA CERO PARA ACTIVAR EL CANAL C0         S3 S2 S1 S0
 //digitalWrite(S1,LOW);//                                                           0  0  0  0  
 //digitalWrite(S2,LOW);
 //digitalWrite(S3,LOW);

// digitalWrite(S0,HIGH);//COMBINACION BINARIA UNO PARA ACTIVAR EL CANAL C1       S3 S2 S1 S0
// digitalWrite(S1,LOW);//                                                         0  0  0  1      
// digitalWrite(S2,LOW);
 //digitalWrite(S3,LOW);

// digitalWrite(S0,LOW);//COMBINACION BINARIA DOS PARA ACTIVAR EL CANAL C2        S3 S2 S1 S0
// digitalWrite(S1,HIGH);//                                                        0  0  1  0
// digitalWrite(S2,LOW);
// digitalWrite(S3,LOW);

digitalWrite(S0, HIGH);//COMBINACION BINARIA TRES PARA ACTIVAR EL CANAL C3     S3 S2 S1 S0
 digitalWrite(S1,HIGH);//                                                       0  0  1  1
 digitalWrite(S2,LOW);
 digitalWrite(S3,LOW);

//   ACTIVO EL DATO A ENVIAR POR PIN SIG
digitalWrite(SIG, HIGH);
delay(500);
digitalWrite(SIG, LOW);
delay(500);

}



código mas compacto con bitread

//codigo para usar un MUX MULTIPLEXOR/DEMULTIPLEXOR
int S0 = 7;//CONFIGURACION DE PINES
int S1 = 6;
int S2 = 5;
int S3 = 4;
int SIG = 3;//PIN DE ACTIVACION DE SEÑAL ALTO O BAJO

int seleccion_canal(byte canal)//se usa int para retornar un valor, si se usa void no retorna
{
//   bitRead(x, n)
//    Parámetros
//    x: el número desde el que leer.
//    n: qué bit leer, comenzando en 0 para el bit menos significativo (más a la derecha).
  //bitRead escribe un numero binario de un Byte ejemplo bitRead(3)= bitRead(00000011)
  //si colocamos bitRead(3,2) 3 es el numero a leer y de ese se toma o leer el valor de la posicion 2 ejemplo 1
  digitalWrite(S0,bitRead(canal,0));//s0,1                     0101
  digitalWrite(S1,bitRead(canal,1));//s1,0
  digitalWrite(S2,bitRead(canal,2));//s2,1
  digitalWrite(S3,bitRead(canal,3));//s3,0
 
}

void setup()
{
  pinMode(S0,OUTPUT);//CONFIGURADOS COMO SALIDA PARA ACTIVAR EL CODIGO BINARIO
  pinMode(S1,OUTPUT);
  pinMode(S2,OUTPUT);
  pinMode(S3,OUTPUT);
  pinMode(SIG,OUTPUT);

}

void loop()
{
  //SE HACEN LAS COMBINACIONES BINARIAS DE CERO A 15 PARA ACTIVAR UNA CANAL
  //SE ACTIVA CANAL
 seleccion_canal(3);

//   ACTIVO EL DATO A ENVIAR POR PIN SIG
digitalWrite(SIG, HIGH);
delay(500);
digitalWrite(SIG, LOW);
delay(500);

}


codigo lectira analogica demultiplexor

//codigo para usar un MUX MULTIPLEXOR/DEMULTIPLEXOR
int S0 = 7;//CONFIGURACION DE PINES
int S1 = 6;
int S2 = 5;
int S3 = 4;
int SIG = A0;//ESTA VEZ SERA USADO COMO ENTRADA

int seleccion_canal(byte canal)//se usa int para retornar un valor, si se usa void no retorna
{
//   bitRead(x, n)
//    Parámetros
//    x: el número desde el que leer.
//    n: qué bit leer, comenzando en 0 para el bit menos significativo (más a la derecha).
  //bitRead escribe un numero binario de un Byte ejemplo bitRead(3)= bitRead(00000011)
  //si colocamos bitRead(3,2) 3 es el numero a leer y de ese se toma o leer el valor de la posicion 2 ejemplo 1
  digitalWrite(S0,bitRead(canal,0));
  digitalWrite(S1,bitRead(canal,1));
  digitalWrite(S2,bitRead(canal,2));
  digitalWrite(S3,bitRead(canal,3));
 
}

void setup()
{
  Serial.begin(9600);
  pinMode(S0,OUTPUT);//CONFIGURADOS COMO SALIDA PARA ACTIVAR EL CODIGO BINARIO
  pinMode(S1,OUTPUT);
  pinMode(S2,OUTPUT);
  pinMode(S3,OUTPUT);
  //pinMode(SIG,OUTPUT);

}

void loop()
{
  //SE HACEN LAS COMBINACIONES BINARIAS DE CERO A 15 PARA ACTIVAR UNA CANAL
  //SE ACTIVA CANAL
 seleccion_canal(0);
int bits = analogRead(A0);
Serial.println(bits);
delay(50);


}


domingo, 30 de octubre de 2022

SOLUCION al error de conexión BLUETOOTH de APPINVENTOR con el modulo HC0...

código para descargar de la aplicación de appinventor




//#include <SoftwareSerial.h>
//para este ejemplo se usara la biblioteca myserial, si usa la nativa de arduino y tiene algun compoenente conectado a el desconectelo mientras envia
//SoftwareSerial mySerial(16, 17); // RX, TX//pines de conexion de un puerto auxiliar de comunicacion
int led1=13;
int led2=2;
char DATO;
void setup()
{

 
  Serial.begin(9600);//configura la velocidad de comunicacion serial hacia el computador y pines, esta biblioteca
  //comparte los pines fisicos del arduino junto los del pc
  //mySerial.begin(9600);//configuro la velocidad de comunicacion de los pines a usar
  //mySerial.println("buenvenidos");//sirve para imprimir un mensaje por el puerto que usted declare
  Serial.println("bienvenido");//imprime un mensaje por el puerto serie hacia el computador por el puerto nativo del pc
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  digitalWrite(led2,LOW);//apaga un led
  digitalWrite(led1,LOW);//apaga un led
  delay(2000);
}

void loop()
{
 
  if(Serial.available()>0)
  {    
          DATO = Serial.read(); //LEE LOS DATOS DEL PUERTO SERIA Y LOS ALMACENA EN DATO
 /////////////////////////////////////////////////////////////////////////////////////////          
          Serial.println(DATO);
          if(DATO == '1')//si la letra que llega es A el servo se coloca en cero grados
          {
           digitalWrite(led1,HIGH);//prende un led
           Serial.println("LED PIN 26 ENCENDIDO");//imprime un mensaje por el puerto serie hacia el computador
          }
//////////////////////////////////////////////////////////////////////////////////////////
          if(DATO == '2')//si la letra que llega es 1 el servo se coloca en cero grados
          {
            digitalWrite(led1,LOW);//apaga un led
            Serial.println("LED PIN 26 APAGADO");//imprime un mensaje por el puerto serie hacia el computador
          }
//////////////////////////////////////////////////////////////////////////////////////////
          if(DATO == '3')//si la letra que llega es A el servo se coloca en cero grados
          {
           digitalWrite(led2,HIGH);//prende un led
           Serial.println("LED PIN 26 ENCENDIDO");//imprime un mensaje por el puerto serie hacia el computador
          }
//////////////////////////////////////////////////////////////////////////////////////////
          if(DATO == '4')//si la letra que llega es 1 el servo se coloca en cero grados
          {
            digitalWrite(led2,LOW);//apaga un led
            Serial.println("LED PIN 26 APAGADO");//imprime un mensaje por el puerto serie hacia el computador
          }
//////////////////////////////////////////////////////////////////////////////////////////
             
             
  }
}