Hola a toda la Comunidad, soy nuevo en el foro y en el mundo Arduino.
Soy estudiante de Ing Electrónica y estoy a sus ordenes en lo que pueda ayudarles y compartir.
En mis futuros post tratare de contribuir y ayudar a esta comunidad Latina con proyectos que yo mismo he probado, unos serán de mi autoria y otros que he encontrado de Internet.
En este caso les comparto un Código que encontré en Youtube, el cual es un Sumador binario de 4 bits.
//Sumando 1
int A =12;
int B=11;
int C=10;
int D=9;
//Sumando 2
int E=8;
int F=7;
int G=6;
int H=5;
// Resultado
int Carry = 4;
int I =3;
int J=2;
int K=1;
int L=0;
//Variables booleanas
bool a,b,c,d,e,f,g,h,i,j,k,l,carry1,carry2,carry3,carry4;
void setup() {
//Sumando 1
pinMode(A, INPUT);
pinMode(B, INPUT);
pinMode(C, INPUT);
pinMode(D, INPUT);
//Sumando 2
pinMode(E, INPUT);
pinMode(F, INPUT);
pinMode(G, INPUT);
pinMode(H, INPUT);
//Resultado
pinMode(Carry, OUTPUT);
pinMode(I, OUTPUT);
pinMode(J, OUTPUT);
pinMode(K, OUTPUT);
pinMode(L, OUTPUT);
}
void loop() {
//Lee los valores de las entradas digitales
a = digitalRead(A);
b = digitalRead(B);
c = digitalRead(C);
d = digitalRead(D);
e = digitalRead(E);
f = digitalRead(F);
g = digitalRead(G);
h = digitalRead(H);
//Le asigna el valor al primer bit y al carry que genera
l = (!d && h) || (d && !h);
carry1 = d&&h;
//Le asigna el valor al segundo bit y al carry que genera
k = (c && g && carry1) || (c && !g && !carry1) || (!c && g && !carry1) || (!c && !g && carry1);
carry2 = (c && g && carry1) || (c && g && !carry1) || (c && !g && carry1) || (!c && g && carry1);
//Le asigna el valor al tercer bit y al carry que genera
j = (b && f && carry2) || (b && !f && !carry2) || (!b && f && !carry2) || (!b && !f && carry2);
carry3 = (b && f && carry2) || (b && f && !carry2) || (b && !f && carry2) || (!b && f && carry2);
//Le asigna el valor al cuarto bit y al carry que genera
i = (a && e && carry3) || (a && !e && !carry3) || (!a && e && !carry3) || (!a && !e && carry3);
carry4 = (a && e && carry3) || (a && e && !carry3) || (a && !e && carry3) || (!a && e && carry3);
//Enciende los leds correspondientes, segun el valor booleano de su variable correspondiente
//Bit 1
if(l)
digitalWrite(L, HIGH);
else
digitalWrite(L,LOW);
//Bit 2
if(k)
digitalWrite(K, HIGH);
else
digitalWrite(K,LOW);
//Bit 3
if(j)
digitalWrite(J, HIGH);
else
digitalWrite(J,LOW);
//Bit 4
if(i)
digitalWrite(I, HIGH);
else
digitalWrite(I,LOW);
//Carry
if(carry4)
digitalWrite(Carry, HIGH);
else
digitalWrite(Carry,LOW);
//Delay para el loop de 100 ms
delay(100);
}
Autor:Diego Toledo
Ahora bien, si se desea hacerlo Restador, solo es cuestión de poner compuertas orex(or exclusiva) en nuestras entradas de B, y las segundas entradas de nuestras compuertas puentiarlas y mandarlas a un a un swich, anexo imagen .
Yo he echo esa configuración y en la suma la da perfecto, pero en la resta algo esta mal.
Por ejemplo si se suman 2+2=4 pero si se restan 2-2=da 1 en vez de cero.
Por si alguien gusta corregir ese pequeño error en la resta.
Saludos