Basketduino: Codigo

download Basketduino: Codigo

of 37

Transcript of Basketduino: Codigo

  • 8/2/2019 Basketduino: Codigo

    1/37

    /************************************************************************************1! ! ! ! ! ! Bibliotecas de funciones y clases2************************************************************************************/3#include "FlexiTimer2.h"4#include "Metro.h"5#include "Display4x7.h"6#include "Piezoelectrico.h"7#include "Pulsador.h"8#include "PushButtonRedRing.h"9#include "LedAnalogico.h"10

    #include "LedDigital.h"11 #include "SensorCanasta.h"1213

    14

    /************************************************************************************15! ! ! ! ! ! ! Pines de entrada y salida16************************************************************************************/17const int pinPiezoelectrico = 8;18

    19

    const int pinBotonAceptar = 7;20const int pinBotonDerecho = 2;21const int pinBotonIzquierdo = 4;22

    23

    const int pinSensorCanasta1 = A0;24const int pinSensorCanasta2 = A1;25

    26

    const int pinLedRjug1 = 3;27const int pinLedAjug1 = 5;28const int pinLedVjug1 = 6;29const int pinLedBjug1 = 12 ;30const int pinLedRjug2 = 9;31const int pinLedAjug2 = 10 ;32const int pinLedVjug2 = 11 ;33const int pinLedBjug2 = 13 ;34

    35

    36

    /************************************************************************************37! ! ! Objetos para controlar los dispositivos del sistema38************************************************************************************/39Display4x7 pantalla;40!41Piezoelectrico bocina (pinPiezoelectrico);42!43Pulsador botonDerecho (pinBotonDerecho);44Pulsador botonIzquierdo (pinBotonIzquierdo);45PushButtonRedRing botonAceptar (pinBotonAceptar);46!47

    SensorCanasta canastaJugador1 (pinSensorCanasta1);48 SensorCanasta canastaJugador2 (pinSensorCanasta2);4950

    LedAnalogico ledRjug1 (pinLedRjug1, false );51LedAnalogico ledAjug1 (pinLedAjug1, false );52LedAnalogico ledVjug1 (pinLedVjug1, false );53LedDigital ! ledBjug1 (pinLedBjug1, false );54LedAnalogico ledRjug2 (pinLedRjug2, false );55LedAnalogico ledAjug2 (pinLedAjug2, false );56LedAnalogico ledVjug2 (pinLedVjug2, false );57LedDigital ! ledBjug2 (pinLedBjug2, false );58

    59

    60

    /************************************************************************************61! ! ! Variables globales necesarias para los juegos y menus62************************************************************************************/63int segundosRestantes;64int opcion = 1;65

  • 8/2/2019 Basketduino: Codigo

    2/37

    const int numeroDeOpciones = 4;6667

    /************************************************************************************68! ! ! ! ! ! ! ! ! ! SETUP69************************************************************************************/70void setup () {71! Serial.begin( 9600 ); !! // Necesario para el Display4x772 73! // Resetear la pantalla para poner el brillo al maximo, borrar su contenido y74! // desactivar todos los separadores75

    ! pantalla.resetear();76 77! // Apagar todos los leds78! ledRjug1.apagar();79! ledAjug1.apagar();80! ledVjug1.apagar();81! ledBjug1.apagar();82! ledRjug2.apagar();83! ledAjug2.apagar();84! ledVjug2.apagar();85! ledBjug2.apagar();86

    87

    ! // Establecer el reloj para los juegos en los que sea necesario88! FlexiTimer2::set( 500 , tic);89!90! // Test inicial en el que se activaran los leds y la pantalla91! // para comprobar su que funcionan correctamente92! test();93}94

    95

    /************************************************************************************96! ! ! ! ! ! ! ! ! ! LOOP97************************************************************************************/98void loop () {99

    menu();100

    }101102

    103

    /************************************************************************************104! ! ! ! ! ! ! ! ! MENU PRINCIPAL105************************************************************************************/106void menu() {107 ! String opcionActual = "OPC" ;108

    opcionActual += opcion;109pantalla.mostrar(opcionActual);110

    111! // Si se pulsa el boton aceptar112!

    if (botonAceptar.presionado()) {113

    ! ! tratarOpcion(opcion);114! }115!116! // Si se pulsa el boton derecho117! if (botonDerecho.presionado()) {118! ! String opcionAnterior = "OPC" ;119

    opcionAnterior += opcion;120! !121! ! // Incremetar variable opcion, si superamos el numero de opciones volver a 1122! ! opcion++;123! ! if (opcion > numeroDeOpciones) {124! ! ! opcion = 1;125! ! }126! !127! ! String opcionActual = "OPC" ;128

    opcionActual += opcion;129! !130

  • 8/2/2019 Basketduino: Codigo

    3/37

    ! ! // Actualizar la pantalla del dispositivo131! ! pantalla.deslizarPalabraFueraDerIzq(opcionAnterior, 500 );132! ! pantalla.deslizarPalabraDentroDerIzq(opcionActual, 500 );133! }134!135! // Si se pulsa el boton izquierdo136! if (botonIzquierdo.presionado()) {137! ! String opcionAnterior = "OPC" ;138

    opcionAnterior += opcion;139! !140

    ! ! // Decrementar variable opcion, si llegamos a 0 volver a la opcion mas alta141 ! ! opcion--;142! ! if (opcion < 1) {143! ! ! opcion = numeroDeOpciones;144! ! }145! !146! ! String opcionActual = "OPC" ;147

    opcionActual += opcion;148! !149! ! // Actualizar la pantalla del dispositivo150! ! pantalla.deslizarPalabraFueraIzqDer(opcionAnterior, 500 );151! ! pantalla.deslizarPalabraDentroIzqDer(opcionActual, 500 );152! } !153}154

    155

    void tratarOpcion ( int opcion) {156! switch (opcion) {157! ! case 1: juego1vs1();158! ! ! ! break ;159! ! case 2: juego1vs1conBonus();160! ! ! ! break ;161! ! case 3: juegoAsno();162! ! ! ! break ;163! ! case 4: juego11();164! ! ! ! break ;165

    ! ! default :166 ! ! ! ! break ;167! }168}169

    170

    171

    /************************************************************************************172! ! ! ! ! ! ! ! ! MODOS DE JUEGO173************************************************************************************/174

    175

    /*176! Juego 1vs1: Partida jugador contra jugador durante 60 segundos, gana el jugador177!

    que haya anotado mas puntos al final de la partida178

    */179void juego1vs1 () {180! // Marcadores para los jugadores181! int puntosJugador1 = 0;182! int puntosJugador2 = 0;183 184! boolean pulsadorCanasta1Pulsado = false ;185! boolean pulsadorCanasta2Pulsado = false ;186

    187

    ! // Cuenta atras188bocina.charge();189

    190

    ! // Iniciar reloj191! segundosRestantes = 60 ;192! FlexiTimer2::start();193

    194

    ! // Jugar partida hasta llegar a cero195

  • 8/2/2019 Basketduino: Codigo

    4/37

    ! while (segundosRestantes >= 0) {196! ! // Marcador, con los dos digitos de la izquierda para la puntuacion del jugador197! ! // y los dos digitos de la derecha para la puntuacion del jugador 2198! ! int marcador = puntosJugador1 * 100 + puntosJugador2;199 200! ! // Comprobar si ha anotado algun jugador201! ! if (canastaJugador1.presionado() && !pulsadorCanasta1Pulsado) {202! ! ! pulsadorCanasta1Pulsado = true ;203 204! ! ! if (puntosJugador1 < 99 ) {205

    ! ! ! ! puntosJugador1++;206 ! ! ! }207 208! ! ! delay( 500 );209! ! }210 211! ! if (canastaJugador2.presionado() && !pulsadorCanasta2Pulsado) {212! ! ! pulsadorCanasta2Pulsado = true ;213 214! ! ! if (puntosJugador2 < 99 ) {215! ! ! ! puntosJugador2++;216! ! ! }217 218! ! ! delay( 500 );219! ! }220 221! ! if (!canastaJugador1.presionado()) {222! ! ! pulsadorCanasta1Pulsado = false ;223! ! }224 225! ! if (!canastaJugador2.presionado()) {226! ! ! pulsadorCanasta2Pulsado = false ;227! ! }228

    229

    ! ! // Mostrar el marcador o el tiempo restante230

    ! ! // El tiempo restante se muestra cuando:231 ! ! // - De 60 a 57232! ! // - De 45 a 42233! ! // - De 30 a 27234! ! // - De 10 a 0235! ! // El resto del tiempo se muesta la puntuacion236! ! Serial.print( "v" ); // Restear la pantalla 4x7segmentos237! ! if ((segundosRestantes = 60 ) || (segundosRestantes238! ! ! // Mostrar los segundos restantes239! ! ! // Desactivar separador240! ! ! Serial.write(byte( 119 )); // Descctivar seperador241! ! ! Serial.write(byte( 0)); // Desactivar seperador242

    243

    ! ! ! if (segundosRestantes >= 10 )244! ! ! ! Serial.print( "x" );245! ! ! else246! ! ! ! Serial.print( "x0" );247

    248

    ! ! ! Serial.print(segundosRestantes);249! ! ! Serial.print( "x" );250! ! }251! ! else {252! ! ! // Mostrar marcador253! ! ! Serial.write(byte( 119 )); // Activar seperador254! ! ! Serial.write(byte( 16 )); // Activar seperador255 256! ! ! if (marcador < 10 )257! ! ! ! Serial.print( "000" );258! ! ! else if (marcador < 100 )259! ! ! ! Serial.print( "00" );260

  • 8/2/2019 Basketduino: Codigo

    5/37

    ! ! ! else if (marcador < 1000 )261! ! ! ! Serial.print( "0" );262 263! ! ! Serial.print(marcador);264! ! }265! }266! FlexiTimer2::stop();267 268! // Desactivar separador269! Serial.write(byte( 119 )); // Desactivar seperador270

    ! Serial.write(byte( 0)); // Desactivar seperador271272! // GAME OVER273! pantalla.formarPalabraDerIzq( "GANE");274! delay( 1000 );275! pantalla.formarPalabraDerIzq( "OUER");276! delay( 2000 );277 278! // Comprobar quien ha ganado279! mostrarGanador(puntosJugador1, puntosJugador2);280}281

    282

    283

    /*284! Juego 1vs1 con bonus: Partida jugador contra jugador durante 60 segundos, cuando u285! jugador anota varias canastas en un intervalo corto de tiempo consigue un bonus286! y sus canastas valen 2 o 3 puntos. Gana la partida el jugador que haya conseguido287! mas puntos al final de los 60 segundos288*/289void juego1vs1conBonus() {290! // Marcadores para los jugadores291! int puntosJugador1 = 0;292! int puntosJugador2 = 0;293! int bonusJugador1 = 0;294! int bonusJugador2 = 0;295

    ! boolean pulsadorCanasta1Pulsado = false ;296 ! boolean pulsadorCanasta2Pulsado = false ;297298

    ! // Cuenta atras299bocina.charge();300

    301

    ! // Iniciar reloj302! segundosRestantes = 60 ;303! FlexiTimer2::start();304! Metro metronomo( 100 );305

    306

    ! // Jugar partida hasta llegar a cero307!

    while (segundosRestantes >= 0) {308

    ! // Marcador, con los dos digitos de la izquierda para la puntuacion del jugado309 ! // y los dos digitos de la derecha para la puntuacion del jugador 2310 ! int marcador = puntosJugador1 * 100 + puntosJugador2;311 312! ! // Comprobar si ha anotado algun jugador313 ! if (canastaJugador1.presionado() && !pulsadorCanasta1Pulsado) {314! ! ! pulsadorCanasta1Pulsado = true ;315

    316

    ! ! ! if (bonusJugador1 >= 300 ) {317! ! ! ! if (puntosJugador1 < 96 )318! ! ! ! ! puntosJugador1+= 3;319! ! ! ! else if (puntosJugador1 >= 96 )320! ! ! ! ! puntosJugador1 = 99 ;321! ! ! } else if (bonusJugador1 >= 200 ) {322! ! ! ! if (puntosJugador1 < 97 )323! ! ! ! ! puntosJugador1 += 2;324! ! ! ! else if (puntosJugador1 >= 97 )325

  • 8/2/2019 Basketduino: Codigo

    6/37

    ! ! ! puntosJugador1 = 99 ;326! ! ! } else {327! ! ! ! if (puntosJugador1 < 98 )328! ! ! ! ! puntosJugador1 += 1;329! ! ! ! else if (puntosJugador1 >= 98 )330! ! ! ! ! puntosJugador1 = 99 ;331! ! }332 333! ! ! bonusJugador1 += 100 ;334! ! ! delay( 500 );335

    ! ! }336 337! ! if (canastaJugador2.presionado() && !pulsadorCanasta2Pulsado) {338! ! ! pulsadorCanasta2Pulsado = true ;339 340! ! ! if (bonusJugador2 >= 300 ) {341! ! ! ! if (puntosJugador2 < 96 )342! ! ! ! ! puntosJugador2+= 3;343! ! ! ! else if (puntosJugador2 >= 96 )344! ! ! ! ! puntosJugador2 = 99 ;345! ! ! } else if (bonusJugador2 >= 200 ) {346! ! ! ! if (puntosJugador2 < 97 )347! ! ! ! ! puntosJugador2 += 2;348! ! ! ! else if (puntosJugador2 >= 97 )349! ! ! ! ! puntosJugador2 = 99 ;350! ! ! } else {351! ! ! ! if (puntosJugador2 < 98 )352! ! ! ! ! puntosJugador2 += 1;353! ! ! ! else if (puntosJugador2 >= 98 )354! ! ! ! ! puntosJugador2 = 99 ;355 ! ! }356 357 ! ! bonusJugador2 += 100 ;358! ! ! delay( 500 );359! ! }360

    361 ! ! encenderLedsBonus(bonusJugador1, bonusJugador2);362 363! ! if (!canastaJugador1.presionado()) {364! ! ! pulsadorCanasta1Pulsado = false ;365! ! }366 367! ! if (!canastaJugador2.presionado()) {368! ! ! pulsadorCanasta2Pulsado = false ;369! ! }370 371! ! if (metronomo.check() == 1) {372! ! !

    if (bonusJugador1 < 5)373

    ! ! ! ! bonusJugador1 = 0;374! ! ! else375! ! ! ! bonusJugador1 -= 5;376 377! ! ! if (bonusJugador2 < 5)378! ! ! ! bonusJugador2 = 0;379! ! ! else 380! ! ! ! bonusJugador2 -= 5;381! ! }382

    383

    ! ! // Mostrar el marcador o el tiempo restante384! ! // El tiempo restante se muestra cuando:385! ! // - De 60 a 57386! ! // - De 45 a 42387! ! // - De 30 a 27388! ! // - De 10 a 0389! ! // El resto del tiempo se muesta la puntuacion390

  • 8/2/2019 Basketduino: Codigo

    7/37

    ! ! Serial.print( "v" ); // Restear la pantalla 4x7segmentos391! ! if ((segundosRestantes = 60 ) || (segundosRestantes392! ! ! // Mostrar los segundos restantes393! ! ! // Desactivar separador394! ! ! Serial.write(byte( 119 )); // Descctivar seperador395! ! ! Serial.write(byte( 0)); // Desactivar seperador396 397! ! ! if (segundosRestantes >= 10 )398! ! ! ! Serial.print( "x" );399! ! ! else400

    ! ! ! ! Serial.print( "x0" );401402! ! ! Serial.print(segundosRestantes);403! ! ! Serial.print( "x" );404! ! }405! ! else {406! ! ! // Mostrar marcador407! ! ! Serial.write(byte( 119 )); // Activar seperador408! ! ! Serial.write(byte( 16 )); // Activar seperador409 410! ! ! if (marcador < 10 )411! ! ! ! Serial.print( "000" );412! ! ! else if (marcador < 100 )413! ! ! ! Serial.print( "00" );414! ! ! else if (marcador < 1000 )415! ! ! ! Serial.print( "0" );416 417! ! Serial.print(marcador);418! ! }419! }420 ! FlexiTimer2::stop();421 422! // Desactivar separador423! Serial.write(byte( 119 )); // Desactivar seperador424! Serial.write(byte( 0)); // Desactivar seperador425

    426! // GAME OVER427! pantalla.formarPalabraDerIzq( "GANE");428! delay( 1000 );429! pantalla.formarPalabraDerIzq( "OUER");430! delay( 2000 );431 432! // Comprobar quien ha ganado433! mostrarGanador(puntosJugador1, puntosJugador2);434}435

    436

    /*437!

    Juego del Asno438

    ! Implementado como finita maquina de estados439! Estado 1 - Turno J1440! ! Mete canasta -> Transitar al estado 3441! ! Falla canasta -> Transitar al estado 2442! Estado 2 - Turno J2443! ! Mete canasta -> Transitar al estado 4444! ! Falla canasta -> Transitar al estado 1445! Estado 3 - Turno J2446! ! Mete canasta -> Transitar al estado 1447! ! Falla canasta -> Transitar al estado 1 y sumar error al jugador 2448! Estado 4 - Turno J1449! ! Mete canasta -> Transitar al estado 2450! ! Falla canasta -> Transitar al estado 2 y sumar error al jugador 1451*/452void juegoAsno() {453! int estadoActual = 1;454! int numErroresJ1 = 0;455

  • 8/2/2019 Basketduino: Codigo

    8/37

    ! int numErroresJ2 = 0;456!457! // Cuenta atras458

    bocina.charge();459mostrarLetras(numErroresJ1);460ledBjug1.encender();461ledBjug2.apagar();462

    !463! // Mientras que ningun jugador haya perdido seguir jugando464! while (numErroresJ1 < 4 && numErroresJ2 < 4) {465

    ! ! // Si se ha metido canasta466 ! ! if (canastaJugador1.presionado()) {467! ! ! switch (estadoActual) {468! ! ! ! case 1:469! ! ! ! ! estadoActual = 3;470! ! ! ! ! mostrarLetras(numErroresJ2);471! ! ! ! ! ledBjug2.encender();472! ! ! ! ! ledBjug1.apagar();473! ! ! ! ! break ;474! ! ! ! case 2:475! ! ! ! ! estadoActual = 4;476! ! ! ! ! mostrarLetras(numErroresJ1);477! ! ! ! ! ledBjug1.encender();478! ! ! ! ! ledBjug2.apagar();479! ! ! ! ! break ;480! ! ! ! case 3:481! ! ! ! ! estadoActual = 1;482! ! ! ! ! mostrarLetras(numErroresJ1);483! ! ! ! ! ledBjug1.encender();484! ! ! ! ! ledBjug2.apagar();485! ! ! ! ! break ;486! ! ! ! case 4:487! ! ! ! ! estadoActual = 2;488! ! ! ! ! mostrarLetras(numErroresJ1);489! ! ! ! ! ledBjug2.encender();490

    ! ! ! ! ! ledBjug1.apagar();491 ! ! ! ! ! break ;492! ! ! ! default :493! ! ! ! ! break ;494! ! ! }495! ! }496! ! // Se no se ha encestado497! ! if (botonAceptar.presionado()) {498! ! ! switch (estadoActual) {499! ! ! ! case 1:500! ! ! ! ! estadoActual = 2;501! ! ! ! ! mostrarLetras(numErroresJ2);502! ! ! ! !

    ledBjug2.encender();503

    ! ! ! ! ! ledBjug1.apagar();504! ! ! ! ! break ;505! ! ! ! case 2:506! ! ! ! ! estadoActual = 1;507! ! ! ! ! mostrarLetras(numErroresJ1);508! ! ! ! ! ledBjug1.encender();509! ! ! ! ! ledBjug2.apagar();510! ! ! ! ! break ;511! ! ! ! case 3:512! ! ! ! ! estadoActual = 1;513! ! ! ! ! numErroresJ2++;514! ! ! ! ! mostrarLetras(numErroresJ2);515! ! ! ! ! delay( 3000 );516! ! ! ! ! mostrarLetras(numErroresJ1);517! ! ! ! ! ledBjug1.encender();518! ! ! ! ! ledBjug2.apagar();519! ! ! ! ! break ;520

  • 8/2/2019 Basketduino: Codigo

    9/37

    ! ! ! ! case 4:521! ! ! ! ! estadoActual = 2;522! ! ! ! ! numErroresJ1++;523! ! ! ! ! mostrarLetras(numErroresJ1);524! ! ! ! ! delay( 3000 );525! ! ! ! ! mostrarLetras(numErroresJ2);526! ! ! ! ! ledBjug2.encender();527! ! ! ! ! ledBjug1.apagar();528! ! ! ! ! break ;529! ! ! ! default :530

    ! ! ! ! ! break ;531 ! ! ! }532! ! }533! }534 535! delay( 3000 );536! if (numErroresJ1 == 4){537! ! pantalla.mostrar( "J1" );538! ! delay( 2000 );539! ! pantalla.mostrar( "LOSE" );540! ! delay( 4000 );541! ! pantalla.mostrar( "J2" );542! ! delay( 2000 );543! ! pantalla.mostrar( "GANA");544! ! delay( 4000 );545! }else if (numErroresJ2 == 4){546! ! pantalla.mostrar( "J2" );547! ! delay( 2000 );548! ! pantalla.mostrar( "LOSE" );549! ! delay( 4000 );550! ! pantalla.mostrar( "J1" );551! ! delay( 2000 );552! ! pantalla.mostrar( "GANA");553! ! delay( 4000 );554! }555

    }556557

    void mostrarLetras( int numErrores){558! switch (numErrores){559! ! case 1: pantalla.mostrar( "A" );560! ! ! break ;561! ! case 2: pantalla.mostrar( "AS" );562 break ;563! ! case 3: pantalla.mostrar( "ASN");564 break ;565! ! case 4: pantalla.mostrar( "ASNO");566 break ;567! !

    default :568

    break ;569! }570}571

    572

    void juego11 () {573! // Marcadores para los jugadores574! int puntosJugador1 = 0;575! int puntosJugador2 = 0;576! bool turnoJ1 = true ;577!578! ledBjug1.encender();579

    ledBjug2.apagar();580581

    ! // Cuenta atras582! bocina.charge();583!584! // Continuar la partida hasta que uno de los jugadores llegue a 11585

  • 8/2/2019 Basketduino: Codigo

    10/37

    ! while (puntosJugador1 != 11 && puntosJugador2 != 11 ) {586! ! // Marcador, con los dos digitos de la izquierda para la puntuacion del jugado587! ! // y los dos digitos de la derecha para la puntuacion del jugador 2588! ! int marcador = puntosJugador1 * 100 + puntosJugador2;589! !590! ! // Mostrar marcador591! ! Serial.write(byte( 119 )); // Activar seperador592! ! Serial.write(byte( 16 )); // Activar seperador593 594! ! if (marcador < 10 )595

    ! ! ! Serial.print( "000" );596 ! ! else if (marcador < 100 )597! ! ! Serial.print( "00" );598! ! else if (marcador < 1000 )599! ! ! Serial.print( "0" );600 601! ! Serial.print(marcador);602! !603! ! // Si anota canasta604! ! if (canastaJugador1.presionado()) {605! ! ! if (turnoJ1)606! ! ! ! puntosJugador1++;607! ! ! else608! ! ! ! puntosJugador2++;609! ! ! !610! ! ! delay( 500 );611! ! }612! ! // Si no anota613! ! if (botonAceptar.presionado()) {614! ! ! // Cambio de turno615! ! ! turnoJ1 = !turnoJ1;616! ! !617! ! ! // Encender la luz del jugador que sea el turno618! ! ! if (turnoJ1) {619! ! ! ! ledBjug1.encender();620

    ! ! ! ledBjug2.apagar();621 ! ! ! } else {622! ! ! ! ledBjug2.encender();623! ! ! ledpBjug1.apagar();624! ! ! }625! ! !626! ! ! delay( 500 );627! ! }628! }629

    630

    ! pantalla.resetear(); ! // Desactivar separador631 632!

    if (( int )(puntosJugador1 / 100 ) == 11 ){633

    ! ! pantalla.formarPalabraDerIzq( "JUG1" );634! ! delay( 2000 );635! ! pantalla.formarPalabraDerIzq( "GANA");636! ! delay( 2000 );637! }638! else {639! ! pantalla.formarPalabraDerIzq( "JUG2" );640! ! delay( 2000 );641! ! pantalla.formarPalabraDerIzq( "GANA");642! ! delay( 2000 );643! }644}645

    646

    647

    /************************************************************************************648! ! ! ! ! ! ! ! FUNCIONES ADICIONALES649************************************************************************************/650

  • 8/2/2019 Basketduino: Codigo

    11/37

    651

    /*652Muestra por el Display4x7 quien ha sido el ganador de la partida653

    */654void mostrarGanador ( int puntos1, int puntos2) {655! if (puntos1 > puntos2) {656! ! pantalla.mostrar( "GANA");657! ! delay( 1000 );658! ! pantalla.mostrar( "JUG1" );659! ! delay( 1000 );660

    ! } else if (puntos2 > puntos1) {661 ! ! pantalla.mostrar( "GANA");662! ! delay( 1000 );663! ! pantalla.mostrar( "JUG2" );664! ! delay( 1000 );665! } else {666! ! pantalla.mostrar( "IGUA" );667! ! delay( 1000 );668! }669}670

    671

    /*672Marca un tic de reloj, restando 1 a los segundos restantes en cada iteracion673

    */674void tic() {675! segundosRestantes--;676}677

    678

    void palabra () {679! pantalla.deslizarCaracterDerIzq( '1' , 500 );680}681

    682

    /*683! Enciende los leds de bonus de cada jugador684*/685

    void encenderLedsBonus ( int bonusJug1, int bonusJug2) {686 ! if (bonusJug1 >= 300 ) {687! ! ledRjug1.encender( 255 );688! ! ledAjug1.encender( 255 );689! ! ledVjug1.encender( 255 );690! } else if (bonusJug1 >= 200 ) {691! ! ledRjug1.encender( 255 );692! ! ledAjug1.encender( 255 );693! ! ledVjug1.encender(( int )((bonusJug1- 200 ) * 2.55 ));694! } else if (bonusJug1 >= 100 ) {695! ! ledRjug1.encender( 255 );696! ! ledAjug1.encender(( int )((bonusJug1- 100 ) * 2.55 ));697! !

    ledVjug1.encender( 0);698

    ! } else {699! ! ledRjug1.encender(( int )(bonusJug1 * 2.55 ));700! ! ledAjug1.encender( 0);701! ! ledVjug1.encender( 0);702! }703 704! if (bonusJug2 >= 300 ) {705! ! ledRjug2.encender( 255 );706! ! ledAjug2.encender( 255 );707! ! ledVjug2.encender( 255 );708! } else if (bonusJug2 >= 200 ) {709! ! ledRjug2.encender( 255 );710! ! ledAjug2.encender( 255 );711! ! ledVjug2.encender(( int )((bonusJug2- 200 ) * 2.55 ));712! } else if (bonusJug2 >= 100 ) {713! ! ledRjug2.encender( 255 );714! ! ledAjug2.encender(( int )((bonusJug2- 100 ) * 2.55 ));715

  • 8/2/2019 Basketduino: Codigo

    12/37

    ! ! ledVjug2.encender( 0);716! } else {717! ! ledRjug2.encender(( int )(bonusJug2 * 2.55 ));718! ! ledAjug2.encender( 0);719! ! ledVjug2.encender( 0);720! }721}722

    723

    /*724! Enciende y apaga los leds y muestra un mensaje por pantalla para comprobar725

    ! que todos los dispositivos funcionan correctamente726 */727void test () {728! pantalla.mostrar( "HOLA");729! delay( 250 );730!731! ledRjug1.encender();732! ledAjug1.encender();733! ledVjug1.encender();734! ledBjug1.encender();735! ledRjug2.encender();736! ledAjug2.encender();737! ledVjug2.encender();738! ledBjug2.encender();739! delay( 250 );740!741! ledRjug1.apagar();742! ledAjug1.apagar();743! ledVjug1.apagar();744! ledBjug1.apagar();745! ledRjug2.apagar();746! ledAjug2.apagar();747! ledVjug2.apagar();748! ledBjug2.apagar();749! delay( 50 );750

    !751 ! ledRjug1.encender();752! ledAjug1.encender();753! ledVjug1.encender();754! ledBjug1.encender();755! ledRjug2.encender();756! ledAjug2.encender();757! ledVjug2.encender();758! ledBjug2.encender();759! delay( 250 );760!761! ledRjug1.apagar();762!

    ledAjug1.apagar();763

    ! ledVjug1.apagar();764! ledBjug1.apagar();765! ledRjug2.apagar();766! ledAjug2.apagar();767! ledVjug2.apagar();768! ledBjug2.apagar();769!770! pantalla.resetear();771}772

    773

    774

  • 8/2/2019 Basketduino: Codigo

    13/37

    /*1Display4x7.h - Biblioteca para una pantalla de leds de 4x7 segmentos serie2

    3@author: Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco4@version: 1.25

    */6#ifndef Display4x7_h7#define Display4x7_h8

    9

    #include "Arduino.h"10

    11class Display4x7 {12 public :13! Display4x7 ( void );14! void resetear ( void );15! void ajustarBrillo ( int valor);16! void mostrar (String texto);17! void borrar ( void );18! void deslizarCaracterIzqDer ( char caracter, int duracion);19! void deslizarCaracterDerIzq ( char caracter, int duracion);20! void deslizarPalabraDentroIzqDer (String palabra, int duracion);21! void deslizarPalabraDentroDerIzq (String palabra, int duracion);22! void deslizarPalabraFueraIzqDer (String palabra, int duracion);23! void deslizarPalabraFueraDerIzq (String palabra, int duracion);24! void formarPalabraIzqDer (String palabra);25! void formarPalabraDerIzq (String palabra);26};27

    28

    #endif2930

    31

  • 8/2/2019 Basketduino: Codigo

    14/37

    /*1Display4x7.cpp - Biblioteca para una pantalla de leds de 4x7 segmentos serie2@author ! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco3@version ! 1.24

    */56

    #include "Arduino.h"7#include "Display4x7.h"8

    9

    /*10

    ! Constructor para un objeto de la clase Display4x711 */12Display4x7::Display4x7 ( void ) {13! // Resetear pantalla14! Serial.print( "v" );15

    16

    ! // Desactivar separador17! Serial.write(byte( 119 )); // Desactivar seperador18! Serial.write(byte( 0 )); // Desactivar seperador19!20! // Brillo al maximo21! Serial.write(byte( 122 )); ! // Valor para fijar el brillo22! Serial.write(byte( 0 )); ! ! // Fijar el nuevo brillo23!24}25

    26

    /*27! Resetea el display poniendo el brillo al maximo y borrando tanto los caracteres28! mostrados como los separadores que hubiera activados29! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl30! @version ! 1.031! @since ! ! 1.132*/33void Display4x7::resetear ( void ) {34

    Serial.print( "v" ); // rested led screen35

    Serial.write(byte( 122 )); // Brillo al maximo36Serial.write(byte( 0 )); // Brillo al maximo37Serial.print( "xxxx" );38

    39 // Desactivar separador40

    Serial.write(byte( 119 )); // Desactivar seperador41Serial.write(byte( 0 )); // Desactivar seperador42

    }4344

    /*45! Ajusta el brillo del display al valor indicado como porcentaje46! 0 = apagada47!

    100 = brillo maximo48

    ! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl49! @version ! 1.050! @since ! ! 1.151*/52void Display4x7::ajustarBrillo ( int valor) {53 ! if (valor >= 0 && valor

  • 8/2/2019 Basketduino: Codigo

    15/37

    */66void Display4x7::mostrar (String texto) {67! if (texto.length()

  • 8/2/2019 Basketduino: Codigo

    16/37

    ! delay(( int )(duracion/ 5 ));131132

    ! /*133! ! _ _ _ C134! */135! Serial.print( "xxx" );136! Serial.print(caracter);137! delay(( int )(duracion/ 5 ));138

    139

    ! /*140

    ! ! _ _ _ _ 141 ! */142! Serial.print( "xxxx" );143! delay(( int )(duracion/ 5 ));144}145

    146

    /*147! Desliza de derecha a izquierda por el display el caracter pasado148! como argumento con la duracion total indicada como argumento149! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl150! @version ! 1.0151! @since ! ! 1.0152

    */153void Display4x7::deslizarCaracterDerIzq ( char caracter, int duracion) {154! // Restear el display155! Serial.print( "v" );156

    157

    ! /*158! ! _ _ _ C159! */160! Serial.print( "xxx" );161! Serial.print(caracter);162! delay(( int )(duracion/ 5 ));163

    164

    ! /*165

    ! ! _ _ C _ 166 ! */167! Serial.print( "xx" );168! Serial.print(caracter);169! Serial.print( "x" );170! delay(( int )(duracion/ 5 ));171

    172

    ! /*173! ! _ C _ _ 174! */175! Serial.print( "x" );176! Serial.print(caracter);177!

    Serial.print( "xx" );178

    ! delay(( int )(duracion/ 5 ));179180

    ! /*181! ! C _ _ _ 182! */183! Serial.print(caracter);184! Serial.print( "xxx" );185! delay(( int )(duracion/ 5 ));186

    187

    ! /*188! ! _ _ _ _ 189! */190! Serial.print( "xxxx" );191! delay(( int )(duracion/ 5 ));192}193

    194

    /*195

  • 8/2/2019 Basketduino: Codigo

    17/37

    ! Desliza dentro del display una palabra de cuatro caracteres196! desde el lado izquierdo al derecho197! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl198! @version ! 1.0199! @since ! ! 1.2200*/201void Display4x7::deslizarPalabraDentroIzqDer (String palabra, int duracion) {202! if (palabra.length() != 4 )203! ! return ;204!205

    ! // Resetear el display206 ! Serial.print( "v" );207!208! char caracter0 = palabra[ 0 ];209! char caracter1 = palabra[ 1 ];210! char caracter2 = palabra[ 2 ];211! char caracter3 = palabra[ 3 ];212!213! /*214! ! 3 _ _ _ 215! */216! Serial.print(caracter3);217! Serial.print( "xxx" );218! delay(( int )(duracion/ 4 ));219!220! /*221! ! 2 3 _ _ 222! */223! Serial.print(caracter2);224! Serial.print(caracter3);225! Serial.print( "xx" );226! delay(( int )(duracion/ 4 ));227!228! /*229! ! 1 2 3 _ 230

    ! */231 ! Serial.print(caracter1);232! Serial.print(caracter2);233! Serial.print(caracter3);234! Serial.print( "x" );235! delay(( int )(duracion/ 4 ));236!237! /*238! ! 0 1 2 3239! */240! Serial.print(caracter0);241! Serial.print(caracter1);242!

    Serial.print(caracter2);243

    ! Serial.print(caracter3);244}245

    246

    /*247! Desliza dentro del display una palabra de cuatro caracteres248! desde el lado derecho al izquierdo249! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl250! @version ! 1.0251! @since ! ! 1.2252*/253void Display4x7::deslizarPalabraDentroDerIzq (String palabra, int duracion) {254! if (palabra.length() != 4 )255! ! return ;256!257! // Resetear el display258! Serial.print( "v" );259!260

  • 8/2/2019 Basketduino: Codigo

    18/37

    ! char caracter0 = palabra[ 0 ];261! char caracter1 = palabra[ 1 ];262! char caracter2 = palabra[ 2 ];263! char caracter3 = palabra[ 3 ];264!265! /*266! ! _ _ _ 0267! */268! Serial.print( "xxx" );269! Serial.print(caracter0);270

    ! delay(( int )(duracion/ 4 ));271 !272! /*273! ! _ _ 0 1274! */275! Serial.print( "xx" );276! Serial.print(caracter0);277! Serial.print(caracter1);278! delay(( int )(duracion/ 4 ));279!280! /*281! ! _ 0 1 2282! */283! Serial.print( "x" );284! Serial.print(caracter0);285! Serial.print(caracter1);286! Serial.print(caracter2);287! delay(( int )(duracion/ 4 ));288!289! /*290! ! 0 1 2 3291! */292! Serial.print(caracter0);293! Serial.print(caracter1);294! Serial.print(caracter2);295

    ! Serial.print(caracter3);296}297

    298

    /*299! Desliza fuera del display una palabra de cuatro caracteres300! desde el lado izquierdo al derecho301! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda B302! @version ! 1.0303! @since ! ! 1.2304*/305void Display4x7::deslizarPalabraFueraIzqDer (String palabra, int duracion) {306! if (palabra.length() != 4 )307! !

    return ;308

    !309! // Resetear el display310! Serial.print( "v" );311!312! char caracter0 = palabra[ 0 ];313! char caracter1 = palabra[ 1 ];314! char caracter2 = palabra[ 2 ];315! char caracter3 = palabra[ 3 ];316!317! /*318! ! _ 0 1 2319! */320! Serial.print( "x" );321! Serial.print(caracter0);322! Serial.print(caracter1);323! Serial.print(caracter2);324! delay(( int )(duracion/ 4 ));325

  • 8/2/2019 Basketduino: Codigo

    19/37

    !326! /*327! ! _ _ 0 1328! */329! Serial.print( "xx" );330! Serial.print(caracter0);331! Serial.print(caracter1);332! delay(( int )(duracion/ 4 ));333!334! /*335

    ! ! _ _ _ 0336 ! */337! Serial.print( "xxx" );338! Serial.print(caracter0);339! delay(( int )(duracion/ 4 ));340!341! /*342! ! _ _ _ _ 343! */344! Serial.print( "xxxx" );345}346

    347

    /*348! Desliza fuera del display una palabra de cuatro caracteres349! desde el lado derecho al izquierdo350! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda B351! @version ! 1.0352! @since ! ! 1.2353*/354void Display4x7::deslizarPalabraFueraDerIzq (String palabra, int duracion) {355! if (palabra.length() != 4 )356! ! return ;357!358! // Resetear el display359! Serial.print( "v" );360

    !361 ! char caracter0 = palabra[ 0 ];362! char caracter1 = palabra[ 1 ];363! char caracter2 = palabra[ 2 ];364! char caracter3 = palabra[ 3 ];365!366! /*367! ! 1 2 3 _ 368! */369! Serial.print(caracter1);370! Serial.print(caracter2);371! Serial.print(caracter3);372!

    Serial.print( "x" );373

    ! delay(( int )(duracion/ 4 ));374!375! /*376! ! 2 3 _ _ 377! */378! Serial.print(caracter2);379! Serial.print(caracter3);380! Serial.print( "xx" );381! delay(( int )(duracion/ 4 ));382!383! /*384! ! 3 _ _ _ 385! */386! Serial.print(caracter3);387! Serial.print( "xxx" );388! delay(( int )(duracion/ 4 ));389!390

  • 8/2/2019 Basketduino: Codigo

    20/37

    ! /*391! ! _ _ _ _ 392! */393! Serial.print( "xxxx" );394}395

    396

    /*397! Rellena el display con una palabra de 4 caracteres398! desplazando caracter a caracter de izquierda a derecha399! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda B400

    ! @version ! 1.0401 ! @since ! ! 1.0402*/403

    void Display4x7::formarPalabraIzqDer (String palabra) {404! if (palabra.length() != 4 )405! ! return ;406! !407! // Restear el display408! Serial.print( "v" );409

    410

    ! char caracter0 = palabra[ 0 ];411! char caracter1 = palabra[ 1 ];412! char caracter2 = palabra[ 2 ];413! char caracter3 = palabra[ 3 ];414

    415

    ! /*416! ! 3 _ _ _ 417! */418! Serial.print(caracter3);419! Serial.print( "xxx" );420! delay( 200 );421

    422

    ! /*423! ! _ 3 _ _ 424! */425

    ! Serial.print( "x" );426 ! Serial.print(caracter3);427! Serial.print( "xx" );428! delay( 200 );429

    430

    ! /*431! ! _ _ 3 _ 432! */433! Serial.print( "xx" );434! Serial.print(caracter3);435! Serial.print( "x" );436! delay( 200 );437

    438

    ! /*439! ! _ _ _ 3440! */441! Serial.print( "xxx" );442! Serial.print(caracter3);443! delay( 200 );444

    445

    ! /*446! ! 2 _ _ 3447! */448! Serial.print(caracter2);449! Serial.print( "xx" );450! Serial.print(caracter3);451! delay( 200 );452

    453

    ! /*454! ! _ 2 _ 3455

  • 8/2/2019 Basketduino: Codigo

    21/37

    ! */456! Serial.print( "x" );457! Serial.print(caracter2);458! Serial.print( "x" );459! Serial.print(caracter3);460! delay( 200 );461

    462

    ! /*463! ! _ _ 2 3464! */465

    ! Serial.print( "xx" );466 ! Serial.print(caracter2);467! Serial.print(caracter3);468! delay( 200 );469

    470

    ! /*471! ! 1 _ 2 3472! */473! Serial.print(caracter1);474! Serial.print( "x" );475! Serial.print(caracter2);476! Serial.print(caracter3);477! delay( 200 );478

    479

    ! /*480! ! _ 1 2 3481! */482! Serial.print( "x" );483! Serial.print(caracter1);484! Serial.print(caracter2);485! Serial.print(caracter3);486! delay( 200 );487

    488

    ! /*489! ! 0 1 2 3490

    ! */491 ! Serial.print(caracter0);492! Serial.print(caracter1);493! Serial.print(caracter2);494! Serial.print(caracter3);495

    delay( 200 );496}497

    498

    499

    /*500! Rellena el display con una palabra de 4 caracteres501! desplazando caracter a caracter de derecha a izquierda502!

    @author!!

    Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda B503

    ! @version ! 1.0504! @since ! ! 1.0505*/506

    507

    void Display4x7::formarPalabraDerIzq (String palabra) {508 //if (palabra.length() != 4)509! ! //return;510

    511

    ! // Restear el display512! Serial.print( "v" );513

    514

    ! char caracter0 = palabra[ 0 ];515! char caracter1 = palabra[ 1 ];516! char caracter2 = palabra[ 2 ];517! char caracter3 = palabra[ 3 ];518

    519

    ! /*520

  • 8/2/2019 Basketduino: Codigo

    22/37

    ! ! _ _ _ 0521! */522! Serial.print( "xxx" );523! Serial.print(caracter0);524! delay( 200 );525

    526

    ! /*527! ! _ _ 0 _ 528! */529! Serial.print( "xx" );530

    ! Serial.print(caracter0);531 ! Serial.print( "x" );532! delay( 200 );533

    534

    ! /*535! ! _ 0 _ _ 536! */537! Serial.print( "x" );538! Serial.print(caracter0);539! Serial.print( "xx" );540! delay( 200 );541

    542

    ! /*543! ! 0 _ _ _ 544! */545! Serial.print(caracter0);546! Serial.print( "xxx" );547! delay( 200 );548

    549

    ! /*550! ! 0 _ _ 1551! */552! Serial.print(caracter0);553! Serial.print( "xx" );554! Serial.print(caracter1);555

    ! delay( 200 );556557

    ! /*558! ! 0 _ 1 _ 559! */560! Serial.print(caracter0);561! Serial.print( "x" );562! Serial.print(caracter1);563! Serial.print( "x" );564! delay( 200 );565

    566

    ! /*567! !

    0 1 _ _ 568

    ! */569! Serial.print(caracter0);570! Serial.print(caracter1);571! Serial.print( "xx" );572! delay( 200 );573

    574

    ! /*575! ! 0 1 _ 2576! */577! Serial.print(caracter0);578! Serial.print(caracter1);579! Serial.print( "x" );580! Serial.print(caracter2);581! delay( 200 );582

    583

    ! /*584! ! 0 1 2 _ 585

  • 8/2/2019 Basketduino: Codigo

    23/37

    ! */586! Serial.print(caracter0);587! Serial.print(caracter1);588! Serial.print(caracter2);589! Serial.print( "x" );590! delay( 200 );591

    592

    ! /*593! ! 0 1 2 3594! */595

    ! Serial.print(palabra);596 delay( 200 );597}598

    599

  • 8/2/2019 Basketduino: Codigo

    24/37

    /*1LedAnalogico.h - Biblioteca para controlar la luminosidad de un led conectado a un2puerto con salida analogica3

    4@author: Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco5@version: 1.16

    */7#ifndef LedAnalogico_h8#define LedAnalogico_h9

    10

    #include "Arduino.h"1112

    class LedAnalogico {13! public :14! ! LedAnalogico ( int pin);15

    LedAnalogico ( int pin, boolean positivo);16 void encender ( int intensidad);17 void encender ();18 void apagar ();19

    20

    ! private :21! ! int _pin;22

    boolean _positivo;23};24

    25

    #endif2627

  • 8/2/2019 Basketduino: Codigo

    25/37

    /*1LedAnalogico.cpp - Biblioteca para controlar la luminosidad de un led conectado a un2puerto con salida analogica3

    4@author: Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco5@version: 1.06

    */7#include "Arduino.h"8#include "LedAnalogico.h"9

    10

    /*11 ! Constructor para un objeto de la clase LedAnalogico, se usara HIGH para encender el12! led y LOW para apagarlo por defecto13*/14LedAnalogico::LedAnalogico ( int pin) {15! _pin = pin;16

    _positivo = true ;17pinMode(pin, OUTPUT);18

    }1920

    /*21! Constructor para un objeto de la clase LedAnalogico, se usara HIGH para encender el22! led y LOW para apagarlo si "positivo" vale true, y al contrario si "positivo" vale23! false24*/25LedAnalogico::LedAnalogico ( int pin, boolean positivo) {26! _pin = pin;27

    _positivo = positivo;28pinMode(pin, OUTPUT);29

    }3031

    /*32! Enciende el led con la intensidad indicada como parametro, siendo 255 el valor para33! la maxima luminosidad y 0 para la minima. Si el valor pasado como parametro esta34! fuera del rango se usara 255 si el valor del parametro es es mayor que este 255 y 035

    ! el valor del parametro es menor que 036 ! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl37! @version ! 1.038! @since ! ! 1.039*/40void LedAnalogico::encender ( int intensidad) {41 if (_positivo) {42 if (intensidad >= 255 ) {43

    analogWrite(_pin, 255 );44}45

    else if (intensidad = 255 ) {54

    analogWrite(_pin, 0 );55}56

    else if (intensidad

  • 8/2/2019 Basketduino: Codigo

    26/37

    /*66! Enciende el led con intensidad maxima67! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl68! @version ! 1.069! @since ! ! 1.170*/71void LedAnalogico::encender () {72! LedAnalogico::encender( 255 );73}74

    75

    /*76 ! Apaga el led poniendole luminosidad 077! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl78! @version ! 1.079! @since ! ! 1.080*/81void LedAnalogico::apagar () {82

    LedAnalogico::encender( 0 );83}84

    85

  • 8/2/2019 Basketduino: Codigo

    27/37

    /*1LedDigital.h - Biblioteca para controlar un led conectado a un puerto con salida digit2

    3@author ! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco4@version ! 1.05

    */6#ifndef LedDigital_h7#define LedDigital_h8

    9

    #include "Arduino.h"10

    11class LedDigital {12! public :13! ! LedDigital ( int pin);14 ! LedDigital ( int pin, boolean positivo);15 void encender ();16 void apagar ();17

    18

    ! private :19! ! int _pin;20

    boolean _positivo;21};22

    23

    #endif2425

  • 8/2/2019 Basketduino: Codigo

    28/37

    /*1LedDigital.cpp - Biblioteca para controlar un led conectado a un puerto con salida di2

    3@author ! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco4@version ! 1.05

    */6#include "Arduino.h"7#include "LedDigital.h"8

    9

    /*10

    ! Constructor para un objeto de la clase LedAnalogico, se usara HIGH para encender el11 ! led y LOW para apagarlo por defecto12*/13LedDigital::LedDigital ( int pin) {14! _pin = pin;15

    _positivo = true ;16pinMode(pin, OUTPUT);17

    }1819

    /*20! Constructor para un objeto de la clase LedDigital, se usara HIGH para encender el21! led y LOW para apagarlo si "positivo" vale true, y al contrario si "positivo" vale22! false23*/24LedDigital::LedDigital ( int pin, boolean positivo) {25! _pin = pin;26

    _positivo = positivo;27! pinMode(pin, OUTPUT);28}29

    30

    /*31! Enciende el led32! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl33! @version ! 1.034! @since ! ! 1.035

    */36void LedDigital::encender () {37 if (_positivo) {38

    digitalWrite(_pin, HIGH);39}40

    else {41digitalWrite(_pin, LOW);42

    }43}44

    45

    /*46! Apaga el led47!

    @author!!

    Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl48

    ! @version ! 1.049! @since ! ! 1.050*/51void LedDigital::apagar () {52 if (_positivo) {53

    digitalWrite(_pin, LOW);54}55

    else {56digitalWrite(_pin, HIGH);57

    }58}59

    60

  • 8/2/2019 Basketduino: Codigo

    29/37

    /*1Piezoelectrico.h - Biblioteca para tocar la melodia "Charge" con un piezoelectrico2

    3@author: Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco4@version: 1.05

    */6#ifndef Piezoelectrico_h7#define Piezoelectrico_h8

    9

    #include "Arduino.h"10

    11class Piezoelectrico {12! public :13! ! Piezoelectrico ( int pin);14! ! void charge ();15!16! private :17! ! int _pin;18};19

    20

    #endif21

  • 8/2/2019 Basketduino: Codigo

    30/37

    /*1Piezoelectrico.cpp - Biblioteca para tocar la melodia "Charge" con un piezoelectrico2

    3@author: Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco4@version: 1.05

    */6#include "Arduino.h"7#include "Piezoelectrico.h"8#include "Metro.h"9

    10

    // Frecuencia en hercios de las notas musicales11#define DO 261.62612#define RE 293.665 13#define MI 329.628 14#define FA 349.228 15#define FA_ 37016#define SOL 391.99517#define SOL_ 41518#define LA 440.000 19#define LA_ 46620#define SI 493.883 21#define DO2 523.25122#define RE2 587.3323#define MI2 659.25524#define FA2 69825#define SOL2 78426#define LA2 88027

    28

    #define SILENCIO 02930

    float cancionCharge[]={LA_, FA_, SOL_, LA_, SI,31FA_, SOL_, LA_, DO2, SOL, LA, SI, DO2, SOL, LA, SI, DO2, SILENCIO,32SOL, DO2, MI2, SOL2, MI2, SOL2, SILENCIO}; // Cancion33

    float duracionCharge[]={ 2.0 , 1.80 , 1.80 , 1.75 , 1.75 ,34 1.70 , 1.70 , 1.65 , 1.65 , 1.60 , 1.60 , 1.55 , 1.55 , 1.50 , 1.50 , 1.45 , 2.5 , 235

    1.0 , 1.0 , 1.0 , 2.0 , 1.0 , 4.0 , 0 };36float cancionChargeCompleta[]={LA_, FA, SOL, LA, LA_, FA, SOL, LA, SI, FA_, SOL_, LA_,37

    FA_, SOL_, LA_, DO2, SOL, LA, SI, DO2, SOL, LA, SI, DO2, SILENCIO,38SOL, DO2, MI2, SOL2, MI2, SOL2, SILENCIO}; // Cancion*/39

    float duracionChargeCompleta[]={ 2.0 , 2.0 , 2.0 , 1.95 , 1.95 , 1.90 , 1.90 , 1.85 , 1.85 , 1.80 ,40 1.70 , 1.70 , 1.65 , 1.65 , 1.60 , 1.60 , 1.55 , 1.55 , 1.50 , 1.50 , 1.45 , 2.5 , 241 1.0 , 1.0 , 1.0 , 2.0 , 1.0 , 4.0 , 0 };42 43String cuentaAtras[]={ ! "5xxx" , "x5xx" , "xx5x" , "xxx5" , "xxxx" , "4xxx" , "x4xx" , "xx4x" ,44! ! ! ! ! ! "3xxx" , "x3xx" , "xx3x" , "xxx3" , "xxxx" , "2xxx" , "x2xx" , "xx2x" ,45! ! ! ! ! ! "1xxx" , "x1xx" , "xx1x" , "xxx1" , "xxxx" , "xGOx" };46

    47

    /*48

    ! Constructor para un objeto de la clase Piezoelectrico49*/50Piezoelectrico::Piezoelectrico ( int pin) {51! _pin = pin;52! pinMode(_pin, OUTPUT);53}54

    55

    /*56! Toca la melodia "Charge" en el piezoelectrico57! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl58! @version ! 1.059! @since ! ! 1.060*/61void Piezoelectrico::charge() {62

    boolean continuar = true ;63 int i = 0 ;64 int j = 0 ;65

  • 8/2/2019 Basketduino: Codigo

    31/37

    Metro metronomoCancion(duracionCharge[i]* 150 );66Metro metronomoPantalla( 200 );67Serial.print(cuentaAtras[i]);68

    69! while (continuar) {70! ! if (metronomoCancion.check()) {71! ! ! if (cancionCharge[i] == 0 )72! ! ! ! noTone(_pin);73! ! ! else74! ! ! ! tone(_pin, round(cancionCharge[i]));75

    ! ! !76 ! ! ! metronomoCancion.interval(duracionCharge[i]* 150 );77! ! ! i++;78! ! }79 80! ! if (i >= sizeof (cancionCharge)/ sizeof ( float ))81! ! ! continuar = false ;82 83 if (metronomoPantalla.check()) {84 if (++j < 26 )85

    Serial.print(cuentaAtras[j]);86}87

    }88}89

    90

  • 8/2/2019 Basketduino: Codigo

    32/37

    /*1Pulsador.h - Biblioteca para controlar un pulsador2

    3@author: Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco4@version: 1.05

    */6#ifndef Pulsador_h7#define Pulsador_h8

    9

    #include "Arduino.h"10

    11class Pulsador {12! public :13! ! Pulsador ( int salida);14! ! bool presionado ();15

    16

    ! private :17! ! int _salida;18};19

    20

    #endif21

  • 8/2/2019 Basketduino: Codigo

    33/37

    /*1Pulsador.cpp - Biblioteca para controlar un pulsador2

    3@author: Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco4@version: 1.05

    */6#include "Arduino.h"7#include "Pulsador.h"8

    9

    /*10

    ! Constructor para un objeto de la clase Pulsador11 */12Pulsador::Pulsador ( int salida) {13! _salida = salida;14}15

    16

    /*17! Devuelve true si el pulsador esta presionado y false en caso contrario18! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bla19! @version ! 1.020! @since ! ! 1.021*/22bool Pulsador::presionado () {23! return (digitalRead(_salida) == HIGH);24}25

    26

  • 8/2/2019 Basketduino: Codigo

    34/37

    /*1PushButtonRedRing.h - Biblioteca para controlar un boton del tipo push button con2un anillo iluminado de color rojo3

    4@author: Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco5@version: 1.06

    */7#ifndef PushButtonRedRing_h8#define PushButtonRedRing_h9

    10

    #include "Arduino.h"1112

    class PushButtonRedRing {13! public :14! ! PushButtonRedRing ( int salida);15! ! PushButtonRedRing ( int led, int salida);16! ! void encender ();17! ! void apagar ();18! ! bool presionado ();19

    20

    ! private :21! ! int _led;22! ! int _salida;23! ! boolean _tieneLed;24};25

    26

    #endif2728

  • 8/2/2019 Basketduino: Codigo

    35/37

    /*1PushButtonRedRing.cpp - Biblioteca para controlar un boton del tipo push button con2un anillo iluminado de color rojo3

    4@author: Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco5@version: 1.06

    */7#include "Arduino.h"8#include "PushButtonRedRing.h"9

    10

    /*11 ! Constructor para un objeto de la clase PushButtonRedRing para la cual no se quiere12! controlar el led no permitiendose encenderlo ni apagarlo13*/14PushButtonRedRing::PushButtonRedRing ( int salida) {15! _salida = salida;16! _tieneLed = false ;17}18

    19

    /*20! Constructor para un objeto de la clase PushButtonRedRing para la cual se quiere21! controlar el led permitiendose encenderlo y apagarlo22*/23PushButtonRedRing::PushButtonRedRing ( int led, int salida) {24! _salida = salida;25! _led = led;26! pinMode(_led, OUTPUT);27! _tieneLed = true ;28}29

    30

    /*31! Se encender el led del boton en el caso de que se permita la accion32! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl33! @version ! 1.034! @since ! ! 1.035

    */36void PushButtonRedRing::encender () {37! if (_tieneLed)38! ! digitalWrite(_led, LOW);39}40

    41

    /*42! Se apagar el led del boton en el caso de que se permita la accion43! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl44! @version ! 1.045! @since ! ! 1.046*/47

    void PushButtonRedRing::apagar () {48

    ! if (_tieneLed)49! ! digitalWrite(_led, HIGH);50}51

    52

    /*53! Devuelve true si el pulsador esta presionado y false en caso contrario54! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bl55! @version ! 1.056! @since ! ! 1.057*/58bool PushButtonRedRing::presionado () {59! return (digitalRead(_salida) == HIGH);60}61

    62

  • 8/2/2019 Basketduino: Codigo

    36/37

    /*1SensorCanasta.h - Biblioteca para controlar un pulsador2

    3@author: Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco4@version: 1.05

    */6#ifndef SensorCanasta_h7#define SensorCanasta_h8

    9

    #include "Arduino.h"10

    11class SensorCanasta {12! public :13! ! SensorCanasta ( int pin);14! ! bool presionado ();15

    16

    ! private :17! ! int _pin;18};19

    20

    #endif2122

  • 8/2/2019 Basketduino: Codigo

    37/37

    /*1SensorCanasta.cpp - Biblioteca para controlar un sensor de la canasta2

    3@author: Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Blanco4@version: 1.05

    */6#include "Arduino.h"7#include "SensorCanasta.h"8

    9

    /*10

    ! Constructor para un objeto de la clase Pulsador11 */12SensorCanasta::SensorCanasta ( int pin) {13! _pin = pin;14}15

    16

    /*17! Devuelve true si el pulsador esta presionado y false en caso contrario18! @author !! Victor Hernandez Bermejo, Gabriel Rodriguez Polaina, Diego Sepulveda Bla19! @version ! 1.020! @since ! ! 1.021*/22bool SensorCanasta::presionado () {23! return (analogRead(_pin) == 1023 );24}25

    26