Calculadora Bluetooth

De Wiket
Salta a la navegació Salta a la cerca

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

Combinacion.png

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);
}

Imatges

    Display.png