Diferència entre revisions de la pàgina «Calculadora Bluetooth»
Salta a la navegació
Salta a la cerca
(→Codi) |
(→Codi) |
||
(6 revisions intermèdies per 2 usuaris que no es mostren) | |||
Línia 1: | Línia 1: | ||
− | + | El programa que hem dut a terme té com a objectiu la suma de diferents nombres. El nostre projecte consisteix en, l'usuari descarrega el programa ArduDroid, per exemple, per al seu telèfon. Amb el programa una vegada instal·lat, l'acció és la següent: l'usuari introdueix dos nombres per la seva pantalla, i si la suma d'aquests dos nombres és inferior o igual al numero 9, llavors mostra el resultat al display. | |
==Requeriments== | ==Requeriments== | ||
*Placa '''Arduino Uno''' | *Placa '''Arduino Uno''' | ||
Línia 9: | Línia 9: | ||
==Esquema== | ==Esquema== | ||
− | [[Fitxer: | + | [[Fitxer: combinacion.png || 600px]] |
+ | |||
+ | ==Codi== | ||
<pre>#include <SoftwareSerial.h> | <pre>#include <SoftwareSerial.h> | ||
+ | //fem servir la biblioteca de programes SoftwareSerial | ||
+ | //ja que té funcions que necessitarem per al mòdul bluetooth | ||
#define segA 2 | #define segA 2 | ||
#define segB 3 | #define segB 3 | ||
Línia 19: | Línia 23: | ||
#define segF 7 | #define segF 7 | ||
#define segG 8 | #define segG 8 | ||
+ | //creem constants que ens permetran més endavant encendre o | ||
+ | //apagar els segments connectats als pins indicats | ||
SoftwareSerial BT1(0,1); | SoftwareSerial BT1(0,1); | ||
+ | //incluim els dos pins del bluetooth a la variable BT1 | ||
void setup(){ | void setup(){ | ||
Línia 30: | Línia 37: | ||
pinMode(i, OUTPUT); | pinMode(i, OUTPUT); | ||
} | } | ||
+ | //inicialitzem 9 variables de sortida | ||
} | } | ||
Línia 36: | Línia 44: | ||
char c; | char c; | ||
char b; | char b; | ||
− | int n1; | + | int n1=10; |
− | int n2; | + | int n2=10; |
int resultat; | int resultat; | ||
+ | //creem variables per ús posterior | ||
if (BT1.available()){ | if (BT1.available()){ | ||
Línia 46: | Línia 55: | ||
c = BT1.read(); | c = BT1.read(); | ||
}while(c == NULL); | }while(c == NULL); | ||
+ | //recollim el valor introduït per l'usuari | ||
+ | //sempre que c sigui nul, repeteix | ||
if(isDigit(c)){ | if(isDigit(c)){ | ||
String S1 = String(c); | String S1 = String(c); | ||
n1 = S1.toInt(); | n1 = S1.toInt(); | ||
+ | //transformem c a un string i desprès a un int | ||
+ | //per tal de poder fer operacions matemàtiques amb ell | ||
} | } | ||
− | }while(n1> | + | }while(n1>9 || n1<0); |
+ | //en el cas de que l'int creat del string sigui més gran | ||
+ | //de 9 o més petit de 0, repetim el bucle. | ||
+ | //Això està fet per no permetre nombres negatius ni | ||
+ | //nombre més grans a 9, ja que no es veurien al display | ||
do{ | do{ | ||
Línia 65: | Línia 82: | ||
} | } | ||
− | }while(n2> | + | }while(n2>9 || n2<0); |
+ | //repetim el proccés per b i n2 | ||
resultat = n1 + n2; | resultat = n1 + n2; | ||
+ | //calculem el nombre resultant de la suma de n1+n2 | ||
+ | //creem un switch, amb la variable resultat, que ens permetrà, | ||
+ | //depenent del valor de resultat, engegar un segment o un altre. | ||
+ | //Amb diverses combinacions, aconseguim mostrar un nombre. | ||
switch(resultat){ | switch(resultat){ | ||
Línia 80: | Línia 102: | ||
digitalWrite(segG, LOW); | digitalWrite(segG, LOW); | ||
break; | break; | ||
+ | //Posant en HIGH un segment, l'activem i en Low | ||
+ | //el deixem apagat. | ||
+ | //Aquest en particular, es mostrarà un 0 | ||
case 1: | case 1: | ||
Línia 174: | Línia 199: | ||
Serial.write("Error, el resultat ha de trobar-se entre 0-9"); | Serial.write("Error, el resultat ha de trobar-se entre 0-9"); | ||
break; | break; | ||
+ | //en el cas de que el resultat sigui un nombre més gran a 9 o | ||
+ | //inferior a 0, sortirà aquest error | ||
} | } | ||
} | } | ||
Línia 179: | Línia 206: | ||
delay(200); | delay(200); | ||
} | } | ||
+ | |||
</pre> | </pre> | ||
==Imatges== | ==Imatges== | ||
[[Fitxer:display.png]] | [[Fitxer:display.png]] |
Revisió de 16:58, 24 maig 2016
El programa que hem dut a terme té com a objectiu la suma de diferents nombres. El nostre projecte consisteix en, l'usuari descarrega el programa ArduDroid, per exemple, per al seu telèfon. Amb el programa una vegada instal·lat, l'acció és la següent: l'usuari introdueix dos nombres per la seva pantalla, i si la suma d'aquests dos nombres és inferior o igual al numero 9, llavors mostra el resultat al display.
Requeriments
- Placa Arduino Uno
- Bluetooth (Preferiblement HC-06)
- 7 Segment Display
- Protoboard
- 4 (Bluetooth) + 8 (7 Segment Display) cables
- Una Resistencia (3 Bandes: Taronja, Blau, Marró; Tolerància: Or)
Esquema
Codi
#include <SoftwareSerial.h> //fem servir la biblioteca de programes SoftwareSerial //ja que té funcions que necessitarem per al mòdul bluetooth #define segA 2 #define segB 3 #define segC 4 #define segD 5 #define segE 6 #define segF 7 #define segG 8 //creem constants que ens permetran més endavant encendre o //apagar els segments connectats als pins indicats SoftwareSerial BT1(0,1); //incluim els dos pins del bluetooth a la variable BT1 void setup(){ Serial.begin(9600); BT1.begin(9600); for (int i=2;i<9;i++){ pinMode(i, OUTPUT); } //inicialitzem 9 variables de sortida } void loop(){ char c; char b; int n1=10; int n2=10; int resultat; //creem variables per ús posterior if (BT1.available()){ do{ do{ c = BT1.read(); }while(c == NULL); //recollim el valor introduït per l'usuari //sempre que c sigui nul, repeteix if(isDigit(c)){ String S1 = String(c); n1 = S1.toInt(); //transformem c a un string i desprès a un int //per tal de poder fer operacions matemàtiques amb ell } }while(n1>9 || n1<0); //en el cas de que l'int creat del string sigui més gran //de 9 o més petit de 0, repetim el bucle. //Això està fet per no permetre nombres negatius ni //nombre més grans a 9, ja que no es veurien al display do{ do{ b = BT1.read(); }while(b == NULL); if(isDigit(b)){ String S2 = String(b); n2 = S2.toInt(); } }while(n2>9 || n2<0); //repetim el proccés per b i n2 resultat = n1 + n2; //calculem el nombre resultant de la suma de n1+n2 //creem un switch, amb la variable resultat, que ens permetrà, //depenent del valor de resultat, engegar un segment o un altre. //Amb diverses combinacions, aconseguim mostrar un nombre. switch(resultat){ case 0: digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, HIGH); digitalWrite(segG, LOW); break; //Posant en HIGH un segment, l'activem i en Low //el deixem apagat. //Aquest en particular, es mostrarà un 0 case 1: digitalWrite(segA, LOW); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, LOW); break; case 2: digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, LOW); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, LOW); digitalWrite(segG, HIGH); break; case 3: digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, HIGH); break; case 4: digitalWrite(segA, LOW); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; case 5: digitalWrite(segA, HIGH); digitalWrite(segB, LOW); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, LOW); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; case 6: digitalWrite(segA, HIGH); digitalWrite(segB, LOW); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; case 7: digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, LOW); break; case 8: digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; case 9: digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, LOW); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; defaul: Serial.write("Error, el resultat ha de trobar-se entre 0-9"); break; //en el cas de que el resultat sigui un nombre més gran a 9 o //inferior a 0, sortirà aquest error } } delay(200); }