Diferència entre revisions de la pàgina «Calculadora Bluetooth»

De Wiket
Salta a la navegació Salta a la cerca
Línia 14: Línia 14:
  
 
<pre>#include <SoftwareSerial.h>
 
<pre>#include <SoftwareSerial.h>
 +
//fem servir la biblioteca de programes SoftwareSerial
 +
//ja que te funcions que necessitarem per al mòdul bluetooth
 
#define segA 2
 
#define segA 2
 
#define segB 3
 
#define segB 3
Línia 21: 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
  
 
void setup(){
 
void setup(){
Línia 32: Línia 37:
 
         pinMode(i, OUTPUT);
 
         pinMode(i, OUTPUT);
 
     }
 
     }
 +
    //inicialitzem 9 variables de sortida
 
}
 
}
  
Línia 41: Línia 47:
 
       int n2=10;
 
       int n2=10;
 
       int resultat;
 
       int resultat;
 +
      //creem variables per ús posterior
 
      
 
      
 
       if (BT1.available()){
 
       if (BT1.available()){
Línia 48: 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>9 || n1<0);
 
           }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 68: Línia 83:
 
              
 
              
 
           }while(n2>9 || n2<0);
 
           }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 82: 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 176: 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 181: Línia 206:
 
   delay(200);
 
   delay(200);
 
}
 
}
 +
 
</pre>
 
</pre>
  
 
==Imatges==
 
==Imatges==
 
     [[Fitxer:display.png]]
 
     [[Fitxer:display.png]]

Revisió del 16:49, 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

Combinacion.png

Codi

#include <SoftwareSerial.h>
//fem servir la biblioteca de programes SoftwareSerial
//ja que te 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);
}

Imatges

    Display.png