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

De Wiket
Salta a la navegació Salta a la cerca
(Es crea la pàgina amb « ==Requeriments== *Placa '''Arduino Uno''' *'''Bluetooth''' (Preferiblement ''HC-06'') *'''7 Segment Display''' *'''Protoboard''' *'''4''' (''Bluetooth'') + '''8''' ('...».)
 
 
(11 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 6: Línia 6:
 
*'''Protoboard'''
 
*'''Protoboard'''
 
*'''4''' (''Bluetooth'') + '''8''' (''7 Segment Display'') cables
 
*'''4''' (''Bluetooth'') + '''8''' (''7 Segment Display'') cables
*Una '''Resistencia''' (3 Bandes: ''Taronja, Blau, Marró''; Tolerància: ''Platejat'')
+
*Una '''Resistencia''' (3 Bandes: ''Taronja, Blau, Marró''; Tolerància: ''Or'')
  
 
==Esquema==
 
==Esquema==
[[Fitxer:encaranohies.png]]
+
[[Fitxer: combinacion.png || 600px]]
  
 
==Codi==
 
==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 20: 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(){
 +
 +
    Serial.begin(9600);
 +
    BT1.begin(9600);
  
void setup()
+
    for (int i=2;i<9;i++){
  {
+
        pinMode(i, OUTPUT);
      Serial.begin(9600);
+
    }
      BT1.begin(9600);
+
    //inicialitzem 9 variables de sortida
 +
}
  
      for (int i=2;i<9;i++){
+
void loop(){
          pinMode(i, OUTPUT);
 
      }
 
  }
 
  
void loop()
+
      char c;
  {
+
      char b;
      if (BT1.available()){
+
      int n1=10;
 +
      int n2=10;
 +
      int resultat;
 +
      //creem variables per ús posterior
 +
   
 +
      if (BT1.available()){
 
           do{
 
           do{
 
              
 
              
 
             do{
 
             do{
               char 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);
               int 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>10 || 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{
 
              
 
              
 
             do{
 
             do{
               char b = BT1.read();
+
               b = BT1.read();
 
             }while(b == NULL);
 
             }while(b == NULL);
 
              
 
              
 
             if(isDigit(b)){
 
             if(isDigit(b)){
 
               String S2 = String(b);
 
               String S2 = String(b);
               int n2 = S2.toInt();
+
               n2 = S2.toInt();
 
             }
 
             }
 
              
 
              
           }while(n2>10 || n2<0);
+
           }while(n2>9 || n2<0);
 +
          //repetim el proccés per b i n2
 
                
 
                
           int 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 75: 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 169: 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
 
           }
 
           }
 
       }
 
       }
 
        
 
        
 
   delay(200);
 
   delay(200);
  }</pre>
+
}
 +
 
 +
</pre>
 +
 
 +
==Imatges==
 +
    [[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

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