#include #include #include "voices.h" #include "bitmaps.h" #define ARRAY_LEN(a) (sizeof(a) / sizeof((a)[0])) Arduboy2 arduboy; ArdVoice ardvoice; #define ARDBITMAP_SBUF arduboy.getBuffer() #include ArdBitmap ardbitmap; unsigned long initTime; int voice_segment = 0; boolean onePlayed = false; boolean twoPlayed = false; boolean threePlayed = false; boolean merryPlayed = false; void setup() { arduboy.begin(); arduboy.invert(!arduboy.audio.enabled()); arduboy.setFrameRate(60); initTime = millis(); } void loop() { if (!(arduboy.nextFrame())) return; arduboy.clear(); unsigned long myTime = (millis()-initTime); float resize1 = abs(sin((millis()-initTime)/ (1000.0/(PI)))); float resize2 = abs(sin((millis()-initTime - 3000)/ (4000.0/(PI)))); float resize3 = abs(sin((millis()-initTime - 7000)/ (8000.0/(PI)))); if (myTime < 7000){ setContrast((myTime > 3000 ? resize2 :resize1) * 255); ardbitmap.drawCompressedResized(WIDTH / 2, HEIGHT / 2, myTime < 1000 ? NUMBER_3 : myTime < 2000 ? NUMBER_2 : myTime < 3000 ? NUMBER_1 : MERRY_CHRISTMAS , WHITE, ALIGN_CENTER, MIRROR_NONE, myTime > 3000 ? resize2 :resize1); } else { int contrast = resize3 * 255; setContrast(contrast); ardbitmap.drawCompressedResized(WIDTH/2, HEIGHT, DOG[ (myTime/80)% ARRAY_LEN(DOG)], WHITE, ALIGN_H_CENTER | ALIGN_V_BOTTOM, MIRROR_NONE, resize3 ); } //VOICES if (myTime > 250 && !threePlayed){ threePlayed = true; ardvoice.playVoice(three_q6); } if (myTime > 1250 && !twoPlayed){ twoPlayed = true; ardvoice.playVoice(two_q6); } if (myTime > 2300 && !onePlayed){ onePlayed = true; ardvoice.playVoice(one_q6); } if (myTime > 3200){ if(!ardvoice.isVoicePlaying()) { switch(voice_segment){ case 0: ardvoice.playVoice(merry_q6); voice_segment++; break; case 1: ardvoice.playVoice(merry_q6, 4400, 0, 1.0); voice_segment++; break; case 2: ardvoice.playVoice(merry_q6, 4400, 13500, 0.8); voice_segment++; break; case 3: ardvoice.playVoice(merry_q6, 4400, 11500, 1.3); voice_segment++; break; case 4: ardvoice.playVoice(merry_q6, 11500, 13500, 1.4); voice_segment++; break; default: break; } } } //Reset demo if(arduboy.pressed(A_BUTTON) || arduboy.pressed(B_BUTTON)){ initTime = millis(); voice_segment = 0; onePlayed = false; twoPlayed = false; threePlayed = false; merryPlayed = false; } if(arduboy.pressed(UP_BUTTON)){ arduboy.audio.on(); arduboy.invert(false); } if(arduboy.pressed(DOWN_BUTTON)){ arduboy.audio.off(); arduboy.invert(true); } arduboy.display(); } void setContrast(uint8_t contrast){ arduboy.LCDCommandMode(); SPI.transfer(0xd9); SPI.transfer(0x2f); SPI.transfer(0xdb); SPI.transfer(0x00); SPI.transfer(0x81); // contrast command SPI.transfer(contrast); arduboy.LCDDataMode(); }