#define IR_SMALLD_NECx
#include "Arduino.h"
#include "NonBlockingRtttl.h"
#include "Servo.h"
#include "TinyIRReceiver.hpp"
#include "PlayRtttl.h"
#define SPEAKER_PIN 7
#define IR_RECEIVE_PIN 6
int song_index = -1;
int servo_value = 90;
Servo servo;
void toggleLed() {
static int led_state = LOW;
static int led_counter = 0;
digitalWrite(LED_BUILTIN, led_state);
led_counter++;
if (led_counter == 20) {
led_state = !led_state;
led_counter = 0;
}
}
void playMusic() {
if (!rtttl::isPlaying()) {
if (song_index == 0) {
rtttl::begin(SPEAKER_PIN, mario);
song_index = -1;
} else if (song_index == 1) {
rtttl::begin(SPEAKER_PIN, scooby);
song_index = -1;
} else if (song_index == 2) {
rtttl::begin(SPEAKER_PIN, tetris);
song_index = -1;
} else if (song_index == 3) {
rtttl::begin(SPEAKER_PIN, doom);
song_index = -1;
}
} else {
if (song_index >= 0 || song_index == 100) {
rtttl::stop();
} else {
rtttl::play();
}
}
}
void decodeInfrared() {
if (TinyIRReceiverData.justWritten) {
TinyIRReceiverData.justWritten = false;
Serial.print(TinyIRReceiverData.Command, HEX);
if (TinyIRReceiverData.Command == 0x30) {
song_index = 0;
} else if (TinyIRReceiverData.Command == 0x18) {
song_index = 1;
} else if (TinyIRReceiverData.Command == 0x7A) {
song_index = 2;
} else if (TinyIRReceiverData.Command == 0x10) {
song_index = 3;
} else if (TinyIRReceiverData.Command == 0x68) {
song_index = 100;
} else if (TinyIRReceiverData.Command == 0xE0) {
servo_value = max(servo_value - 5, 0);
} else if (TinyIRReceiverData.Command == 0x90) {
servo_value = min(servo_value + 5, 180);
} else if (TinyIRReceiverData.Command == 0xA8) {
servo_value = 90;
}
}
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(A3, INPUT);
pinMode(A5, OUTPUT);
pinMode(SPEAKER_PIN, OUTPUT);
pinMode(IR_RECEIVE_PIN, INPUT);
initPCIInterruptForTinyReceiver();
servo.attach(A5);
Serial.begin(9600);
while (!Serial) {
}
Serial.println("Ready");
}
void loop() {
toggleLed();
playMusic();
decodeInfrared();
servo.write(servo_value);
delay(50);
}