Logo ODE

TIMER SCACCHI CON ARDUINO

Sono stati usati un Arduino nano, un display a 4 righe x 20 caratteri e tre pulsanti . Permette di giocare partite lampo da 1minuto / 2 minuti / 5 minuti / 10 minuti

Timer Scacchi


Pubblicato

in

, , , ,

da

Commenti

10 risposte a “TIMER SCACCHI CON ARDUINO”

  1. Avatar FAVETTA VIVIANO
    FAVETTA VIVIANO

    Salve sono interessato a fare questo timer per scacchi ma non sono molto bravo con arduino ringrazio in anticipo chiunque possa postarmi lo schema dei collegamenti
    Saluti e buon natale

  2. Avatar Paolo Pinna
    Paolo Pinna

    Modulo LCD retroilluminato verde blu seriale IIC/I2C/TWI 2004 20X4 LCD2004https://a.aliexpress.com/_EI0yPkV
    Questo è il modulo che ho preso su AliExpress
    È completo di interfaccia i2c che si deve saldare al display e collegare ad Arduino (nano) ai piedini A4 e A5 che servono per l’I2C poi ho usato tre tasti tra massa e i PIN dichiarati nel programma con le istruzioni pinMode.

  3. Avatar FAVETTA VIVIANO
    FAVETTA VIVIANO

    Buona sera
    potresti postarmi lo scema dei collegamenti 
    Ringrazio in anticipo per eventuali risposte
    Saluti
    Viviano
     

    1. Avatar Paolo Pinna
      Paolo Pinna

      Ho disegnato lo schema elettrico
      Vedi se riesci a scaricarlo con questo link:

      https://drive.google.com/file/d/1xNSzNbFhzU-3eWzFo_FSgbsIFKtESsRc/view?usp=sharing

      Paolo P.

  4. Avatar FAVETTA VIVIANO
    FAVETTA VIVIANO

    Salve grazie per il disegno dello schema 
    Ho eseguito tutti i collegamenti e connessioni, non ho collegato la batteria ma alimento con arduino UNO  il Tasto mode funziona  ma i tasti del 1 e 2 non funzionano in pratica il tempo no decresce
    Il codice è quello che  io ho scaricato da te ho cambiato solo lcd.init(); con lcd.begin(); non so dove sta il problema
    #include <Wire.h>
    // timer scacchi 11
    #include <LiquidCrystal_I2C.h>
    #define LED_PIN 3
    LiquidCrystal_I2C lcd(0x27, 20, 4);
    #define tipoPartitaMax 4
    byte tasto1=2,tasto2=3,tastoMode=4,tipoPartita=0;
    unsigned long t,t1,t2,tempoMax[tipoPartitaMax]={15000,30000,75000,150000};
    boolean gioca=false,giocatore=true;
    void setup() {
    // initializza tasto
    pinMode(tasto1,INPUT_PULLUP);
    pinMode(tasto2,INPUT_PULLUP);
    pinMode(tastoMode,INPUT_PULLUP);
    Serial.begin(9600);
    //lcd.init();lcd.begin();lcd.backlight();
    lcd.clear();
    delay(500);
    randomSeed(analogRead(0));
    }
    void aggiornaTimer(boolean p){
    unsigned int x,y;
    unsigned long tx;
    tx=millis();
    if(p){
    if(t1>tx){
    x=(t1-tx)/25;
    y=x/600;
    x=x-y*600;
    lcd.setCursor(5, 2);
    lcd.print(“:”);
    lcd.setCursor(6, 2);
    lcd.print(x%10);
    lcd.setCursor(4, 2);
    lcd.print((x/10)%10);
    lcd.setCursor(3, 2);
    if(x/100>0){
    lcd.print((x/100)%10);
    } else if(y>0){lcd.print(“0″);} else {lcd.print(” “);}
    if(y>0){
    lcd.setCursor(2, 2);
    lcd.print(“:”);
    lcd.setCursor(1, 2);
    lcd.print(y%10);
    lcd.setCursor(0, 2);
    if(y/10>0) {lcd.print((y/10)%10);} else {lcd.print(” “);}
    } else{
    lcd.setCursor(1, 2);
    lcd.print(” “);
    }
    }
    else if(gioca){
    lcd.setCursor(3, 3);
    lcd.print(“Tempo Finito”);
    }
    }
    else{
    if(t2>tx){
    x=(t2-tx)/25;
    y=x/600;
    x=x-y*600;
    lcd.setCursor(17, 2);
    lcd.print(“:”);
    lcd.setCursor(18, 2);
    lcd.print(x%10);
    lcd.setCursor(16, 2);
    lcd.print((x/10)%10);
    lcd.setCursor(15, 2);
    if(x/100>0){
    lcd.print((x/100)%10);
    } else if(y>0){lcd.print(“0″);} else {lcd.print(” “);}
    if(y>0){
    lcd.setCursor(14, 2);
    lcd.print(“:”);
    lcd.setCursor(13, 2);
    lcd.print(y%10);
    lcd.setCursor(12, 2);
    if(y/10 > 0) {lcd.print((y/10)%10);} else {lcd.print(” “);}
    } else{
    lcd.setCursor(13, 2);
    lcd.print(” “);
    }
    }
    else if(gioca){
    lcd.setCursor(2, 3);
    lcd.print(“Tempo Finito”);
    }
    }
    }
    void loop() {
    if(digitalRead(tastoMode)==0){
    gioca=false;
    tipoPartita++;
    if(tipoPartita >= tipoPartitaMax) tipoPartita = 0;
    lcd.setCursor(0, 0);
    switch(tipoPartita){
    case 0:
    lcd.print(“Timer Scacchi 1 min”);
    giocatore=true;
    break;
    case 1:
    lcd.print(“Timer Scacchi 2 min”);
    giocatore=true;
    break;
    case 2:
    lcd.print(“Timer Scacchi 5 min”);
    giocatore=true;
    break;
    case 3:
    lcd.print(“Timer Scacchi 10 min”);
    giocatore=true;
    break;
    default:
    break;
    }
    aggiornaTimer(false);
    aggiornaTimer(true);
    delay(400);
    }
    if((!gioca)&&((digitalRead(tasto1)==0)||(digitalRead(tasto2)==0))){
    gioca=true;
    t=millis();
    t1=t+tempoMax[tipoPartita];
    t2=t1;
    aggiornaTimer(true);
    aggiornaTimer(false);
    lcd.setCursor(0, 3);
    lcd.print(” “);
    }
    if((digitalRead(tasto1)==0)&&(giocatore)){
    giocatore=false;
    t2=t2+millis()-t;
    t=millis();
    }
    if((digitalRead(tasto2)==0)&&(!giocatore)){
    giocatore=true;
    t1=t1+millis()-t;
    t=millis();}}
    Puoi aiutarmi Grazie
    Saluti

  5. Avatar FAVETTA VIVIANO
    FAVETTA VIVIANO

    Salve
    ho risolto nel copia e incolla era saltata l’istruzione
    “aggiornaTimer(giocatore)
    Grazie Saluti
    Viviano

  6. Avatar FAVETTA VIVIANO
    FAVETTA VIVIANO

    Sarebbe possibile inserire una funzione che faccia ripartire il programma dall’inizio scegliendo di nuovo il T Max della partita senza dover  fare un reset, togliendo  e ridare alimentazione Grazie
    Viviano

  7. Avatar FAVETTA VIVIANO
    FAVETTA VIVIANO

    Salve è possibile modificare il programma per ricominciare altra partita senza resettare arduino spegnendolo?
    Grazie per eventuali suggerimenti 

  8. Avatar Paolo Pinna
    Paolo Pinna

    https://drive.google.com/file/d/1qGsIp4mL-2j8GBRrlFDUoc_IxsFNmxzh/view?usp=sharing
     
    Ho provato a modificare il programma spostando il caricamento dei timer dei due giocatori ogni volta che si preme il tasto mode
    non ho avuto modo di provarlo ..  fammi sapere se così funziona

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.