Update Gaia anniversary code
This commit is contained in:
parent
9c8909765f
commit
663af68dbd
Binary file not shown.
Binary file not shown.
@ -5,13 +5,30 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <Servo.h>
|
#include <Servo.h>
|
||||||
|
#include <EEPROM.h>
|
||||||
|
|
||||||
const int buzzerPin = 6;
|
const unsigned long baudRate = 115200;
|
||||||
const int servoPin = 9;
|
const unsigned long baudRates[] =
|
||||||
|
{
|
||||||
|
300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 57600, 115200
|
||||||
|
};
|
||||||
|
|
||||||
|
const int buzzerPin = 3;
|
||||||
|
const int servoPin = 5;
|
||||||
|
const int buttonPin = 7;
|
||||||
|
const int switchPin = 9;
|
||||||
|
const int led1Pin = 10;
|
||||||
|
const int led2Pin = 6;
|
||||||
|
|
||||||
const int pause = 0;
|
const int pause = 0;
|
||||||
|
const int gL = 196;
|
||||||
|
const int gSL = 207;
|
||||||
|
const int aL = 220;
|
||||||
|
const int aSL = 233;
|
||||||
|
const int bL = 247;
|
||||||
const int c = 261;
|
const int c = 261;
|
||||||
const int d = 294;
|
const int d = 294;
|
||||||
|
const int dS = 311;
|
||||||
const int e = 329;
|
const int e = 329;
|
||||||
const int f = 349;
|
const int f = 349;
|
||||||
const int g = 391;
|
const int g = 391;
|
||||||
@ -46,52 +63,249 @@ const int alpiniNotes[] =
|
|||||||
const int alpiniDurations[] =
|
const int alpiniDurations[] =
|
||||||
{
|
{
|
||||||
500,500,250,250,250,250,250,125,125,250,250,500,500,1000,
|
500,500,250,250,250,250,250,125,125,250,250,500,500,1000,
|
||||||
500,500,250,250,250,250,250,125,125,250,250,500,50,375,125,500,1000,
|
500,500,250,250,250,250,250,125,125,250,250,500,50,375,125,500,750,
|
||||||
|
|
||||||
500,500,250,250,250,250,250,125,125,250,250,500,500,1000,
|
500,500,250,250,250,250,250,125,125,250,250,500,500,1000,
|
||||||
500,500,250,250,250,250,250,125,125,250,250,500,50,375,125,500,1000,
|
500,500,250,250,250,250,250,125,125,250,250,500,50,375,125,500,750,
|
||||||
|
|
||||||
250,250,250,500,500,250,250,250,250,500,500,250,250,250,250,500,500,375,125,250,250,500,500,500,
|
250,250,250,500,500,250,250,250,250,500,500,250,250,250,250,500,500,375,125,250,250,500,500,250,
|
||||||
250,250,250,500,500,250,250,250,250,500,500,250,250,250,250,500,500,500,500,1000,1000,
|
250,250,250,500,500,250,250,250,250,500,500,250,250,250,250,500,500,500,500,1000,1000,
|
||||||
|
|
||||||
10000
|
10000
|
||||||
};
|
};
|
||||||
|
|
||||||
int alpiniMusicSize = 0;
|
int alpiniMusicSize = 0;
|
||||||
|
|
||||||
|
const int jingleBellsNotes[] =
|
||||||
|
{
|
||||||
|
e,e,e,e,e,e,e,g,c,d,e,pause,
|
||||||
|
|
||||||
|
f,f,f,f,f,e,e,e,e,e,d,d,e,d,pause,g,pause,
|
||||||
|
|
||||||
|
e,e,e,e,e,e,e,g,c,d,e,pause,
|
||||||
|
|
||||||
|
f,f,f,f,f,e,e,e,e,g,g,f,d,c,pause,
|
||||||
|
|
||||||
|
gL,gL,gL,e,d,c,gL,pause,
|
||||||
|
gL,gL,gL,e,d,c,aL,pause,
|
||||||
|
aL,aL,aL,f,e,d,bL,pause,
|
||||||
|
g,g,g,g,f,d,e,pause,
|
||||||
|
|
||||||
|
gL,gL,gL,e,d,c,gL,pause,
|
||||||
|
gL,gL,gL,e,d,c,aL,pause,
|
||||||
|
aL,aL,aL,f,e,d,g,g,g,
|
||||||
|
g,a,g,f,d,c,pause,
|
||||||
|
|
||||||
|
pause
|
||||||
|
};
|
||||||
|
|
||||||
|
const int jingleBellsDurations[] =
|
||||||
|
{
|
||||||
|
250,250,500,250,250,500,250,250,375,125,500,500,
|
||||||
|
|
||||||
|
250,250,375,125,250,250,250,125,125,250,250,250,250,400,100,400,100,
|
||||||
|
|
||||||
|
250,250,500,250,250,500,250,250,375,125,500,500,
|
||||||
|
|
||||||
|
250,250,375,125,250,250,250,125,125,250,250,250,250,500,250,
|
||||||
|
|
||||||
|
125,125,250,250,250,250,500,250,
|
||||||
|
125,125,250,250,250,250,500,250,
|
||||||
|
125,125,250,250,250,250,500,250,
|
||||||
|
125,125,250,250,250,250,500,250,
|
||||||
|
|
||||||
|
125,125,250,250,250,250,500,250,
|
||||||
|
125,125,250,250,250,250,500,250,
|
||||||
|
125,125,250,250,250,250,250,250,250,
|
||||||
|
250,250,250,250,250,500,250,
|
||||||
|
|
||||||
|
10000
|
||||||
|
};
|
||||||
|
int jingleBellsMusicSize = 0;
|
||||||
|
|
||||||
|
const int windowsShutdownNotes[] =
|
||||||
|
{
|
||||||
|
pause,gS,dS,gSL,aSL,pause
|
||||||
|
};
|
||||||
|
|
||||||
|
const int windowsShutdownDurations[] =
|
||||||
|
{
|
||||||
|
1000,250,250,250,500,100
|
||||||
|
};
|
||||||
|
int windowsShutdownMusicSize = 0;
|
||||||
|
|
||||||
int musicPosition = 0;
|
int musicPosition = 0;
|
||||||
|
|
||||||
|
int currentSong = 0;
|
||||||
|
|
||||||
unsigned long currentMillis;
|
unsigned long currentMillis;
|
||||||
unsigned long lastMillisNote = 0;
|
unsigned long lastMillisNote = 0;
|
||||||
unsigned long lastMillisServo = 0;
|
unsigned long lastMillisServo = 0;
|
||||||
|
unsigned long lastButtonPress = 0;
|
||||||
|
unsigned long lastSwitchUpdate = 0;
|
||||||
|
unsigned long lastEEPROMWrite = 0;
|
||||||
|
|
||||||
|
const int buttonPressDelay = 500;
|
||||||
|
const int switchUpdateDelay = 200;
|
||||||
|
const int eepromWriteDelay = 1000;
|
||||||
|
|
||||||
|
bool isLeftLed = false;
|
||||||
|
|
||||||
|
bool isSwitchOn = false;
|
||||||
|
|
||||||
|
bool poweredUp = false;
|
||||||
|
|
||||||
Servo servo;
|
Servo servo;
|
||||||
int servoAngle = 90;
|
int servoAngle = 90;
|
||||||
|
const int eepromAngleAddress = 0;
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
|
|
||||||
|
sendSerials();
|
||||||
|
|
||||||
|
Serial.end();
|
||||||
|
Serial.begin(baudRate);
|
||||||
|
Serial.println("Serial Ready");
|
||||||
|
|
||||||
pinMode(buzzerPin, OUTPUT);
|
pinMode(buzzerPin, OUTPUT);
|
||||||
pinMode(servoPin, OUTPUT);
|
pinMode(servoPin, OUTPUT);
|
||||||
|
pinMode(buttonPin, INPUT);
|
||||||
|
pinMode(switchPin, INPUT);
|
||||||
|
pinMode(led1Pin, OUTPUT);
|
||||||
|
pinMode(led2Pin, OUTPUT);
|
||||||
|
|
||||||
|
servo.write(EEPROM.read(eepromAngleAddress));
|
||||||
servo.attach(servoPin);
|
servo.attach(servoPin);
|
||||||
servo.write(servoAngle);
|
|
||||||
|
|
||||||
currentMillis = millis();
|
currentMillis = millis();
|
||||||
lastMillisNote = millis();
|
lastMillisNote = millis();
|
||||||
|
|
||||||
alpiniMusicSize = ((sizeof(alpiniNotes) / sizeof(alpiniNotes[0])));
|
alpiniMusicSize = (sizeof(alpiniNotes) / sizeof(alpiniNotes[0]));
|
||||||
|
jingleBellsMusicSize = (sizeof(jingleBellsNotes) / sizeof(jingleBellsNotes[0]));
|
||||||
|
windowsShutdownMusicSize = (sizeof(windowsShutdownNotes) / sizeof(windowsShutdownNotes[0]));
|
||||||
|
|
||||||
|
|
||||||
|
checkAndResetAngle(1.0f);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
|
||||||
openLid(0.7f);
|
if (isSwitchOn)
|
||||||
|
{
|
||||||
|
openLid(0.7f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
closeLid(0.7f);
|
||||||
|
}
|
||||||
|
|
||||||
playMusic(0.7f);
|
if (poweredUp)
|
||||||
|
{
|
||||||
|
if (currentSong == 0)
|
||||||
|
{
|
||||||
|
playMusicAlpini(0.7f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentSong == 1)
|
||||||
|
{
|
||||||
|
playMusicJingleBells(1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentSong == 404)
|
||||||
|
{
|
||||||
|
playShutdownSong(1.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
checkButton();
|
||||||
|
checkSwitch();
|
||||||
|
|
||||||
|
updateEEPROM();
|
||||||
|
|
||||||
currentMillis = millis();
|
currentMillis = millis();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateEEPROM()
|
||||||
|
{
|
||||||
|
if (currentMillis >= lastEEPROMWrite + eepromWriteDelay)
|
||||||
|
{
|
||||||
|
|
||||||
|
Serial.println("Updating EEPROM...");
|
||||||
|
lastEEPROMWrite = millis();
|
||||||
|
|
||||||
|
int currentAngle = servo.read();
|
||||||
|
int savedAngle = EEPROM.read(eepromAngleAddress);
|
||||||
|
|
||||||
|
if (currentAngle != savedAngle)
|
||||||
|
{
|
||||||
|
Serial.print("Written Angle: ");
|
||||||
|
Serial.println(currentAngle);
|
||||||
|
EEPROM.update(eepromAngleAddress, currentAngle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void checkButton()
|
||||||
|
{
|
||||||
|
if (digitalRead(buttonPin) == HIGH && isSwitchOn)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (currentMillis >= lastButtonPress + buttonPressDelay)
|
||||||
|
{
|
||||||
|
lastButtonPress = millis();
|
||||||
|
|
||||||
|
if (currentSong < 2) {
|
||||||
|
currentSong++;
|
||||||
|
noTone(buzzerPin);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
currentSong = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
musicPosition = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void checkSwitch()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (currentMillis >= lastSwitchUpdate + switchUpdateDelay)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (digitalRead(switchPin) == HIGH)
|
||||||
|
{
|
||||||
|
if (!isSwitchOn)
|
||||||
|
{
|
||||||
|
isSwitchOn = true;
|
||||||
|
currentSong = 0;
|
||||||
|
musicPosition = 0;
|
||||||
|
Serial.println("Switch On");
|
||||||
|
|
||||||
|
if (!poweredUp)
|
||||||
|
{
|
||||||
|
poweredUp = true;
|
||||||
|
digitalWrite(led1Pin, HIGH);
|
||||||
|
digitalWrite(led2Pin, HIGH);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (isSwitchOn)
|
||||||
|
{
|
||||||
|
isSwitchOn = false;
|
||||||
|
currentSong = 404;
|
||||||
|
musicPosition = 0;
|
||||||
|
Serial.println("Switch Off");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lastSwitchUpdate = millis();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void openLid(float speed)
|
void openLid(float speed)
|
||||||
@ -109,15 +323,72 @@ void openLid(float speed)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
servo.detach();
|
//servo.detach();
|
||||||
}
|
}
|
||||||
|
|
||||||
lastMillisServo = millis();
|
lastMillisServo = millis();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void closeLid(float speed)
|
||||||
|
{
|
||||||
|
|
||||||
void playMusic(float speed)
|
if (currentMillis >= lastMillisServo + (100.0 * 1 / speed))
|
||||||
|
{
|
||||||
|
|
||||||
|
if (servoAngle <= 90)
|
||||||
|
{
|
||||||
|
servoAngle++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (servoAngle < 90)
|
||||||
|
{
|
||||||
|
servo.write(servoAngle);
|
||||||
|
}
|
||||||
|
|
||||||
|
lastMillisServo = millis();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void checkAndResetAngle(float speed)
|
||||||
|
{
|
||||||
|
Serial.print("Checking Angle... ");
|
||||||
|
|
||||||
|
int angle = servo.read();
|
||||||
|
|
||||||
|
Serial.println(angle);
|
||||||
|
|
||||||
|
if (angle < 90)
|
||||||
|
{
|
||||||
|
for (int currentAngle = angle; currentAngle <= 90; currentAngle++)
|
||||||
|
{
|
||||||
|
Serial.println(currentAngle);
|
||||||
|
servo.write(currentAngle);
|
||||||
|
delay(100.0 * 1 / speed);
|
||||||
|
|
||||||
|
|
||||||
|
currentMillis = millis();
|
||||||
|
updateEEPROM();
|
||||||
|
}
|
||||||
|
} else if (angle > 90)
|
||||||
|
{
|
||||||
|
for (int currentAngle = angle; currentAngle >= 90; currentAngle--)
|
||||||
|
{
|
||||||
|
Serial.print("B: ");
|
||||||
|
Serial.println(currentAngle);
|
||||||
|
servo.write(currentAngle);
|
||||||
|
delay(100.0 * 1 / speed);
|
||||||
|
|
||||||
|
|
||||||
|
currentMillis = millis();
|
||||||
|
updateEEPROM();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println("Angle Fixed!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void playMusicAlpini(float speed)
|
||||||
{
|
{
|
||||||
if (currentMillis >= lastMillisNote + alpiniDurations[musicPosition - 1] * 1 / speed)
|
if (currentMillis >= lastMillisNote + alpiniDurations[musicPosition - 1] * 1 / speed)
|
||||||
{
|
{
|
||||||
@ -125,6 +396,7 @@ void playMusic(float speed)
|
|||||||
|
|
||||||
if (!(alpiniNotes[musicPosition] == pause))
|
if (!(alpiniNotes[musicPosition] == pause))
|
||||||
{
|
{
|
||||||
|
switchLed();
|
||||||
tone(buzzerPin, alpiniNotes[musicPosition], (alpiniDurations[musicPosition] * 1 / speed) - 10);
|
tone(buzzerPin, alpiniNotes[musicPosition], (alpiniDurations[musicPosition] * 1 / speed) - 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,3 +413,95 @@ void playMusic(float speed)
|
|||||||
lastMillisNote = millis();
|
lastMillisNote = millis();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void playMusicJingleBells(float speed)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (currentMillis >= lastMillisNote + jingleBellsDurations[musicPosition - 1] * 1 / speed)
|
||||||
|
{
|
||||||
|
noTone(buzzerPin);
|
||||||
|
|
||||||
|
if (!(jingleBellsNotes[musicPosition] == pause))
|
||||||
|
{
|
||||||
|
switchLed();
|
||||||
|
tone(buzzerPin, jingleBellsNotes[musicPosition], (jingleBellsDurations[musicPosition] * 1 / speed) - 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (musicPosition < jingleBellsMusicSize)
|
||||||
|
{
|
||||||
|
musicPosition++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
musicPosition = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastMillisNote = millis();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void playShutdownSong(float speed)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (currentMillis >= lastMillisNote + windowsShutdownDurations[musicPosition - 1] * 1 / speed)
|
||||||
|
{
|
||||||
|
noTone(buzzerPin);
|
||||||
|
|
||||||
|
if (!(windowsShutdownNotes[musicPosition] == pause))
|
||||||
|
{
|
||||||
|
switchLed();
|
||||||
|
tone(buzzerPin, windowsShutdownNotes[musicPosition], (windowsShutdownDurations[musicPosition] * 1 / speed) - 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (musicPosition < windowsShutdownMusicSize)
|
||||||
|
{
|
||||||
|
musicPosition++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
musicPosition = 0;
|
||||||
|
currentSong = 405;
|
||||||
|
noTone(buzzerPin);
|
||||||
|
digitalWrite(led1Pin, LOW);
|
||||||
|
digitalWrite(led2Pin, LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
lastMillisNote = millis();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void switchLed() {
|
||||||
|
if (isLeftLed)
|
||||||
|
{
|
||||||
|
digitalWrite(led1Pin, LOW);
|
||||||
|
digitalWrite(led2Pin, HIGH);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
digitalWrite(led2Pin, LOW);
|
||||||
|
digitalWrite(led1Pin, HIGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
isLeftLed = !isLeftLed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sendSerials()
|
||||||
|
{
|
||||||
|
int baudRatesArraySize = sizeof(baudRates) / sizeof(baudRates[0]);
|
||||||
|
|
||||||
|
for (int i = 0; i < baudRatesArraySize; i++)
|
||||||
|
{
|
||||||
|
unsigned long currentBaudRate = baudRates[i];
|
||||||
|
|
||||||
|
Serial.end();
|
||||||
|
Serial.begin(currentBaudRate);
|
||||||
|
Serial.println();
|
||||||
|
Serial.println();
|
||||||
|
Serial.print("Set baud rate to ");
|
||||||
|
Serial.println(baudRate);
|
||||||
|
Serial.println();
|
||||||
|
Serial.end();
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -6,7 +6,7 @@
|
|||||||
All non-arduino files created by visual micro and all visual studio project or solution files can be freely deleted and are not required to compile a sketch (do not delete your own code!).
|
All non-arduino files created by visual micro and all visual studio project or solution files can be freely deleted and are not required to compile a sketch (do not delete your own code!).
|
||||||
Note: debugger breakpoints are stored in '.sln' or '.asln' files, knowledge of last uploaded breakpoints is stored in the upload.vmps.xml file. Both files are required to continue a previous debug session without needing to compile and upload again
|
Note: debugger breakpoints are stored in '.sln' or '.asln' files, knowledge of last uploaded breakpoints is stored in the upload.vmps.xml file. Both files are required to continue a previous debug session without needing to compile and upload again
|
||||||
|
|
||||||
Hardware: Arduino Uno, Platform=avr, Package=arduino
|
Hardware: ATmega328P (Old Bootloader) (Arduino Nano), Platform=avr, Package=arduino
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(_VMICRO_INTELLISENSE)
|
#if defined(_VMICRO_INTELLISENSE)
|
||||||
@ -18,7 +18,7 @@
|
|||||||
#define __AVR_ATmega328p__
|
#define __AVR_ATmega328p__
|
||||||
#define F_CPU 16000000L
|
#define F_CPU 16000000L
|
||||||
#define ARDUINO 108013
|
#define ARDUINO 108013
|
||||||
#define ARDUINO_AVR_UNO
|
#define ARDUINO_AVR_NANO
|
||||||
#define ARDUINO_ARCH_AVR
|
#define ARDUINO_ARCH_AVR
|
||||||
#define __cplusplus 201103L
|
#define __cplusplus 201103L
|
||||||
#define _Pragma(x)
|
#define _Pragma(x)
|
||||||
|
Loading…
Reference in New Issue
Block a user