//El Perceptron como AND,OR,NOT,XOR embebido
//04-03-2024
//JEAL, SBA, AFRI, RJTO
//Declaracion de Variables
float hand,hor,hnot,hxor,biasand,biasor,biasnot,biasxor;
int salidaand= 32, yand;
int salidaor= 33, yor;
int salidanot= 25, ynot;
int salidaxor= 26, yxor;
byte la,lb;
int ia=la;
int ib=lb;
int ha=hand;
int ho=hor;
int hn=hnot;
int hx=hxor;
int ba=biasand;
int bo=biasor;
int bn=biasnot;
int bx=biasxor;
void escalon_unitario_and();
void escalon_unitario_or();
void escalon_unitario_not();
void escalon_unitario_xor();
#include <LiquidCrystal.h>
LiquidCrystal lcd (22,21,5,18,23,19); //pines a conectar la LCD al NODE-MCU
void setup() {
Serial.begin (9600);
lcd.begin(0*27, 20 ,4);
pinMode (la, INPUT);
pinMode (lb, INPUT);
pinMode (salidaand,OUTPUT);
pinMode (salidaor,OUTPUT);
pinMode (salidanot,OUTPUT);
pinMode (salidaxor,OUTPUT);
}
//Logica de Funcionamiento
void loop() {
la = digitalRead (4);
lb = digitalRead (0);
//Mensaje de Compuerta AND
biasand = (-1);
lcd.setCursor (0,0);
lcd.print("AND:");
lcd.setCursor (4,0);
lcd.print(la);
lcd.setCursor (6,0);
lcd.print(lb);
lcd.setCursor (8,0);
lcd.print(biasand);
lcd.setCursor (15,0);
lcd.print(yand);
//Mensaje Compuerta OR
biasor = (-0.5);
lcd.setCursor (0,1);
lcd.print("OR:");
lcd.setCursor (4,1);
lcd.print(la);
lcd.setCursor (6,1);
lcd.print(lb);
lcd.setCursor (8,1);
lcd.print(biasor);
lcd.setCursor (15,1);
lcd.print(yor);
//Mensaje Compuerta NOT
biasnot = (0.0);
lcd.setCursor (20,0);
lcd.print("NOT:");
lcd.setCursor (24,0);
lcd.print(la);
lcd.setCursor (29,0);
lcd.print(biasnot);
lcd.setCursor (35,0);
lcd.print(ynot);
//Mensaje Compuerta XOR
biasxor = (-1);
lcd.setCursor (20,1);
lcd.print("XOR:");
lcd.setCursor (24,1);
lcd.print(la);
lcd.setCursor (26,1);
lcd.print(lb);
lcd.setCursor (28,1);
lcd.print(biasxor);
lcd.setCursor (35,1);
lcd.print(yxor);
Serial.print (la);
Serial.print (" ");
Serial.print (lb);
//h= xw + b
//y= funcion escalon unitario (h)
// Declaracion de funcion de compuerta AND
hand = ((la*0.6 + lb*0.6) + biasand);
Serial.print(" ");
Serial.println (hand);
Serial.print (" ");
Serial.println (yand);
delay (500);
// Declaracion de funcion de compuerta OR
hor = ((la*0.5 + lb*0.5) + biasor);
Serial.print(" ");
Serial.println (hor);
Serial.print (" ");
Serial.println (yor);
delay (500);
// Declaracion de funcion de compuerta NOT
hnot = (la*(-0.1) + biasnot);
Serial.print(" ");
Serial.println (hnot);
Serial.print (" ");
Serial.println (ynot);
delay (500);
// Declaracion de funcion de compuerta XOR
Serial.print(" ");
Serial.println (hxor);
Serial.print (" ");
Serial.println (yxor);
delay (500);
// Calculo de Salida de las Capas Ocultas
if ((la=LOW, lb=LOW),(la=HIGH,lb=HIGH))
{
yxor= ((la*-1)+(lb*1)+biasxor);
yxor<0;
digitalWrite (salidaxor, LOW);
}
else (la=HIGH,lb=LOW),(la=LOW,lb=HIGH);
{
yxor= ((la*1)+(lb*-1)+biasxor);
yxor>=0;
digitalWrite (salidaxor,HIGH);
}
//Funcion de Escalon Unitario AND
void escalon_unitario_and();
{
if (hand >= 0)
{
yand= 1;
digitalWrite (salidaand, HIGH);
}
else
{
yand= 0;
digitalWrite(salidaand, LOW);
}
}
//Funcion de Escalon Unitario OR
void escalon_unitario_or();
{
if (hor >= 0)
{
yor= 1;
digitalWrite (salidaor, HIGH);
}
else
{
yor= 0;
digitalWrite(salidaor, LOW);
}
}
//Funcion de Escalon Unitario
void escalon_unitario_not();
{
if (hnot >= 0)
{
ynot= 1;
digitalWrite (salidanot, HIGH);
}
else
{
ynot= 0;
digitalWrite(salidanot, LOW);
}
}
}