ubah bahasa ke

bahasa pemrograman

bahasa pemrograman

Kamis, 31 Maret 2016

membuat math quiz dengan arduino uno | R2Srekayasa



Math Quiz (LCD1602)
Requiments :
1.     Komputer
2.     Arduino uno
3.     Breadboard( 830 pts )
4.     Jumper cables
5.     Push button ( 2 buah )
6.     Potensiometer ( 10k )
7.     LCD 1602 ( 16 x 2 )

Program Math Quiz :
#include <LiquidCrystal.h> 
const int PIN_RS = 2;
const int PIN_E  = 3;
const int PIN_D4 = 4;
const int PIN_D5 = 5;
const int PIN_D6 = 6;
const int PIN_D7 = 7;

const int BTN_FALSE = 10;
const int BTN_TRUE  = 11;

LiquidCrystal lcd( PIN_RS, PIN_E, PIN_D4, PIN_D5, PIN_D6, PIN_D7 );

// Constants
const int MODE_PERTAMBAHAN  = 0;
const int MODE_PENGURANGAN  = 1;
const char MODES_SYMBOLS[]  = { '+', '-' };

byte time_symbol[8] = {
    0b11111,
    0b01110,
    0b01110,
    0b00100,
    0b00100,
    0b01110,
    0b01110,
    0b11111
};

// Game Configurations
const int GAME_TIMER    = 6;    //  6 detik untuk menjawab
const int ANGKA_MAX     = 3000;

// Game Variables
bool jawaban;

void setup() {

    randomSeed( analogRead(A0) );
    pinMode( BTN_FALSE, INPUT_PULLUP );
    pinMode( BTN_TRUE, INPUT_PULLUP );
    lcd.createChar( 0, time_symbol );
    lcd.begin( 16, 2 );
}

void loop() {
    
    lcd.clear();
    lcd.print( "Math Quiz" );
    
    long waktu = millis() + GAME_TIMER * 1000;
    generate_soal();

    while( digitalRead(BTN_TRUE) == HIGH &&
            digitalRead(BTN_FALSE) == HIGH &&
            waktu > millis())
    {
        refresh_display_time( waktu );
    }

    lcd.setCursor( 0, 1 );
    if( waktu < millis() ) {
        lcd.print( "> WAKTU HABIS!!!");
    } else if( digitalRead(BTN_TRUE) == LOW && jawaban ) {
        lcd.print( "> Nice :)       " );
    } else if( digitalRead(BTN_FALSE) == LOW && !jawaban ) {
        lcd.print( "> Nice :)       " );
    } else {
        lcd.print( "> Coba lagi :(  " );
    }

    delay( 3000 );  
}

void refresh_display_time( long waktu ) {
    lcd.setCursor( 12, 0 );
    lcd.write( (byte) 0 ); // 0 telah diassign untuk symbol "Jam Pasir" (waktu)
    lcd.print( ":" );
    lcd.print( (waktu-millis()) / 1000 );
}

void generate_soal() {

    int angka1, angka2;
    int jawaban_val;
    
    angka1 = random( ANGKA_MAX );
    angka2 = random( ANGKA_MAX );
    
    lcd.setCursor( 0, 1 );
    lcd.print( angka1 );
    
    switch( random(2) ) {
    case MODE_PERTAMBAHAN:
        jawaban_val = angka1 + angka2;
        lcd.print( MODES_SYMBOLS[MODE_PERTAMBAHAN] );
        break;

    case MODE_PENGURANGAN:
        jawaban_val = angka1 - angka2;
        lcd.print( MODES_SYMBOLS[MODE_PENGURANGAN] );
        break;
    }
    
    lcd.print( angka2 );
    lcd.print( " = " );
    
    if( random(2) == 0 ) { // Buat jawaban benar atau salah
        jawaban = true;
        lcd.print( jawaban_val );
    } else {
        jawaban = false;
        lcd.print( jawaban_val + random(-10,10) );
    }
}

0 komentar :

Posting Komentar