ProtoTracer  1.0
Real-time 3D rendering and animation engine
Loading...
Searching...
No Matches
GammaProject.h
Go to the documentation of this file.
1#pragma once
2
3#include "Animation.h"
4#include "KeyFrameTrack.h"
5#include "EasyEaseAnimator.h"
6#include "../Objects/Background.h"
7#include "../Objects/LEDStripBackground.h"
8#include "../Morph/GammaFace.h"
9#include "../Render/Scene.h"
10#include "../Signals/FunctionGenerator.h"
11#include "../Menu/SingleButtonMenu.h"
12#include "../Sensors/APDS9960.h"
13
14#include "../Materials/Animated/RainbowNoise.h"
15#include "../Materials/Animated/RainbowSpiral.h"
16#include "../Materials/Animated/SpectrumAnalyzer.h"
17#include "../Materials/Animated/AudioReactiveGradient.h"
18#include "../Materials/Animated/Oscilloscope.h"
19
20#include "../Materials/MaterialAnimator.h"
21
23
24#include "../Signals/FFTVoiceDetection.h"
25
26#include "../Sensors/MicrophoneFourier_MAX9814.h"
27
28#include "../Render/ObjectAlign.h"
29
30#include "../Sensors/SHARPGP2Y.h"
31#include "../Sensors/SerialSync.h"
32#include "../Filter/KalmanFilter.h"
33
34#ifdef FRONTFACE
35#include "../Sensors/SSD1306.h"
36#endif
37
38//0x28, 0x39, 0x3C
39
40class GammaAnimation : public Animation<2> {
41private:
42 GammaFace pM;
43 Background background;
44 EasyEaseAnimator<30> eEA = EasyEaseAnimator<30>(EasyEaseInterpolation::Overshoot, 1.0f, 0.35f);
45
46 //Materials
56
57 RGBColor gradientSpectrum[6] = {RGBColor(255, 0, 0), RGBColor(255, 255, 0), RGBColor(0, 255, 0), RGBColor(0, 255, 255), RGBColor(0, 0, 255), RGBColor(255, 0, 255)};
59
62
63 SpectrumAnalyzer sA = SpectrumAnalyzer(Vector2D(400, 250), Vector2D(-150, 130), true, true);
64 AudioReactiveGradient aRG = AudioReactiveGradient(Vector2D(160, 160), Vector2D(-200, 100), true, true);
65 Oscilloscope oSC = Oscilloscope(Vector2D(200, 100), Vector2D(-200, 100));
66
67 //Animation controllers
69
76
80
82
85 #ifdef FRONTFACE
86 SSD1306 oledDisplay;
87 #endif
88
90
91 float offsetFace = 0.0f;
92 float offsetFaceSA = 0.0f;
93 float offsetFaceARG = 0.0f;
94 float offsetFaceOSC = 0.0f;
95 uint8_t offsetFaceInd = 50;
96 uint8_t offsetFaceIndSA = 51;
97 uint8_t offsetFaceIndARG = 52;
98 uint8_t offsetFaceIndOSC = 53;
99
101 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::BlushEye), GammaFace::BlushEye, 40, 0.0f, 1.0f);
102 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::HideBlush), GammaFace::HideBlush, 10, 1.0f, 0.0f);
103 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::HideEyeBrow), GammaFace::HideEyeBrow, 10, 0.0f, 1.0f);
104 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::HideSecondEye), GammaFace::HideSecondEye, 10, 0.0f, 1.0f);
105 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::OwOMouth), GammaFace::OwOMouth, 60, 0.0f, 1.0f);
106
107 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::SadEye), GammaFace::SadEye, 70, 0.0f, 1.0f);
108 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::SadEyeBrow), GammaFace::SadEyeBrow, 80, 0.0f, 1.0f);
109 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::SadMouth), GammaFace::SadMouth, 90, 0.0f, 1.0f);
110
111 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::FlatMouth), GammaFace::FlatMouth, 50, 0.0f, 1.0f);
112 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::DeadEye), GammaFace::DeadEye, 1, 0.0f, 1.0f);
113
114 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::HeartEye), GammaFace::HeartEye, 30, 0.0f, 1.0f);
115
116 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::OwO), GammaFace::OwO, 90, 0.0f, 1.0f);
117
118 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::AlphaGenCircle), GammaFace::AlphaGenCircle, 90, 0.0f, 1.0f);
119 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::HideAll), GammaFace::HideAll, 90, 0.0f, 1.0f);
120
121 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::AngryEyeMouth), GammaFace::AngryEyeMouth, 90, 0.0f, 1.0f);
122 eEA.AddParameter(pM.GetMorphWeightReference(GammaFace::Gamma), GammaFace::Gamma, 20, 0.0f, 1.0f);
123
124 eEA.AddParameter(&offsetFace, offsetFaceInd, 40, 0.0f, 1.0f);
125 eEA.AddParameter(&offsetFaceSA, offsetFaceIndSA, 40, 0.0f, 1.0f);
128 }
129
131 blink.AddParameter(pM.GetMorphWeightReference(GammaFace::ClosedEye));
132 }
133
135 eEA.SetInterpolationMethod(GammaFace::HideBlush, EasyEaseInterpolation::Cosine);
136 eEA.SetInterpolationMethod(GammaFace::SadEye, EasyEaseInterpolation::Cosine);
137 eEA.SetInterpolationMethod(GammaFace::SadEyeBrow, EasyEaseInterpolation::Cosine);
138 eEA.SetInterpolationMethod(GammaFace::SadMouth, EasyEaseInterpolation::Cosine);
139
140 eEA.SetInterpolationMethod(GammaFace::HideEyeBrow, EasyEaseInterpolation::Cosine);
141 eEA.SetInterpolationMethod(GammaFace::HideSecondEye, EasyEaseInterpolation::Cosine);
142 eEA.SetInterpolationMethod(GammaFace::AlphaGenCircle, EasyEaseInterpolation::Cosine);
143 }
144
162
164 blink.Update();
165 }
166
167 void Default(){
168 pM.Reset();
169 blink.Play();
170
171 eEA.AddParameterFrame(GammaFace::HideSecondEye, 1.0f);
172 eEA.AddParameterFrame(GammaFace::Gamma, 1.0f);
173 }
174
175 void OwO(){
176 blink.Pause();
177 eEA.AddParameterFrame(GammaFace::BlushEye, 1.0f);
178 eEA.AddParameterFrame(GammaFace::HideBlush, 0.0f);
179 eEA.AddParameterFrame(GammaFace::HideEyeBrow, 1.0f);
180 eEA.AddParameterFrame(GammaFace::HideSecondEye, 1.0f);
181 eEA.AddParameterFrame(GammaFace::OwOMouth, 1.0f);
182 eEA.AddParameterFrame(GammaFace::Gamma, 1.0f);
183
185 }
186
187 void Sad(){
188 blink.Play();
189 eEA.AddParameterFrame(GammaFace::SadEye, 1.0f);
190 eEA.AddParameterFrame(GammaFace::SadEyeBrow, 1.0f);
191 eEA.AddParameterFrame(GammaFace::SadMouth, 1.0f);
192 eEA.AddParameterFrame(GammaFace::Gamma, 1.0f);
193 eEA.AddParameterFrame(GammaFace::HideSecondEye, 1.0f);
194
196 }
197
198 void Dead(){
199 blink.Pause();
200 eEA.AddParameterFrame(GammaFace::FlatMouth, 1.0f);
201 eEA.AddParameterFrame(GammaFace::DeadEye, 1.0f);
202 eEA.AddParameterFrame(GammaFace::Gamma, 1.0f);
203 eEA.AddParameterFrame(GammaFace::HideSecondEye, 1.0f);
204
206 }
207
208 void Heart(){
209 blink.Pause();
210 eEA.AddParameterFrame(GammaFace::HeartEye, 1.0f);
211 eEA.AddParameterFrame(GammaFace::HideEyeBrow, 1.0f);
212 eEA.AddParameterFrame(GammaFace::OwOMouth, 1.0f);
213 eEA.AddParameterFrame(GammaFace::Gamma, 1.0f);
214 eEA.AddParameterFrame(GammaFace::HideSecondEye, 1.0f);
215
217 }
218
219 void OwO2(){
220 blink.Pause();
221 eEA.AddParameterFrame(GammaFace::HideBlush, 0.0f);
222 eEA.AddParameterFrame(GammaFace::HideEyeBrow, 0.0f);
223 eEA.AddParameterFrame(GammaFace::OwO, 1.0f);
224
226 }
227
229 blink.Play();
230 eEA.AddParameterFrame(GammaFace::HideBlush, 0.0f);
231 eEA.AddParameterFrame(GammaFace::HideEyeBrow, 0.0f);
232 eEA.AddParameterFrame(GammaFace::AlphaGenCircle, 1.0f);
233
234 pM.SetMorphWeight(GammaFace::HideSecondEye, 0.0f);
235 }
236
237 void AngryFace(){
238 blink.Play();
239 pM.SetMorphWeight(GammaFace::HideSecondEye, 1.0f);
240
241 eEA.AddParameterFrame(GammaFace::HideBlush, 1.0f);
242 eEA.AddParameterFrame(GammaFace::HideEyeBrow, 1.0f);
243 eEA.AddParameterFrame(GammaFace::AngryEyeMouth, 1.0f);
244 eEA.AddParameterFrame(GammaFace::Gamma, 1.0f);
245 pM.SetMorphWeight(GammaFace::HideSecondEye, 0.0f);
246
248 }
249
256
263
270
273 //eEA.AddParameterFrame(GammaFace::vrc_v_ss, MicrophoneFourierIT::GetCurrentMagnitude() / 2.0f);
274
275 if(MicrophoneFourierIT::GetCurrentMagnitude() > 0.05f){
276 voiceDetection.Update(MicrophoneFourierIT::GetFourierFiltered(), MicrophoneFourierIT::GetSampleRate());
277
278 //eEA.AddParameterFrame(GammaFace::vrc_v_ee, voiceDetection.GetViseme(voiceDetection.EE));
279 //eEA.AddParameterFrame(GammaFace::vrc_v_ih, voiceDetection.GetViseme(voiceDetection.AH));
280 //eEA.AddParameterFrame(GammaFace::vrc_v_dd, voiceDetection.GetViseme(voiceDetection.UH));
281 //eEA.AddParameterFrame(GammaFace::vrc_v_rr, voiceDetection.GetViseme(voiceDetection.AR));
282 //eEA.AddParameterFrame(GammaFace::vrc_v_ch, voiceDetection.GetViseme(voiceDetection.ER));
283 //eEA.AddParameterFrame(GammaFace::vrc_v_aa, voiceDetection.GetViseme(voiceDetection.AH));
284 //eEA.AddParameterFrame(GammaFace::vrc_v_oh, voiceDetection.GetViseme(voiceDetection.OO));
285 }
286 }
287 }
288
290 switch(Menu::GetFaceColor()){
291 case 1: materialAnimator.AddMaterialFrame(redMaterial, 0.8f); break;
293 case 3: materialAnimator.AddMaterialFrame(whiteMaterial, 0.8f); break;
294 case 4: materialAnimator.AddMaterialFrame(greenMaterial, 0.8f); break;
295 case 5: materialAnimator.AddMaterialFrame(blueMaterial, 0.8f); break;
298 case 8: materialAnimator.AddMaterialFrame(rainbowSpiral, 0.8f); break;
299 case 9: materialAnimator.AddMaterialFrame(rainbowNoise, 0.8f); break;
300 default: break;
301 }
302 }
303
304public:
306 scene.AddObject(pM.GetObject());
307 scene.AddObject(background.GetObject());
308
309 LinkEasyEase();
311
313
315
316 pM.GetObject()->SetMaterial(&materialAnimator);
317 background.GetObject()->SetMaterial(&backgroundMaterial);
318 }
319
320 void Initialize() override {
322 #ifdef FRONTFACE
323 oledDisplay.Initialize();
324 #endif
325
327 MicrophoneFourierIT::Initialize(22, 8000, 50.0f, 120.0f);//8KHz sample rate, 50dB min, 120dB max
328
329 #ifdef FRONTFACE
330 Menu::Initialize(9, 0, 500, Vector2D(380.0f, 180.0f));//7 is number of faces
331 #elif defined(BACKFACE)
332 Menu::Initialize(9, Vector2D(380.0f, 180.0f));//7 is number of faces
333 #endif
334
335 #ifdef FRONTFACE
336 oledDisplay.Display();
337 #endif
338 }
339
340 void FadeIn(float stepRatio) override {}
341 void FadeOut(float stepRatio) override {}
342
344 return pM.GetObject();
345 }
346
347 void Update(float ratio) override {
348 pM.Reset();
349
350 float xOffset = fGenMatXMove.Update();
351 float yOffset = fGenMatYMove.Update();
352
353
355
356 MicrophoneFourierIT::Update();
357 sA.SetHueAngle(ratio * 360.0f * 4.0f);
360
361 aRG.SetRadius((xOffset + 2.0f) * 2.0f + 80.0f);
362 aRG.SetSize(Vector2D((xOffset + 2.0f) * 10.0f + 50.0f, (xOffset + 2.0f) * 10.0f + 50.0f));
363 aRG.SetHueAngle(ratio * 360.0f * 8.0f);
364 aRG.SetRotation(ratio * 360.0f * 2.0f);
365 aRG.SetPosition(Vector2D(-150.0f + xOffset * 4.0f, 130.0f + yOffset * 4.0f));
366
367 oSC.SetRotation(20.0f);
368 oSC.SetSize(Vector2D(400.0f, 200.0f));
369 oSC.SetHueAngle(ratio * 360.0f * 8.0f);
370 oSC.SetPosition(Vector2D(-150.0f, 130.0f));
371
372 voiceDetection.SetThreshold(map(Menu::GetMicLevel(), 0, 10, 1000, 50));
373
375
376 #ifdef BACKFACE
377
379
380 float currentOffset = 0.0f;
381 if(ratio > SerialSync::GetRatio()) currentOffset = ratioCompensation.Filter(ratio - 1.0f - SerialSync::GetRatio());
382 else currentOffset = ratioCompensation.Filter(ratio - SerialSync::GetRatio());
383
384 //adjust current frame sync to new value
385 ratio = fmod(ratio - currentOffset, 1.0f);//override input to synchronize from primary
386
387 float mouthMove = SerialSync::GetMouthMove();
388
398
399 bool isDead = SerialSync::GetDead();
400 bool isBoop = SerialSync::GetBoop();
401
403
404 Menu::Update(ratio);
405 #else
406 float mouthMove = MicrophoneFourierIT::GetCurrentMagnitude() / 2.0f;
407
408 Menu::Update(ratio);
409
410 SerialSync::SetMouthMove(mouthMove);
413
423
424 bool isDead = forehead.GetValue() < 10;
425 bool isBoop = boop.Update() > 2000;
426
427 SerialSync::SetDead(isDead);
428 SerialSync::SetBoop(isBoop);
429
431
433 #endif
434
435 Menu::SetPositionOffset(Vector2D(-300.0f, -40.0f));
436
437
438 //bool isBooped = Menu::UseBoopSensor() ? boop.GetDistance(); : 0;
439 uint8_t mode = Menu::GetFaceState();//change by button press
440
441 if (isDead){
442 Dead();
443 }
444 else if(isBoop){
445 OwO();
446 }
447 else{
448 if (mode == 0) Default();
449 else if (mode == 1) Sad();
450 else if (mode == 2) Heart();
451 else if (mode == 3) OwO2();
452 else if (mode == 4) AlphaGenCircle();
453 else if (mode == 5) AngryFace();
454 else if (mode == 6) {
455 aRG.Update(MicrophoneFourierIT::GetFourierFiltered());
457 }
458 else if (mode == 7){
459 oSC.Update(MicrophoneFourierIT::GetSamples());
461 }
462 else {
463 sA.Update(MicrophoneFourierIT::GetFourierFiltered());
465 }
466 }
467
469
470 eEA.Update();
471 pM.Update();
472
473 float menuRatio = 1.0f - Menu::ShowMenu();
474
475 rainbowNoise.Update(ratio);
476 rainbowSpiral.Update(ratio);
479
480 pM.GetObject()->GetTransform()->SetPosition(Vector3D(-170.0f + xOffset * 2.0f, 30.0f + yOffset * 2.0f - offsetFace * 100.0f - menuRatio * 400.0f, 0.0f));
481 pM.GetObject()->GetTransform()->SetRotation(Vector3D(0.0f, 0.0f, 0.0f));
482 pM.GetObject()->GetTransform()->SetScale(Vector3D(-1.0f, 1.0f - 2.0f * offsetFace, 1.0f));
483
484 pM.GetObject()->UpdateTransform();
485 }
486};
Declares the BlinkTrack template class for animating eye blinking.
Declares the EasyEaseAnimator template class for advanced animation easing.
Declares the KeyFrameTrack template class for managing keyframe-based animations.
A class for managing the Adafruit APDS9960 sensor.
Definition APDS9960.h:27
static bool Initialize(uint8_t threshold)
Initializes the APDS9960 sensor.
Definition APDS9960.cpp:14
static uint8_t GetValue()
Retrieves the current proximity value.
Definition APDS9960.cpp:59
void AddParameter(float *parameter)
Adds a parameter to the animation track.
void Play()
Starts or resumes playback of the animation track.
void Pause()
Pauses playback of the animation track.
float Update()
Updates the animation track and returns the current parameter value.
A material class for creating an audio-reactive gradient effect.
void SetRadius(float radius)
Sets the radius for circular gradient patterns.
void SetPosition(Vector2D offset)
Sets the position of the gradient.
void Update(float *readData)
Updates the gradient based on new audio data.
void SetSize(Vector2D size)
Sets the size of the gradient.
void SetRotation(float angle)
Sets the rotation angle of the gradient.
void SetHueAngle(float hueAngle)
Sets the hue angle for color adjustments.
A template class for animating eye blinking using keyframes.
Definition BlinkTrack.h:27
A template class for implementing advanced animation easing.
void AddParameterFrame(uint16_t dictionaryValue, float value) override
Adds a single frame value for a parameter.
void Update() override
Updates the animator, advancing all animations.
void SetInterpolationMethod(uint16_t dictionaryValue, InterpolationMethod interpMethod) override
Sets the interpolation method for a specific parameter.
void AddParameter(float *parameter, uint16_t dictionaryValue, uint16_t frames, float basis, float goal) override
Adds a parameter to the animator.
Detects visemes based on FFT voice analysis.
void SetThreshold(float threshold)
Sets the threshold for formant calculations.
void Update(float *peaks, float maxFrequency)
Updates the viseme probabilities based on new FFT data.
A class to generate various waveform functions with customizable parameters.
@ Sine
Sine waveform.
@ Triangle
Triangle waveform.
float Update()
Updates and calculates the next value of the waveform.
FunctionGenerator fGenMatHue
SimpleMaterial greenMaterial
FunctionGenerator fGenMatYMove
SpectrumAnalyzer sA
Oscilloscope oSC
uint8_t offsetFaceInd
void Initialize() override
SimpleMaterial redMaterial
void UpdateKeyFrameTracks()
RainbowSpiral rainbowSpiral
SimpleMaterial blueMaterial
FunctionGenerator fGenMatRMenu
void AudioReactiveGradientFace()
SimpleMaterial yellowMaterial
void UpdateFFTVisemes()
void OscilloscopeFace()
BlinkTrack< 1 > blink
void ChangeInterpolationMethods()
void SetMaterialColor()
KalmanFilter< 25 > ratioCompensation
void SpectrumAnalyzerFace()
FunctionGenerator fGenMatPos
FunctionGenerator fGenScale
Background background
void SetMaterialLayers()
FunctionGenerator fGenRotation
EasyEaseAnimator< 30 > eEA
RGBColor gradientSpectrum[6]
SimpleMaterial orangeMaterial
FunctionGenerator fGenMatXMenu
void AlphaGenCircle()
void FadeIn(float stepRatio) override
void FadeOut(float stepRatio) override
RainbowNoise rainbowNoise
FunctionGenerator fGenMatYMenu
FunctionGenerator fGenMatXMove
MaterialAnimator< 10 > materialAnimator
SimpleMaterial purpleMaterial
void Update(float ratio) override
uint8_t offsetFaceIndSA
FFTVoiceDetection< 128 > voiceDetection
APDS9960 forehead
MaterialAnimator< 4 > backgroundMaterial
uint8_t offsetFaceIndOSC
void LinkParameters()
SHARPGP2Y boop
Object3D * GetObject()
SimpleMaterial whiteMaterial
GradientMaterial< 6 > gradientMat
uint8_t offsetFaceIndARG
AudioReactiveGradient aRG
Creates a customizable gradient material for rendering.
Implements a generic Kalman Filter for 1D data.
T Filter(T value)
Filters the given input value using the Kalman Filter algorithm.
Animates transitions and blends between multiple materials.
void AddMaterial(Material::Method method, Material *material, uint16_t frames, float minOpacity, float maxOpacity)
Adds a material to the animation with specified properties.
void SetBaseMaterial(Material::Method method, Material *material)
Sets the base material for the animation.
void AddMaterialFrame(Material &material, float opacity)
Adds a specific frame for a material in the animation.
void Update()
Updates the animator, advancing the transitions.
@ Lighten
Chooses the lighter color.
Definition Material.h:40
@ Add
Adds colors together.
Definition Material.h:35
@ Replace
Replaces the base color.
Definition Material.h:44
static uint8_t GetCurrentMenu()
Retrieves the index of the currently active menu.
static void SetMirrorSpectrumAnalyzer(uint8_t spectrumMirror)
Sets whether the spectrum analyzer should be mirrored if in isSecondary mode.
Definition Menu.cpp:431
static void SetUseMicrophone(uint8_t microphone)
Sets whether to use the microphone if in isSecondary mode.
Definition Menu.cpp:404
static uint8_t GetFaceState()
Retrieves the current face state. In hardware mode, it is read from the MenuHandler.
Definition Menu.cpp:381
static uint8_t GetFaceColor()
Gets the current face color index.
Definition Menu.cpp:453
static uint8_t GetMicLevel()
Gets the current microphone level.
Definition Menu.cpp:417
static void SetPositionOffset(Vector2D positionOffset)
Sets an additional offset to be added on top of the base position.
Definition Menu.cpp:276
static void SetUseBoopSensor(uint8_t boopSensor)
Sets the boop sensor usage if in isSecondary mode.
Definition Menu.cpp:422
static float ShowMenu()
Returns how much of the menu is shown, typically normalized (0.0 to 1.0).
Definition Menu.cpp:494
static void SetFaceColor(uint8_t color)
Sets the face color index if in isSecondary mode.
Definition Menu.cpp:449
static void SetFaceState(uint8_t faceState)
Manually sets the face state (active face index) if in isSecondary mode.
Definition Menu.cpp:377
static Material * GetMaterial()
Provides a pointer to the material used for rendering the menu text.
Definition Menu.cpp:155
static void SetAccentBrightness(uint8_t accentBright)
Sets the accent brightness level if in isSecondary mode.
Definition Menu.cpp:395
static uint8_t MirrorSpectrumAnalyzer()
Checks if the spectrum analyzer mirroring is toggled on or off.
Definition Menu.cpp:435
static uint8_t GetFaceSize()
Gets the current face size.
Definition Menu.cpp:444
static void SetCurrentMenu(uint8_t currentMenu)
Manually sets the current menu index (used in isSecondary mode).
Definition Menu.cpp:204
static void Initialize(uint8_t faceCount, uint8_t pin, uint16_t holdingTime, Vector2D size=Vector2D(240, 50))
Initializes the Menu using a face count, input pin, holding time, and size.
Definition Menu.cpp:102
static uint8_t UseMicrophone()
Checks if the microphone usage is toggled on or off.
Definition Menu.cpp:408
static void SetMicLevel(uint8_t micLevel)
Sets the microphone level (gain) if in isSecondary mode.
Definition Menu.cpp:413
static uint8_t UseBoopSensor()
Checks if the boop sensor usage is toggled on or off.
Definition Menu.cpp:426
static void Update(float ratio)
Updates the menu each frame, handling transitions, wiggle effects, and text generation.
Definition Menu.cpp:208
static void SetFaceSize(uint8_t faceSize)
Sets the face size if in isSecondary mode.
Definition Menu.cpp:440
static uint8_t GetBrightness()
Gets the current brightness level. In hardware mode, it is read from the MenuHandler.
Definition Menu.cpp:390
static uint8_t GetAccentBrightness()
Gets the current accent brightness level.
Definition Menu.cpp:399
static void SetBrightness(uint8_t bright)
Sets the brightness level if in isSecondary mode.
Definition Menu.cpp:386
Represents a 3D object with geometry, material, and transformation data.
Definition Object3D.h:28
A dynamic oscilloscope material for visualizing audio signals.
void SetPosition(Vector2D offset)
Sets the position of the oscilloscope visualization.
void SetSize(Vector2D size)
Sets the size of the oscilloscope visualization.
void Update(float *data)
Updates the oscilloscope visualization based on new audio data.
void SetRotation(float angle)
Sets the rotation angle of the visualization.
void SetHueAngle(float hueAngle)
Sets the hue angle for color adjustments.
Represents an RGB color and provides methods for manipulation.
Definition RGBColor.h:23
A dynamic material that creates a rainbow effect using simplex noise.
void Update(float ratio)
Updates the material animation based on the time ratio.
A dynamic material creating a colorful rainbow spiral animation.
void Update(float ratio)
Updates the material animation based on the time ratio.
A class for managing the SHARP GP2Y distance sensor.
Definition SHARPGP2Y.h:24
float Update()
Updates the distance measurement by reading the sensor.
Definition SHARPGP2Y.cpp:20
static void SetMirrorSpectrumAnalyzer(uint8_t spectrumMirror)
static void SetUseMicrophone(uint8_t microphone)
static void SetMouthMove(float ratio)
static void SetMode(uint8_t mode)
static uint8_t GetFaceState()
static uint8_t GetFaceColor()
static uint8_t GetMicLevel()
static void SetUseBoopSensor(uint8_t boopSensor)
static void SetRatio(float ratio)
static void SetDead(bool dead)
static bool GetBoop()
static void SetFaceColor(uint8_t color)
static void SetFaceState(uint8_t faceState)
static void SetAccentBrightness(uint8_t accentBright)
static void SetBoop(bool boop)
static uint8_t MirrorSpectrumAnalyzer()
static uint8_t GetFaceSize()
static void SetCurrentMenu(uint8_t currentMenu)
static bool GetDead()
static void Send()
static void Initialize()
Definition SerialSync.cpp:6
static uint8_t GetCurrentMenu()
static uint8_t UseMicrophone()
static float GetRatio()
static void Read()
static float GetMouthMove()
static void SetMicLevel(uint8_t micLevel)
static uint8_t UseBoopSensor()
static void SetFaceSize(uint8_t faceSize)
static uint8_t GetBrightness()
static uint8_t GetAccentBrightness()
static void SetBrightness(uint8_t bright)
A material that applies a single, solid RGB color to surfaces.
A material that visualizes audio data as a spectrum.
void SetMirrorYState(bool state)
Sets the mirroring state for the visualization.
void Update(float *readData)
Updates the spectrum visualization with new audio data.
void SetFlipYState(bool state)
Sets the flipping state for the visualization.
void SetHueAngle(float hueAngle)
Sets the hue adjustment angle for the spectrum colors.
Represents a 2D vector (X, Y) and provides methods for vector arithmetic.
Definition Vector2D.h:27
Represents a 3D vector (X, Y, Z) and provides methods for vector arithmetic.
Definition Vector3D.h:26