Diferència entre revisions de la pàgina «Calculadora Bluetooth»
Salta a la navegació
Salta a la cerca
(→Codi) |
(→Codi) |
||
Línia 15: | Línia 15: | ||
<pre>#include <SoftwareSerial.h> | <pre>#include <SoftwareSerial.h> | ||
//fem servir la biblioteca de programes SoftwareSerial | //fem servir la biblioteca de programes SoftwareSerial | ||
− | //ja que | + | //ja que té funcions que necessitarem per al mòdul bluetooth |
#define segA 2 | #define segA 2 | ||
#define segB 3 | #define segB 3 |
Revisió del 16:57, 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 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); }