Arduboy-homemade-package/board-package-source/libraries/Arduboy2/examples/HardwareTest/HardwareTest.ino

169 lines
5.2 KiB
Arduino
Raw Permalink Normal View History

/*******************************************************************************
Arduboy hardware test toy v1.0 September 2017 by Mr.Blinky
*******************************************************************************/
#include <Arduboy2.h>
#include "globals.h"
#include "bitmaps.h"
Arduboy2 arduboy;
Sprites sprites;
////////////////////////////////////////////////////////////////////////////////
void setup()
{
arduboy.begin();
arduboy.setFrameRate(FRAMERATE);
arduboy.audio.on;
}
////////////////////////////////////////////////////////////////////////////////
void loop()
{
if (!(arduboy.nextFrame()))
return;
sprites.drawOverwrite(BACKGROUND_X,BACKGROUND_Y,background_gfx,0);
#ifdef AB_DEVKIT
sprites.drawOverwrite(NOSPEAKER_X,NOSPEAKER_Y,nospeaker_gfx,0);
#endif
//button input control
if (arduboy.pressed(LEFT_BUTTON))
{
sprites.drawSelfMasked(BUTTON_LEFT_X,BUTTON_LEFT_Y,buttonleft_gfx,0);
if (selectedOption > 4) selectedOption--;
else if (selectedOption < 3) decreaseOptionValue();
hardwareChange = true;
}
if (arduboy.pressed(RIGHT_BUTTON))
{
sprites.drawSelfMasked(BUTTON_RIGHT_X,BUTTON_RIGHT_Y,buttonright_gfx,0);
if (selectedOption > 2)
{
if (selectedOption == 3) selectedOption += 2;
else if (selectedOption < MAX_OPTIONS-1) selectedOption++;
}
else increaseOptionValue();
hardwareChange = true;
}
if (arduboy.pressed(UP_BUTTON))
{
sprites.drawSelfMasked(BUTTON_UP_X,BUTTON_UP_Y,buttonup_gfx,0);
if (selectedOption > 0) selectedOption--;
hardwareChange = true;
}
if (arduboy.pressed(DOWN_BUTTON))
{
sprites.drawSelfMasked(BUTTON_DOWN_X,BUTTON_DOWN_Y,buttondown_gfx,0);
if (selectedOption < MAX_OPTIONS-1) selectedOption++;
hardwareChange = true;
}
if (arduboy.pressed(A_BUTTON))
{
sprites.drawSelfMasked(BUTTON_A_X,BUTTON_A_Y,button_gfx,0);
decreaseOptionValue();
hardwareChange = true;
}
if (arduboy.pressed(B_BUTTON))
{
sprites.drawSelfMasked(BUTTON_B_X,BUTTON_B_Y,button_gfx,0);
increaseOptionValue();
hardwareChange = true;
}
// draw focused option
switch (selectedOption)
{
case 0: sprites.drawOverwrite(RED_X,RED_Y,red_focus_gfx,0);
break;
case 1: sprites.drawOverwrite(GREEN_X,GREEN_Y,green_focus_gfx,0);
break;
case 2: sprites.drawOverwrite(BLUE_X,BLUE_Y,blue_focus_gfx,0);
break;
case 3: sprites.drawOverwrite(RXLED_X,RXLED_Y,rxled_on_focus_gfx,0);
break;
case 4: sprites.drawOverwrite(TXLED_X,TXLED_Y,txled_on_focus_gfx,0);
break;
case 5: sprites.drawOverwrite(SPEAKER1_X,SPEAKER1_Y,speaker1_on_focus_gfx,0);
break;
case 6: sprites.drawOverwrite(SPEAKER2_X,SPEAKER2_Y,speaker2_on_focus_gfx,0);
break;
}
//Draw option values
sprites.drawOverwrite(SLIDER_X + SLIDER_X_STEP * rgbLed.red,SLIDER_Y,slider_gfx,0);
sprites.drawOverwrite(SLIDER_X + SLIDER_X_STEP * rgbLed.green,SLIDER_Y + 1 * SLIDER_HEIGHT,slider_gfx,0);
sprites.drawOverwrite(SLIDER_X + SLIDER_X_STEP * rgbLed.blue,SLIDER_Y + 2 * SLIDER_HEIGHT,slider_gfx,0);
sprites.drawOverwrite(ON_GFX_X,ON_GFX_Y,rxled_on ? on_gfx : off_gfx,0);
sprites.drawOverwrite(OFF_GFX_X,OFF_GFX_Y,txled_on ? on_gfx : off_gfx,0);
if (speaker1_on) sprites.drawOverwrite(SOUND1_X,SOUND1_Y,sound_gfx,0);
if (speaker2_on) sprites.drawOverwrite(SOUND2_X,SOUND2_Y,sound_gfx,0);
//update complete display
arduboy.display();
//apply hardware changes
if (hardwareChange)
{
arduboy.setRGBled(pgm_read_byte(rgbValues + rgbLed.red), pgm_read_byte(rgbValues + rgbLed.green), pgm_read_byte(rgbValues + rgbLed.blue));
rxled_on ? RXLED1 : RXLED0;
txled_on ? TXLED1 : TXLED0;
for (int i = 0; i < 50; i++)
{
speaker1_on ? SPEAKER_1_PORT ^= _BV(SPEAKER_1_BIT) : SPEAKER_1_PORT &= ~_BV(SPEAKER_1_BIT);
#ifndef AB_DEVKIT
speaker2_on ? SPEAKER_2_PORT ^= _BV(SPEAKER_2_BIT) : SPEAKER_2_PORT |= _BV(SPEAKER_2_BIT);
#endif
delayMicroseconds(300);
}
hardwareChange = false;
}
}
////////////////////////////////////////////////////////////////////////////////
void decreaseOptionValue(void)
{
switch (selectedOption)
{
case 0: if (rgbLed.red > 0) rgbLed.red --;
break;
case 1: if (rgbLed.green > 0) rgbLed.green --;
break;
case 2: if (rgbLed.blue > 0) rgbLed.blue --;
break;
case 3: rxled_on = !rxled_on;
break;
case 4: txled_on = !txled_on;
break;
case 5: speaker1_on = !speaker1_on;
break;
case 6: speaker2_on = !speaker2_on;
break;
}
}
void increaseOptionValue(void)
{
switch (selectedOption)
{
case 0: if (rgbLed.red < RGB_MAX_STEPS-1) rgbLed.red ++;
break;
case 1: if (rgbLed.green < RGB_MAX_STEPS-1) rgbLed.green ++;
break;
case 2: if (rgbLed.blue < RGB_MAX_STEPS-1) rgbLed.blue ++;
break;
case 3: rxled_on = !rxled_on;
break;
case 4: txled_on = !txled_on;
break;
case 5: speaker1_on = !speaker1_on;
break;
case 6: speaker2_on = !speaker2_on;
break;
}
}
////////////////////////////////////////////////////////////////////////////////