Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Retro arcadeklok

Componenten en benodigdheden

Arduino Mega 2560
× 1

Benodigde gereedschappen en machines

3D-printer (algemeen)

Apps en online services

Arduino IDE

Over dit project

Intro:Retro arcadeklok - Arduino

Bouw een interactieve arcade-nachtklok, met een touchscreen en geanimeerde arcade-figuren waarmee je een geluid naar keuze voor het alarm kunt opnemen.

Het project omvat een 3D-geprinte behuizing en vier afzonderlijke programma's om uit te kiezen

1. Arcadeklok - DK Mario, Space Invaders en Pac-Man-animatie

2. Pacman Clock - Interactief geanimeerd Pac-Man-spel met klokfuncties

3. DK Clock - Interactief geanimeerd DK-spel met klokfuncties

4. Tumble Ghost - Geanimeerd Pac-Man spookspel gebaseerd op Flappy Bird

Veel plezier om te bouwen en een geweldig cadeau voor iedereen die graag de nostalgie van de arcadespelkarakters uit de jaren 80 herbeleeft.

Stap 1:Verzamel de materialen

  • Arduino-bord - Arduino Mega 2560 (items 1, 2 en 3 kunnen als één gebundelde bestelling worden gekocht)
  • Touchscreen Arduino Shield - 3,2" Mega Touch LCD-uitbreidingskaartschild
  • Touchscreen - 3,2" TFT LCD-scherm + touchscreen voor Arduino Mega 2560
  • Real-time klokmodule - DS3231 RTC
  • Voice recorder module - ISD1820 voice recorder
  • PLA-filament voor 3D-printer
  • Tweecomponenten epoxyhars om de behuizing aan elkaar te lijmen
  • USB-kabel USB-oplader met een lengte van 2 m (gebruikt voor de stroomvoorziening van de klok)
  • Hot lijmpistool
  • Kabelbanden X 3

Optionele componenten voor het automatisch dimmen van de achtergrondverlichting zijn alleen nodig bij een nachtkastje:

  • Weerstand 270k ohm
  • Zenerdiode 3.3v
  • 0,5 watt weerstand 47 ohm
  • Lichtafhankelijke weerstand (LDR)

Stap 2:Druk de 3D-case af

Ik heb de klokbehuizing geprint op een Creality Ender 3. Alle 3D-printbestanden en instructies voor de behuizing zijn hier op Thingiverse te vinden.

Stap 3:Bouw het circuit

Het totale circuit bevat een realtime klok, Arduino Mega, geluidsmodule, touchscreen en een schermafscherming.

1. Realtime klok

Monteer de real-time klok op de achterkant van de Arduino Mega zoals op de afbeelding. Ik heb een heet lijmpistool en verpakkingsschuim gebruikt om ervoor te zorgen dat ze elkaar niet raken en er is wat demping om beweging te absorberen. In mijn geval heb ik 2 van de RTC-poten rechtstreeks op de Arduino gesoldeerd en aansluitdraad gebruikt om 5v en GND op de Arduino aan te sluiten.

2. Geluidsopnamemodule

Deze zijn echt cool en gemakkelijk te gebruiken. Gebruik op dezelfde manier als hierboven schuim en hete lijm om de module en de luidspreker op de achterkant van de Arduino te plaatsen en zorg ervoor dat ze niet worden aangeraakt. De geluidsmodule wordt geactiveerd door D8 op de Arduino, dus deze en de voeding moeten worden aangesloten volgens het meegeleverde schakelschema.

3. Automatische achtergrondverlichtingsdimmer (optioneel)

Als u van plan bent om de klok als nachtkastje te gebruiken, wilt u waarschijnlijk de achtergrondverlichting 's nachts automatisch dimmen, zodat het uw slaap niet beïnvloedt. (Zo niet, dan kun je deze stap overslaan!) Helaas is de achtergrondverlichting in het TFT-scherm bedraad op +3,3v en kan deze niet worden aangepast met de Arduino. Dit betekent dat we het moeten loskoppelen en opnieuw moeten verbinden met een PWM-pin op de Arduino om de helderheid van de achtergrondverlichting te regelen. Ik wilde dit doen met minimale schade aan pinnen of sporen op de componenten, dus koos ik de volgende aanpak. Volg de onderstaande stappen zorgvuldig

(a) Om dit te bereiken, wordt een lichtafhankelijke weerstand (LDR) aan de achterkant van het apparaat geplaatst om het licht te detecteren. Boor twee gaten van 3 mm in de behuizing en duw de LDR-poten door de gaten. Gebruik hete lijm aan de binnenkant van de kast om de poten op hun plaats te houden. Soldeer twee draden aan de binnenkant van de behuizing en sluit ze aan volgens het schakelschema. Voeg een weerstand van 270k Ohm toe aan A7 van de Arduino volgens het schakelschema.

(b) Verwijder het TFT-scherm en plaats het op een stevige ondergrond. Identificeer pin 19 (LED_A) en verwijder voorzichtig enkele millimeters van het plastic aan de basis van de pin. Buig de pin plat en weg van de connector zoals op de afbeelding hierboven. Controleer of het TFT-scherm goed kan worden aangesloten en of de gebogen pen de stekker of het stopcontact niet blokkeert.

(c) Soldeer een 47 Ohm-register aan de gebogen over de pin en sluit een draad van de weerstand aan op D9 van de Arduino Mega. De Arduino D9-pin kan tot 40 mA zinken, dus de weerstand beperkt dit tot minder dan dit. Sluit een 3.3v Zener Diode aan op dezelfde pin (LED_A) en sluit deze aan op aarde volgens het schema. Het doel hiervan is om de achtergrondverlichting te beschermen tegen overspanning, aangezien deze de spanning regelt tot 3,3 V.

4. TFT-scherm en Arduino Shield

Duw de 3,2-inch TFT-touchscreenconnectoren voorzichtig in het TFT Arduino Shield. Sluit vervolgens voorzichtig aan op de bovenkant van de Arduino volgens de meegeleverde afbeelding. De RTC heeft een batterij en behoudt dus de juiste tijd, zelfs als de stroom is uitgeschakeld. De alarmtijd wordt opgeslagen in Eeprom op de Arduino, wat betekent dat deze behouden blijft als er een stroomstoring is.

Stap 4:Laad de code

Het project vereist dat de volgende bestanden en bibliotheken worden geladen voordat het kan worden gecompileerd en uitgevoerd. De code is uniek en gebouwd rond de mogelijkheden van de bibliotheken, de hardware, enkele aangepaste afbeeldingen en andere projecten waarvan ik heb geleend.

Let op:bij de ontwikkeling van de code voor dit project is gebruik gemaakt van IDE v1.06 en sommige van de vereiste bibliotheken zijn gedateerd. Dit betekent dat sommige mensen problemen hebben met de nieuwe IDE-versie 1.6 en hoger bij het laden van code. Daarom raad ik mensen aan om voor de eenvoud IDE v1.06 te gebruiken en de juiste versiebibliotheekbestanden in zip-bestanden onderaan stap 4 van de tutorial te hebben opgenomen.

1. Arduino IDE

Ik heb een eerdere versie van de Arduino IDE gebruikt, daarom raad ik u voor de eenvoud aan om Arduino IDE versie 1.06 op uw desktopcomputer te downloaden voordat u de code installeert. Je kunt zijn versie hier downloaden.

2. Bibliotheken

Deze moeten worden gedownload en toegevoegd aan de IDE (Integrated Development Environment) die op uw computer draait, die wordt gebruikt om computercode te schrijven en te uploaden naar het fysieke bord.

  • UTFT.h en URtouch.h in zipbestand hieronder
  • Time.h in zipbestand hieronder
  • DS1307RTC.h in zipbestand hieronder
  • Wire.h en EEPROM.h zijn al opgenomen in IDE V1.06

Krediet voor UTFT.h en URtouch.h gaat naar Rinky-Dink Electronics. Ik heb deze zip-bestanden toegevoegd omdat het lijkt alsof de bronwebsite niet beschikbaar is.

4. TFT-schermvariaties

De vaagheden van TFT-schermen en fabrikanten hebben geleid tot deze aantekeningen.

(a) Sainsmart - Als je een 3,2-inch TFT-scherm hebt gekocht met het opschrift Sainsmart op de achterkant van het TFT-apparaat, zul je gemerkt hebben dat ze bibliotheken moeten aanpassen om weergaveproblemen op te lossen. Als u al een Sainsmart TFT-scherm heeft gekocht, vindt u hieronder een oplossing

Bewerk het bestand "initlcd.h" en wijzig de volgende regel van

LCD_Write_COM_DATA (0x01, 0x2B3F);

naar

LCD_Write_COM_DATA (0x01, 0x3B3F);

U moet de IDE opnieuw opstarten en vervolgens de code opnieuw in de Arduino laden.

(b.) TFT-controllerchipset - Mensen die een 3,2-inch TFT-scherm hebben gekocht, kunnen merken dat ze ook een van de twee verschillende chipsets "SSD1289" of "ILI9341" kunnen hebben. Het vervelende is dat het niet eenvoudig is om het verschil online te onderscheiden. Het goede nieuws is dat het is eenvoudig op te lossen. Als u een leeg scherm krijgt na het laden van de code, komt dat waarschijnlijk omdat het een ILI9341-controller is.

Om dit op te lossen, moet u de volgende wijzigingen in de code aanbrengen. Bewerk de code en wijzig de volgende regel code

van

UTFT mijnGLCD (SSD1289, 38, 39, 40, 41); //Parameters moeten worden aangepast aan uw Display/Schield-model

naar

UTFT myGLCD(ILI9341_16, 38, 39, 40, 41); //Parameters moeten worden aangepast aan uw Display/Schield-model

Probeer nu de code opnieuw te laden naar de Arduino.

(c.) Omgekeerde touchscreenbediening

Sommige makers hebben gemeld dat de knoppen op het aanraakscherm van de Y-as zijn omgedraaid. Er is een oplossing hiervoor gevonden waarbij twee regels code moesten worden gewijzigd om de weergave op het aanraakscherm om te draaien.

Zoek naar:"yT =myTouch.getY();" Verander het in:"yT =240 - myTouch.getY();"

Vergeet niet twee keer te zoeken, de eerste is voor het besturen van pacman in klokmodus, de tweede is voor in het setup-menu.

5. Grafische bestanden

Er is een groep bitmapbestanden die ik hieronder heb opgenomen en die in dezelfde submap moeten zitten als de Arduino-code wanneer je in de Arduino begint te laden. Download daarom onderstaande bestanden en gebruik de IDE om te laden.

6. Stel de klok in

Zodra de code met succes is geladen, drukt u op het midden van het scherm en dit zou het instellingenscherm moeten openen. Gebruik het menu om de tijd en het alarm in 24-uurs formaat in te stellen. Druk op de SAVE-knop om de instelling op te slaan. De RTC heeft een batterij en behoudt dus de juiste tijd, zelfs als de stroom is uitgeschakeld. De alarmtijd wordt opgeslagen in EEPROM, wat betekent dat deze behouden blijft als er een stroomstoring is.

7. Het alarm testen

De geluidsmodule wordt gebruikt om het alarm te leveren. De ISD1820 wordt bestuurd door de Arduino D8-pin. Geluid kan eenvoudig worden toegevoegd door geluid in de microfoon af te spelen en tegelijkertijd op de opnameknop op de ISD1820 te drukken. In mijn geval heb ik de originele Pac-Man-introductiemuziek opgenomen van een audiobestand dat via een ander apparaat is afgespeeld. Zodra het geluid is opgenomen, kan de opname worden getest door op de PLAY-E-knop te drukken, die het geluid via de luidspreker zou moeten afspelen. Gebruik het setup-menu om de kloktijd en de alarmtijd een paar minuten na elkaar in te stellen. Zorg ervoor dat u het alarm "SET" en druk op de menuknoppen "SAVE". Eenmaal terug naar het hoofdscherm zou het alarm moeten klinken wanneer de tijd is verstreken. U kunt het alarm uitschakelen door op het midden van het aanraakscherm te drukken, wat resulteert in het configuratiescherm.

8. Touchscreen-kalibratie

Sommige makers hebben geconstateerd dat de knoppen op het instellingenscherm niet zijn uitgelijnd met de TFT-aanraakbedieningen. In deze gevallen moet het touchscreen worden gekalibreerd. Dit kan eenvoudig worden gedaan met behulp van de touchscreen-kalibratiecode en instructies in de URtouch-bibliotheek. Volg deze instructies als u dit probleem opmerkt.

9. Vier verschillende programma's om uit te kiezen

1. Arcadeklok - DK Mario, Space Invaders &Pacman-animatie2. Pacman Clock - Interactief geanimeerd Pacman/Ms Pacman-spel met klokfuncties

3. DK Clock - Interactief geanimeerd DK-spel met klokfuncties

4. Tumble Ghost - Geanimeerd Pacman Ghost-spel gebaseerd op Flappy Bird

1.%2BRetroArcadeClockTechKiwigadgetsV1.zip 2.%2BRetro_Pacman_Clock_V10.zip 3.%2BRetro_DK_Clock_V3.zip 4.%2BTumble_Ghost_V10.zip DS1307RTC.zip Time.zip URTouch.zip UTFT.zip

Stap 5:Alles samenvoegen

1. Externe voeding toevoegen

De laatste stap is het toevoegen van de externe voeding. Maak met een boor een gat in de achterkant van de kast. Leid de USB-kabel door het achterpaneel en bevestig vervolgens de USB-kabel VCC, GND, D+ en D- draden aan de basis van de Arduino USB-connector volgens het schakelschema. Dit heeft twee voordelen:ten eerste heeft de USB-ingang naar Arduino Mega Boards overstroombeveiliging en ten tweede kun je de USB-kabel gebruiken om codewijzigingen te uploaden zonder de doos te hoeven demonteren. Heetlijm de isolatie van de voedingskabel aan de achterkant van de Arduino om bescherming te bieden tegen kabelspanning bij het monteren van voor- en achterpanelen. Voeg een koordgreep toe aan de kabel door een kabelbinder strak om de kabel aan de binnenkant van de behuizing te plaatsen op de voedingskabel op 6-8 cm van de Arduino-aansluiting. De kabelbinder moet spanning op de verbindingen voorkomen wanneer aan de USB-kabel wordt getrokken door tegen de binnenkant van de behuizing te stoten.

2. De elektronica in de koffer monteren

Plaats het circuit bovenop het voorpaneel met de vier gatengeleiders die het scherm centraal in de uitsparing moeten uitlijnen. Schakel het circuit in zodat u het scherm op het voorpaneel kunt zien, controleer of het schermbeeld in de juiste positie staat en lijm het op zijn plaats met hete lijm. Het resultaat is een goede pasvorm met een vierkant scherm dat gecentreerd is in het uitgesneden gat.

3. Eindmontage

Duw het voorpaneel voorzichtig op het achterpaneel en trek voorzichtig aan het USB-netsnoer om de speling in het achterpaneel op te vangen. De koordgreep is hier handig en moet eventuele schade aan bedrading beschermen. Steek de stekker in de USB-oplader en je bent klaar om te gaan.

Ik hoop dat je geniet!

Code

  • Retro arcadeklok
Retro arcadeklokC/C++
Arduino IDE
/* Retro Arcade Clock - TechKiwigadgets V1 - Eerste productierelease*/ #include  #include #include #include  #include  #include  // een standaard DS1307-bibliotheek die tijd retourneert als een time_t// Alarmvariabelenboolean alarmstatus =false; // vlag waar false is uitgeschakeld en true is onboolean soundalarm =false; // Vlag om aan te geven dat het alarm moet worden gestart. alarmuur =0; // uur van alarminstellingint alarmminuten =0; // Minuut van alarminstelling byte per uur; //Bytevariabele voor hourbyte amin; //Bytevariabele voor minuteint actr =300; // Als het alarm afgaat, is dit een teller die wordt gebruikt om de geluidskaart te resetten totdat het scherm is aangeraakt in act =0;int p =0; // Animatiepositie E.G Pacman Grafische Vlag 0 =Gesloten, 1 =Medium Open, 2 =Wijd Open, 3 =Medium Openint m =0; // Animatiepositie mario 3 posities// Grafische X,Y-coördinaten// myGLCD.drawBitmap (30, 14, 40, 40, rd_ghost); // Gesloten Ghostint ghostX =15;int ghostY =14;int ghostD =0; // richting d ==0 =rechts, 1 =omlaag, 2 =links, 3 =omhoog // myGLCD.drawBitmap (140, 14, 40, 40, MarioR3); // Gesloten Ghostint MarioX =141;int MarioY =14;int MarioD =0; // richting d ==0 =rechts, 1 =omlaag, 2 =links, 3 =omhoog // myGLCD.drawBitmap (240, 14, 40, 40, Monkey2); // Gesloten Ghostint MonkeyX =261;int MonkeyY =14;int MonkeyD =0; // richting d ==0 =rechts, 1 =omlaag, 2 =links, 3 =omhoog // myGLCD.drawBitmap (30, 180, 40, 40, pacman); // Gesloten Ghostint pacmanX =15;int pacmanY =185;int pacmanD =2; // richting d ==0 =rechts, 1 =omlaag, 2 =links, 3 =omhoog// myGLCD.drawBitmap (140, 180, 40, 40, Alien); // Gesloten Ghostint AlienX =141;int AlienY =185;int AlienD =2; // richting d ==0 =rechts, 1 =omlaag, 2 =links, 3 =omhoog// myGLCD.drawBitmap (240, 180, 40, 40, Cannon); // Gesloten Ghost int CannonX =270;int CannonY =185;int CannonD =2; // richting d ==0 =rechts, 1 =omlaag, 2 =links, 3 =omhoog// Initialiseert RTC-tijdwaarden:const int DS1307 =0x68; // Adres van DS1307 zie datasheets// Display Dimmer Variablesint dimscreen =255; // Deze variabele wordt gebruikt om de helderheid van het scherm aan te sturen, waarbij 255 de maximale helderheid is, LDR =100; // LDR-variabele direct gemeten vanaf Analog 7//====Objecten maken UTFT myGLCD (SSD1289,38,39,40,41); //Parameters moeten worden aangepast aan uw Display/Schield-modelURTouch myTouch( 6, 5, 4, 3, 2);//====Fontsextern definiëren uint8_t SmallFont[];extern uint8_t BigFont[];extern uint8_t SevenSegNumFont[]; extern uint8_t SevenSeg_XXXL_Num[];// Definieer bitmapsextern unsigned int Alien1[0x640]; // Alien 1 graphicextern unsigned int Alien2 [0x640]; // Alien 2 graphicextern unsigned int Cannon [0x640]; // Space Invaders cannonextern unsigned int MarioL1 [0x310]; // M Links 1extern ongetekend int MarioL2[0x310]; // Ghost Bitmap Straight aheadextern unsigned int MarioL3[0x310]; // Ghost Bitmap Straight aheadextern unsigned int MarioR1[0x310]; // Ghost Bitmap Straight aheadextern unsigned int MarioR2[0x310]; // Ghost Bitmap Straight aheadextern unsigned int MarioR3[0x310]; // Ghost Bitmap Straight aheadextern unsigned int MarioStop[0x310]; // Ghost Bitmap Straight aheadextern unsigned int MarioU1[0x310]; // Ghost Bitmap Straight aheadextern unsigned int MarioU2[0x310]; // Ghost Bitmap Straight aheadextern unsigned int MarioU3[0x310]; // Ghost Bitmap Straight aheadextern unsigned int MarioU4[0x310]; // Ghost Bitmap Rechtdoorextern unsigned int rd_ghost [784]; // Ghost-bitmap Rechtdoorextern niet-ondertekend int ru_ghost [784]; // Ghost Bitmap Rechtdoorextern unsigned int rl_ghost [784]; // Ghost Bitmap Rechtdoorextern unsigned int rr_ghost [784]; // Ghost Bitmap Rechtdoorextern unsigned int r_o_pacman[784]; // Ghost Bitmap Recht vooruitextern unsigned int r_m_pacman [784]; // Ghost Bitmap Rechtdoorextern unsigned int l_o_pacman[784]; // Ghost Bitmap Rechtdoorextern unsigned int l_m_pacman[784]; // Ghost Bitmap Recht vooruitextern unsigned int u_m_pacman [784]; // Ghost Bitmap Straight aheadextern unsigned int u_o_pacman[784]; // Ghost Bitmap Recht vooruitextern unsigned int d_m_pacman [784]; // Ghost Bitmap Recht vooruitextern unsigned int d_o_pacman [784]; // Ghost Bitmap Rechtdoorextern unsigned int c_pacman [784]; // Ghost Bitmap Straight aheadextern unsigned int Monkey2[0x640]; // Ghost Bitmap Straight aheadextern unsigned int Monkey3[0x640]; // Ghost Bitmap Recht vooruit// Coördinaten aanraakschermboolean screenPressed =false;int xT,yT;int userT =4; // vlag om directionele aanraking op screenboolean setupscreen aan te geven =false; // gebruikt om toegang te krijgen tot het instellingenscherm//Alarminstellingsvariabelenboolean xsetup =false; // Vlag om te bepalen of bestaande setup-modus// Animatievertraging om beweging downint dly =0 te vertragen; // Oorspronkelijk 30// Time Refresh-teller int rfcvalue =300; // wacht zo lang totdat de tijd is gecontroleerd op wijzigingen.int rfc =1;// Declareer globale variabelen voor de vorige keer, om verversing van alleen gewijzigde cijfers mogelijk te maken// Er zijn vier cijfers die onafhankelijk moeten worden getekend om een ​​consistente positionering van de tijd te garanderen int cl =20; // Tientallen uren int c2 =20; // Een uurcijfer int c3 =20; // Tientallen minuten int c4 =20; // Ones minute digitvoid setup () {// Initialiseer RTC Serial.begin (9600); // while (!Serial); // wacht tot Arduino Serial Monitor opent delay (200); setSyncProvider(RTC.get); // de functie om de tijd uit de RTC setSyncInterval(60) te halen; // synchroniseer de tijd elke 60 seconden (1 minuten) if(timeStatus()!=timeSet){ Serial.println("Kan niet synchroniseren met de RTC"); RTC.set(1408278800); // stel de RTC in op 25 augustus 2014 9:00 uur setTime (1408278800); } else{ Serial.println("RTC heeft de systeemtijd ingesteld"); }// Setup Alarm activeer pin om geluid af te spelen op de ISD1820-kaart pinMode (8, OUTPUT); // D8 gebruikt om geluid digitalWrite (8,LOW) te schakelen; // Zet op laag om geluid uit te schakelen // Start weergave myGLCD.InitLCD(); mijnGLCD.clrScr(); mijnTouch.InitTouch(); myTouch.setPrecision (PREC_LOW); tekenscherm(); // Start het spel UpdateDisp(); // update waarde naar klok }void loop() {// increment Pacman Graphic Flag 0 =Closed, 1 =Medium Open, 2 =Wide Openp=p+1; if(p==4){ p=0; // Reset teller naar gesloten}// verhoog Pacman Graphic Flag 0 =Gesloten, 1 =Gemiddeld open, 2 =Wijd openm=m+1; if(m==3){ m=0; // Teller terugzetten naar gesloten}// Schermhelderheid instellen// Controleer het omgevingslicht en pas de LED-helderheid aan de omgevingstemperatuur ongeveer 500 donker is lager dan 100LDR =analogRead (A7);/* Testwaardebereik van LDR myGLCD.setColor (237, 28, 36); mijnGLCD.setBackColor (0, 0, 0); myGLCD.printNumI(LDR,250,60);*/if (LDR>=121){ dimscreen =255; } if (LDR <=120) { dimscreen =45; } analogWrite(9, dimscreen); // Regelt helderheid 0 is donker, omgevingskamer is ongeveer 25 en 70 is direct zonlicht // Lees de huidige datum en tijd van de RTC en reset boardrfc++; if (rfc>=rfcvalue) {// count cycli en printtijd UpdateDisp(); // update waarde naar klok dan ... dly =18; // reset vertraging rfc =0; }//===Controleer of het alarm moet klinken if (alarmstatus ==true){ if ( (alarmhour ==hour()) &&(alarmminute ==minute())) { // Laat het alarm klinken soundalarm =true; } }//===Start alarmgeluid - Geluid betaalt 10 seconden en start opnieuw na 20 seconden markif ((alarmstatus ==true)&&(soundalarm==true)){ // Zet een teller op nul en onderneem actie om opnieuw te starten geluid als het scherm niet wordt aangeraakt if (act ==0) {// Zet alarm af door D8 in te schakelen, opgenomen geluid geactiveerd door LAAG naar HOOG overgang digitalWrite (8, HOOG); // Hoge digitalWrite (8,LOW) instellen; // Stel lage UpdateDisp (); // update waarde naar klok} act =act +1; if (act ==actr) { // Zet alarm af door D8 in te schakelen, opgenomen geluid getriggerd door LAAG naar HOOG overgang digitalWrite (8, HOOG); // Hoge digitalWrite (8,LOW) instellen; // Stel lage act =0 in; // Reset teller elke 20 seconden } }// Controleer of gebruiker invoer op touchscreen// UserT zet richting 0 =rechts, 1 =omlaag, 2 =links, 3 =omhoog, 4 =invoer zonder aanraking myTouch.read(); if (myTouch.dataAvailable() &&!screenPressed) { xT =myTouch.getX(); yT =mijnTouch.getY(); // ******************************* // ****** Ga naar de instelmodus ** ****** // ******************************* if (((xT>=120) &&(xT<=200) &&(yT>=105) &&(yT<=140)) &&(soundalarm !=true)) { // Call Setup Routine als alarm niet klinkt xsetup =true; // Schakel flag clocksetup (); // Call Clock Setup Routine UpdateDisp (); // update waarde naar klok } else // Als het midden van het scherm wordt aangeraakt terwijl het alarm afgaat, zet dan het geluid uit en reset het alarm om niet in te stellen if (((xT>=120) &&(xT<=200) &&(yT> =105) &&(yT<=140)) &&((alarmstatus ==waar) &&(geluidsalarm ==waar))) { alarmstatus =onwaar; geluidsalarm =vals; digitalWrite (8, LAAG); // Laag instellen } scherm Ingedrukt =waar; } // Staat het vasthouden van het scherm niet toe / u moet er anders op tikken als ( !myTouch.dataAvailable() &&screenPressed){ ​​screenPressed =false; }drawghost(ghostX, spookY, spookD, p); // Positie verhogen en afbeelding tekenen// geestrichting //// richting d ==0 =rechts, 1 =omlaag, 2 =links, 3 =omhoogif(ghostD ==0){ // Rechts // Teller verhogen en testen resultaten ghostX =ghostX + 3; if (ghostX ==270){ myGLCD.fillRect(ghostX-3, ghostY, ghostX, ghostY+28); // Wis het spoor van de afbeelding voordat u van positie verandert ghostD =1; // Verander richting naar beneden } } else if(ghostD ==1) { // Omlaag // Verhoog de teller en testresultaten ghostY =ghostY + 3; if (ghostY ==185){ myGLCD.fillRect(ghostX+3, ghostY-3, ghostX+36, ghostY); // Wis het spoor van de afbeelding voordat u van positie verandert ghostD =2; // Verander richting naar beneden } } else if(ghostD ==2) { // Links // Verhoog de teller en testresultaten ghostX =ghostX - 3; if (ghostX ==12){ myGLCD.fillRect(ghostX+28, ghostY, ghostX+31, ghostY+28); // Wis de trail-off afbeelding voordat u nieuwe positi ghostD =3 afdrukt; // Verander richting naar beneden } } else if (ghostD ==3) { // Omhoog // Verhoog de teller en testresultaten ghostY =ghostY - 3; if (ghostY ==14){ myGLCD.fillRect(ghostX, ghostY+29, ghostX+28, ghostY+28); // Wis de trail-off afbeelding voordat de nieuwe positie wordt afgedrukt ghostD =0; // Verander richting naar beneden }}drawMonkey(MonkeyX, MonkeyY, MonkeyD, p); // Positie verhogen en afbeelding tekenen// Monkey Direction //// richting d ==0 =rechts, 1 =omlaag, 2 =links, 3 =omhoogif(MonkeyD ==0){ // Rechts // Teller verhogen en testen resultaten MonkeyX =MonkeyX + 3; if (MonkeyX ==270){ myGLCD.fillRect(MonkeyX-3, MonkeyY, MonkeyX, MonkeyY+40); // Wis de afbeelding van het spoor voordat u van richting verandert MonkeyD =1; // Verander richting naar beneden } } else if(MonkeyD ==1) { // Omlaag // Verhoog de teller en testresultaten MonkeyY =MonkeyY + 3; if (MonkeyY ==185){ myGLCD.fillRect(MonkeyX+3, MonkeyY-3, MonkeyX+38, MonkeyY); // Wis de trail-off afbeelding voordat u de nieuwe positie afdrukt MonkeyD =2; // Verander richting naar beneden } } else if(MonkeyD ==2) { // Links // Verhoog de teller en testresultaten MonkeyX =MonkeyX - 3; if (MonkeyX ==12){ myGLCD.fillRect(MonkeyX+41, MonkeyY+1, MonkeyX+40, MonkeyY+38); // Wis de trail-off afbeelding voordat u nieuwe positi afdrukt MonkeyD =3; // Verander richting naar beneden } } else if(MonkeyD ==3) { // Omhoog // Verhoog de teller en testresultaten MonkeyY =MonkeyY - 3; if (MonkeyY ==14){ myGLCD.fillRect(MonkeyX, MonkeyY+38, MonkeyX+40, MonkeyY+43); // Wis de trail-off afbeelding voordat u de nieuwe positie afdrukt MonkeyD =0; // Verander richting naar beneden }}drawCannon (CannonX, CannonY, CannonD, p); // Positie verhogen en afbeelding tekenen// Kanonrichting //// richting d ==0 =rechts, 1 =omlaag, 2 =links, 3 =omhoogif(CannonD ==0) { // Rechts // Teller verhogen en testen resultaten CannonX =CannonX + 3; if (CannonX ==270){ myGLCD.fillRect(CannonX-3, CannonY+3, CannonX, CannonY+36); // Wis de afbeelding van het spoor voordat u van richting verandert CannonD =1; // Verander richting naar beneden } } else if(CannonD ==1) { // Omlaag // Verhoog de teller en testresultaten CannonY =CannonY + 3; if (CannonY ==185){ CannonD =2; // Verander richting naar beneden } } else if(CannonD ==2) { // Links // Verhoog de teller en testresultaten CannonX =CannonX - 3; if (CannonX ==12){ myGLCD.fillRect(CannonX+41, CannonY+3, CannonX+40, CannonY+36); // Wis de trail-off afbeelding voordat u nieuwe positi afdrukt CannonD =3; // Verander richting naar beneden } } else if (CannonD ==3) { // Omhoog // Verhoog de teller en testresultaten CannonY =CannonY - 3; if (CannonY ==14){ CannonD =0; // Verander richting naar beneden }}drawpacman(pacmanX, pacmanY, pacmanD, p); // Positie verhogen en afbeelding tekenen// pacman richting //// richting d ==0 =rechts, 1 =omlaag, 2 =links, 3 =omhoogif(pacmanD ==0) { // Rechts // Teller en test verhogen resultaten pacmanX =pacmanX + 3; if (pacmanX ==270){ myGLCD.fillRect(pacmanX-3, pacmanY+3, pacmanX, pacmanY+36); // Wis de afbeelding van het spoor voordat u van richting verandert pacmanD =1; // Verander richting naar beneden } } else if(pacmanD ==1) { // Omlaag // Verhoog de teller en testresultaten pacmanY =pacmanY + 3; if (pacmanY ==185){ myGLCD.fillRect(pacmanX+3, pacmanY-3, pacmanX+36, pacmanY); // Wis de trail-off-afbeelding voordat u van positie verandert pacmanD =2; // Verander richting naar beneden } } else if(pacmanD ==2) { // Links // Verhoog de teller en testresultaten pacmanX =pacmanX - 3; if (pacmanX ==12){ myGLCD.fillRect(pacmanX+28, pacmanY, pacmanX+31, pacmanY+28); // Wis de trail-off-afbeelding voordat u nieuwe positi pacmanD =3 afdrukt; // Verander richting naar beneden } } else if (pacmanD ==3) { // Omhoog // Verhoog de teller en testresultaten pacmanY =pacmanY - 3; if (pacmanY ==14){ myGLCD.fillRect(pacmanX, pacmanY+29, pacmanX+28, pacmanY+28); // Wis de trail-off-afbeelding voordat u de nieuwe positie afdrukt pacmanD =0; // Verander richting naar beneden }}drawAlien (AlienX, AlienY, AlienD, p); // Positie verhogen en afbeelding tekenen// Alien Direction //// richting d ==0 =rechts, 1 =omlaag, 2 =links, 3 =omhoogif(AlienD ==0) { // Rechts // Teller verhogen en testen resultaten AlienX =AlienX + 3; if (AlienX ==270){ myGLCD.fillRect(AlienX-3, AlienY+3, AlienX, AlienY+36); // Wis het spoor van de afbeelding voordat u van richting verandert AlienD =1; // Verander richting naar beneden } } else if(AlienD ==1) { // Omlaag // Verhoog Teller en testresultaten AlienY =AlienY + 3; if (AlienY ==185){ AlienD =2; // Verander richting naar beneden } } else if(AlienD ==2) { // Links // Verhoog de teller en testresultaten AlienX =AlienX - 3; if (AlienX ==12){ myGLCD.fillRect(AlienX+41, AlienY+3, AlienX+40, AlienY+36); // Wis de trail-off afbeelding voordat u nieuwe positi afdrukt AlienD =3; // Verander richting naar beneden } } else if(AlienD ==3) { // Omhoog // Verhoog Teller en testresultaten AlienY =AlienY - 3; if (AlienY ==14){ AlienD =0; // Verander richting naar beneden }}drawMario (MarioX, MarioY, MarioD, p); // Positie verhogen en afbeelding tekenen// Mario Direction //// richting d ==0 =rechts, 1 =omlaag, 2 =links, 3 =omhoogif(MarioD ==0){ // Rechts // Teller verhogen en testen resultaten MarioX =MarioX + 3; if (MarioX ==270){ myGLCD.fillRect(MarioX-3, MarioY+3, MarioX, MarioY+36); // Wis de afbeelding van het spoor voordat u van richting verandert MarioD =1; // Verander richting naar beneden } } else if(MarioD ==1) { // Omlaag // Verhoog Teller en testresultaten MarioY =MarioY + 3; if (MarioY ==185){ myGLCD.fillRect(MarioX+3, MarioY-3, MarioX+36, MarioY); // Wis de trail-off-afbeelding voordat u een nieuwe positie afdrukt MarioD =2; // Verander richting naar beneden } } else if(MarioD ==2) { // Links // Verhoog de teller en testresultaten MarioX =MarioX - 3; if (MarioX ==12){ MarioD =3; // Verander richting naar beneden } } else if(MarioD ==3) { // Omhoog // Verhoog Teller en testresultaten MarioY =MarioY - 3; if (MarioY ==14){ myGLCD.fillRect(MarioX, MarioY+30, MarioX+28, MarioY+28); // Wis de trail-off-afbeelding voordat u de nieuwe positie afdrukt MarioD =0; // Verander richting naar beneden }}delay (dly); }// ********************************************** ********************************************** ***************// =====Digitale klok bijwerken// ************************** ********************************************** ****************************** void UpdateDisp () { // Wis het tijdgebied myGLCD.setColor (0, 0, 0); myGLCD.setBackColor (0, 0, 0);// myGLCD.fillRect (60, 80, 262, 166); int h; // Uurwaarde in 24-uurs formaat int e; // Minuutwaarde in minuutformaat int pm =0; // Vlag om te bepalen of PM of AM // Er zijn vier cijfers die onafhankelijk van elkaar moeten worden getekend om een ​​consistente positionering van de tijd int d1 te garanderen; // Tientallen uren int d2; // Een uurcijfer int d3; // Tientallen minuten int d4; // Ones minuut cijfer h =uur (); // 24-uurs RT-klokwaarde e =minuut();/* TESTh =12;e =8;*/// Bereken uurcijferwaarden voor timeif ((h>=10) &&(h <=12)) { / / AM uur 10,11,12 d1 =1; // bereken tientallen uren cijfer d2 =h - 10; // bereken Ones hour digit 0,1,2 } else if ( (h>=22) &&(h <=24)) { // PM uur 10,11,12 d1 =1; // calculate Tens hour digit d2 =h - 22; // calculate Ones hour digit 0,1,2 } else if ((h <=9)&&(h>=1)) { // AM hours below ten d1 =0; // calculate Tens hour digit d2 =h; // calculate Ones hour digit 0,1,2 } else if ( (h>=13) &&(h <=21)) { // PM hours below 10 d1 =0; // calculate Tens hour digit d2 =h - 12; // calculate Ones hour digit 0,1,2 } else { // If hour is 0 d1 =1; // calculate Tens hour digit d2 =2; // calculate Ones hour digit 0,1,2 } // Calculate minute digit values for timeif ((e>=10)) { d3 =e/10; // calculate Tens minute digit 1,2,3,4,5 d4 =e - (d3*10); // calculate Ones minute digit 0,1,2 } else { // e is less than 10 d3 =0; d4 =e; } if (h>=12){ // Set // h =h-12; // Work out value pm =1; // Set PM flag} // *************************************************************************// Print each digit if it has changed to reduce screen impact/flicker// Set digit font colour to white myGLCD.setColor(255, 255, 255); myGLCD.setBackColor(0, 0, 0); myGLCD.setFont(SevenSeg_XXXL_Num); // First Digitif(((d1 !=c1)||(xsetup ==true))&&(d1 !=0)){ // Do not print zero in first digit position myGLCD.printNumI(d1,10,70); // Printing thisnumber impacts LFH walls so redraw impacted area // ---------------- Clear lines on Outside wall myGLCD.setColor(0,0,0); myGLCD.drawRoundRect(1, 238, 318, 1); }//If prevous time 12:59 or 00:59 and change in time then blank First Digitif((c1 ==1) &&(c2 ==2) &&(c3 ==5) &&(c4 ==9) &&(d2 !=c2) ){ // Clear the previouis First Digit and redraw wall myGLCD.setColor(0,0,0); myGLCD.fillRect(50, 70, 70, 165);}if((c1 ==0) &&(c2 ==0) &&(c3 ==5) &&(c4 ==9) &&(d2 !=c2) ){ // Clear the previouis First Digit and redraw wall myGLCD.setColor(0,0,0); myGLCD.fillRect(50, 70, 70, 165);} myGLCD.setColor(255, 255, 255); myGLCD.setBackColor(0, 0, 0); myGLCD.setFont(SevenSeg_XXXL_Num); // Second Digitif((d2 !=c2)||(xsetup ==true)){ myGLCD.printNumI(d2,70,70); // Print 0}// Third Digitif((d3 !=c3)||(xsetup ==true)){ myGLCD.printNumI(d3,143,70); // Was 145 }// Fourth Digitif((d4 !=c4)||(xsetup ==true)){ myGLCD.printNumI(d4,204,70); // Was 205 }if (xsetup ==true){ xsetup =false; // Reset Flag now leaving setup mode } // Print PM or AM // myGLCD.setColor(1, 73, 240); myGLCD.setBackColor(0, 0, 0); myGLCD.setFont(BigFont); if (pm ==0) { myGLCD.print("AM", 270, 147); } else { myGLCD.print("PM", 270, 147); }// ----------- Alarm Set on LHS lower pillarif (alarmstatus ==true) { // Print AS on fron screenleft hand side myGLCD.print("AS", 7, 147); } // Round dots myGLCD.setColor(255, 255, 255); myGLCD.setBackColor(0, 0, 0); myGLCD.fillCircle(137, 105, 5); myGLCD.fillCircle(137, 135, 5);//--------------------- copy exising time digits to global variables so that these can be used to test which digits change in futurec1 =d1;c2 =d2;c3 =d3;c4 =d4;}// =====initiateGame - Custom Functionvoid drawscreen() { // Setup Clock Background //Draw Background lines myGLCD.setColor(1, 73, 240);// myGLCD.setColor(229, 14, 122);// myGLCD.setColor(255, 0, 131); // ---------------- Outside wall myGLCD.drawRoundRect(0, 239, 319, 0); myGLCD.drawRoundRect(2, 237, 317, 2); myGLCD.drawBitmap (ghostX, ghostY, 28, 28, rd_ghost); // Closed Ghost myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioR3); // Closed Ghost myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey2); // Closed Ghost myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, r_o_pacman); // Closed Ghost myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien1); // Closed Ghost myGLCD.drawBitmap (CannonX, CannonY, 40, 40, Cannon); // Closed Ghost } // ********************************** // ******* Enter Setup Mode ********* // ********************************** // Use up down arrows to change time and alrm settings void clocksetup(){ int timehour =hour();int timeminute =minute();// Read Alarm Set Time from Eeprom // read a byte from the current address of the EEPROM ahour =EEPROM.read(100); alarmhour =(int)ahour; if (alarmhour>24 ) { alarmhour =0; } amin =EEPROM.read(101); alarmminute =(int)amin; if (alarmminute>60 ) { alarmminute =0; }boolean savetimealarm =false; // If save button pushed save the time and alarm // Setup Screen myGLCD.clrScr();// ---------------- Outside wall myGLCD.setColor(255, 255, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.drawRoundRect(0, 239, 319, 0); myGLCD.drawRoundRect(2, 237, 317, 2); //Reset screenpressed flagscreenPressed =false;// Read in current clock time and Alarm time // Setup buttons myGLCD.setFont(BigFont); // Time Set buttons myGLCD.print("+ +", 135, 38); myGLCD.print("- -", 135, 82); myGLCD.drawRoundRect(132, 35, 152, 55); // time hour + myGLCD.drawRoundRect(180, 35, 200, 55); // time minute + myGLCD.drawRoundRect(132, 80, 152, 100); // time hour - myGLCD.drawRoundRect(180, 80, 200, 100); // time minute - // Alarm Set buttons myGLCD.print("+ +", 135, 138); myGLCD.print("- -", 135, 182); myGLCD.drawRoundRect(132, 135, 152, 155); // alarm hour + myGLCD.drawRoundRect(180, 135, 200, 155); // alarm minute + myGLCD.drawRoundRect(132, 180, 152, 200); // alarm hour - myGLCD.drawRoundRect(180, 180, 200, 200); // alarm minute - myGLCD.print("SAVE", 13, 213); myGLCD.print("EXIT", 245, 213); myGLCD.drawRoundRect(10, 210, 80, 230); myGLCD.drawRoundRect(243, 210, 310, 230); // Get your Ghost on myGLCD.drawBitmap (50, 20, 28, 28, rd_ghost); // Closed Ghost myGLCD.drawBitmap (240, 100, 28, 28, r_o_pacman); // Closed Ghost myGLCD.drawBitmap (240, 20, 40, 40, Alien1); // Closed Ghost // Begin Loop herewhile (xsetup ==true){ if (alarmstatus ==true){ // flag where false is off and true is on myGLCD.print("SET", 220, 160); } else { myGLCD.print("OFF", 220, 160); } myGLCD.drawRoundRect(218, 157, 268, 177);// Draw Sound Button myGLCD.print("TEST", 50, 110); // Triggers alarm sound myGLCD.drawRoundRect(48, 108, 116, 128); // Display Current Time myGLCD.print("Time", 40, 60); // myGLCD.printNumI(timehour, 130, 60); if(timehour>=10){ // Annoyingly if number less than 10 doesnt print on RHS and misses zero so need to compensate myGLCD.printNumI(timehour, 130, 60); // If>=10 just print minute } else { myGLCD.print("0", 130, 60); myGLCD.printNumI(timehour, 146, 60); } myGLCD.print(":", 160, 60); if(timeminute>=10){ // Annoyingly if number less than 10 doesnt print on RHS and misses zero so need to compensate myGLCD.printNumI(timeminute, 175, 60); // If>=10 just print minute } else { myGLCD.print("0", 175, 60); myGLCD.printNumI(timeminute, 193, 60); } //Display Current Alarm Setting myGLCD.print("Alarm", 40, 160); // myGLCD.printNumI(alarmhour, 130, 160); if(alarmhour>=10){ // Annoyingly if number less than 10 doesnt print on RHS and misses zero so need to compensate myGLCD.printNumI(alarmhour, 130, 160); // If>=10 just print minute } else { myGLCD.print("0", 130, 160); myGLCD.printNumI(alarmhour, 146, 160); } myGLCD.print(":", 160, 160); if(alarmminute>=10){ // Annoyingly if number less than 10 doesnt print on RHS and misses zero so need to compensate myGLCD.printNumI(alarmminute, 175, 160); // If>=10 just print minute } else { myGLCD.print("0", 175, 160); myGLCD.printNumI(alarmminute, 193, 160); } // Read input to determine if buttons pressed myTouch.read(); if (myTouch.dataAvailable()) { xT =myTouch.getX(); yT =myTouch.getY(); // Capture input command from user if ((xT>=230) &&(xT<=319) &&(yT>=200) &&(yT<=239)) { // (243, 210, 310, 230) Exit Button xsetup =false; // Exit setupmode } else if ((xT>=0) &&(xT<=90) &&(yT>=200) &&(yT<=239)) { // (243, 210, 310, 230) Save Alarm and Time Button savetimealarm =true; // Exit and save time and alarm xsetup =false; // Exit setupmode } else if ((xT>=130) &&(xT<=154) &&(yT>=32) &&(yT<=57)) { // Time Hour + (132, 35, 152, 55) timehour =timehour + 1; // Increment Hour if (timehour ==24) { // reset hour to 0 hours if 24 timehour =0; } } else if ((xT>=130) &&(xT<=154) &&(yT>=78) &&(yT<=102)) { // (132, 80, 152, 100); // time hour - timehour =timehour - 1; // Increment Hour if (timehour ==-1) { // reset hour to 23 hours if <0 timehour =23; } } else if ((xT>=178) &&(xT<=202) &&(yT>=32) &&(yT<=57)) { // Time Minute + (180, 35, 200, 55) timeminute =timeminute + 1; // Increment Hour if (timeminute ==60) { // reset minute to 0 minutes if 60 timeminute =0; } } else if ((xT>=178) &&(xT<=202) &&(yT>=78) &&(yT<=102)) { // (180, 80, 200, 100); // time minute - timeminute =timeminute - 1; // Increment Hour if (timeminute ==-1) { // reset minute to 0 minutes if 60 timeminute =59; } } else if ((xT>=130) &&(xT<=154) &&(yT>=133) &&(yT<=157)) { // (132, 135, 152, 155); // alarm hour + alarmhour =alarmhour + 1; // Increment Hour if (alarmhour ==24) { // reset hour to 0 hours if 24 alarmhour =0; } } else if ((xT>=130) &&(xT<=154) &&(yT>=178) &&(yT<=202)) { // (132, 180, 152, 200); // alarm hour - alarmhour =alarmhour - 1; // Increment Hour if (alarmhour ==-1) { // reset hour to 23 hours if <0 alarmhour =23; } } else if ((xT>=178) &&(xT<=202) &&(yT>=133) &&(yT<=157)) { // (180, 135, 200, 155); // alarm minute + alarmminute =alarmminute + 1; // Increment Hour if (alarmminute ==60) { // reset minute to 0 minutes if 60 alarmminute =0; } } else if ((xT>=178) &&(xT<=202) &&(yT>=178) &&(yT<=202)) { // (180, 180, 200, 200); // alarm minute - alarmminute =alarmminute - 1; // Increment Hour if (alarmminute ==-1) { // reset minute to 0 minutes if 60 alarmminute =59; } } else if ((xT>=216) &&(xT<=270) &&(yT>=155) &&(yT<=179)) { // (218, 157, 268, 177); // alarm set button pushed if (alarmstatus ==true) { alarmstatus =false; // Turn off Alarm } else { alarmstatus =true; // Turn on Alarm } } else if ((xT>=46) &&(xT<=118) &&(yT>=106) &&(yT<=130)) { // ((48, 108, 116, 128); // alarm test button pushed // Set off alarm by toggling D8, recorded sound triggered by LOW to HIGH transition digitalWrite(8,HIGH); // Set high digitalWrite(8,LOW); // Set low } // Should mean changes should scroll if held down delay(250); } } if ( savetimealarm ==true) { // The following codes transmits the data to the RTC Wire.beginTransmission(DS1307); Wire.write(byte(0)); Wire.write(decToBcd(0)); Wire.write(decToBcd(timeminute)); Wire.write(decToBcd(timehour)); Wire.write(decToBcd(0)); Wire.write(decToBcd(0)); Wire.write(decToBcd(0)); Wire.write(decToBcd(0)); Wire.write(byte(0)); Wire.endTransmission(); // Ends transmission of data // Write the Alarm Time to EEPROM so it can be stored when powered off //alarmhour =(int)ahour; ahour =(byte)alarmhour; amin =(byte)alarmminute; EEPROM.write(100, ahour); EEPROM.write(101, amin); // Now time and alarm data saved reset fla g savetimealarm =false;} //* Clear Screen myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.fillRect(0,239,319,0); xsetup =true; // Set Flag now leaving setup mode in order to draw Clock Digits setSyncProvider(RTC.get); // the function to get the time from the RTC setSyncInterval(60); // sync the time every 60 seconds (1 minutes) drawscreen(); // Initiate the screen UpdateDisp(); // update value to clock } // =================Decimal to BCD converterbyte decToBcd(byte val) { return ((val/10*16) + (val%10));} /* myGLCD.drawBitmap (ghostX, ghostY, 28, 28, ghost); // Closed Ghost myGLCD.drawBitmap (MarioX, MarioY, 40, 40, Mario); // Closed Ghost myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey); // Closed Ghost myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, r_o_pacman); // Closed Ghost myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien); // Closed Ghost myGLCD.drawBitmap (CannonX, CannonY, 40, 40, Cannon); // Closed Ghost *///**********************************************************************************************************//======Draws the rd_ghost - bitmapvoid drawghost(int x, int y, int d, int p) { // Draws the ghost - bitmap // knotting direction d ==0 =right, 1 =down, 2 =left, 3 =up myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); if ( d ==0){ // Right myGLCD.fillRect(x-3, y, x, y+28); // Clear trail off graphic before printing new position // draw image myGLCD.drawBitmap (ghostX, ghostY, 28, 28, rr_ghost); } else if ( d ==1){ // Down myGLCD.fillRect(x+3, y-3, x+36, y); // Clear trail off graphic before printing new position // draw image myGLCD.drawBitmap (ghostX, ghostY, 28, 28, rd_ghost); } else if ( d ==2){ // Left myGLCD.fillRect(x+28, y, x+31, y+28); // Clear trail off graphic before printing new positi // draw image myGLCD.drawBitmap (ghostX, ghostY, 28, 28, rl_ghost); // draw image } else if ( d ==3){ // Up myGLCD.fillRect(x, y+29, x+28, y+28); // Clear trail off graphic before printing new position // draw image myGLCD.drawBitmap (ghostX, ghostY, 28, 28, ru_ghost); }}//**********************************************************************************************************//======Draws the Mario - bitmapvoid drawMario(int x, int y, int d, int p) { // Draws the Mario - bitmap // Mario direction d ==0 =right, 1 =down, 2 =left, 3 =up myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); if ( d ==0){ // Right myGLCD.fillRect(x-3, y+3, x, y+36); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioR1); } else if (p==1) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioR3); } else if (p==2) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioR2); } else if (p==3) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioR3); } } else if ( d ==1){ // Down myGLCD.fillRect(x+3, y-3, x+36, y); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU1); } else if (p==1) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU2); } else if (p==2) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU1); } else if (p==3) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU2); } } else if ( d ==2){ // Left myGLCD.fillRect(x+28, y, x+31, y+28); // Clear trail off graphic before printing new positi // draw image if (p==0) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioL1); } else if (p==1) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioL3); } else if (p==2) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioL2); } else if (p==3) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioL3); } } else if ( d ==3){ // Up myGLCD.fillRect(x, y+30, x+28, y+28); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU1); } else if (p==1) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU2); } else if (p==2) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU1); } else if (p==3) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU2); } }// myGLCD.drawBitmap (MarioX, MarioY, 40, 40, MarioR3); }//**********************************************************************************************************//======Draws the Cannon - bitmapvoid drawCannon(int x, int y, int d, int p) { // Draws the Cannon - bitmap // Cannon direction d ==0 =right, 1 =down, 2 =left, 3 =up myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); if ( d ==0){ // Right myGLCD.fillRect(x-3, y+3, x, y+36); // Clear trail off graphic before printing new position // draw image } else if ( d ==1){ // Down myGLCD.fillRect(x+3, y-3, x+36, y); // Clear trail off graphic before printing new position // draw image } else if ( d ==2){ // Left myGLCD.fillRect(x+41, y+3, x+40, y+36); // Clear trail off graphic before printing new positi // draw image } else if ( d ==3){ // Up myGLCD.fillRect(x, y+41, x+40, y+40); // Clear trail off graphic before printing new position // draw image } myGLCD.drawBitmap (CannonX, CannonY, 40, 40, Cannon); }//**********************************************************************************************************//======Draws the Monkey - bitmapvoid drawMonkey(int x, int y, int d, int p) { // Draws the Monkey - bitmap // Monkey direction d ==0 =right, 1 =down, 2 =left, 3 =up myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); if ( d ==0){ // Right myGLCD.fillRect(x-3, y, x, y+40); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey2); } else if (p==1) { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey2); } else if (p==2) { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey3); }else { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey3); } } else if ( d ==1){ // Down myGLCD.fillRect(x, y-3, x+40, y); // Clear trail off graphic before printing new position // draw image myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey3); } else if ( d ==2){ // Left myGLCD.fillRect(x+41, y, x+40, y+40); // Clear trail off graphic before printing new positi // draw image if (p==0) { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey2); } else if (p==1) { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey2); } else if (p==2) { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey3); }else { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey3); } } else if ( d ==3){ // Up myGLCD.fillRect(x, y+43, x+40, y+40); // Clear trail off graphic before printing new position // draw image myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey3); } }//**********************************************************************************************************//======Draws the pacman - bitmapvoid drawpacman(int x, int y, int d, int p) { // Draws the pacman - bitmap // pacman direction d ==0 =right, 1 =down, 2 =left, 3 =up myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); if ( d ==0){ // Right myGLCD.fillRect(x-3, y+3, x, y+36); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, c_pacman); } else if (p==1) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, r_m_pacman); } else if (p==2) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, r_o_pacman); }else { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, r_m_pacman); } } else if ( d ==1){ // Down myGLCD.fillRect(x+3, y-3, x+36, y); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, c_pacman); } else if (p==1) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, d_m_pacman); } else if (p==2) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, d_o_pacman); }else { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, d_m_pacman); } } else if ( d ==2){ // Left myGLCD.fillRect(x+28, y, x+31, y+28); // Clear trail off graphic before printing new positi // draw image if (p==0) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, c_pacman); } else if (p==1) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, l_m_pacman); } else if (p==2) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, l_o_pacman); }else { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, l_m_pacman); } } else if ( d ==3){ // Up myGLCD.fillRect(x, y+29, x+28, y+28); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, c_pacman); } else if (p==1) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, u_m_pacman); } else if (p==2) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, u_o_pacman); }else { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, u_m_pacman); } }// myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, r_o_pacman); }//**********************************************************************************************************//======Draws the Alien - bitmapvoid drawAlien(int x, int y, int d, int p) { // Draws the Alien - bitmap // Alien direction d ==0 =right, 1 =down, 2 =left, 3 =up myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); if ( d ==0){ // Right myGLCD.fillRect(x-3, y+3, x, y+36); // Clear trail off graphic before printing new position // draw image if((p ==1)||(p ==3)){ myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien1); } else { myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien2); } } else if ( d ==1){ // Down myGLCD.fillRect(x+3, y-3, x+36, y); // Clear trail off graphic before printing new position // draw image if((p ==1)||(p ==3)){ myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien1); } else { myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien2); } } else if ( d ==2){ // Left myGLCD.fillRect(x+41, y+3, x+40, y+36); // Clear trail off graphic before printing new positi // draw image if((p ==1)||(p ==3)){ myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien1); } else { myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien2); } } else if ( d ==3){ // Up myGLCD.fillRect(x, y+41, x+40, y+40); // Clear trail off graphic before printing new position // draw image if((p ==1)||(p ==3)){ myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien1); } else { myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien2); } } }

Aangepaste onderdelen en behuizingen

Thingiverse
https://www.thingiverse.com/thing:3017701CAD file on thingiverse.com

Schema's


Productieproces

  1. LED-sequencer
  2. Koekoeksklok
  3. Arduino pov vision-klok
  4. Verilog-klokgenerator
  5. Eenvoudige Word Clock (Arduino)
  6. TeleBall Retro handheld gameconsole
  7. Hoofdklok
  8. Ingegno Retro Games-console
  9. Italiaanse Word Clock
  10. Berlijnse klok
  11. Infinity spiegelklok