Arduboy-homemade-package/board-package-source/libraries/ArdVoice/examples/Sample2-Complex/Sample2-Complex.ino

136 lines
3.2 KiB
Arduino
Raw Normal View History

#include <Arduboy2.h>
#include <ArdVoice.h>
#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.h>
ArdBitmap<WIDTH, HEIGHT> 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();
}