// YWROBOT
// Compatible with the Arduino IDE 1.0
// Library version:1.1
#include <LiquidCrystal_I2C.h>
const int pinR = 10;
const int pinG = 5;
const int pinB = 6;
#define SPEAKER_PIN 8
LiquidCrystal_I2C lcd(0x27,20,4);
// set the LCD address to 0x27 for a 16 chars and 2 line display
const int buttonTones[] = {
262, 294, 330,349,
392, 440, 494, 523
};
float cm;
float inches;
long readUltrasonicDistance(int triggerPin, int echoPin)
{
pinMode(triggerPin, OUTPUT); // Clear the trigger
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
// Sets the trigger pin to HIGH state for 10 microseconds
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
// Reads the echo pin, and returns
// the sound wave travel time in microseconds
return pulseIn(echoPin, HIGH);
}
void setup()
{
pinMode(pinR, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(pinB, OUTPUT);
Serial.begin(9600);
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.print("--> musical scale <--");
delay(3000);
lcd.clear();
}
void triLED(int pin)
{
int i;
for(i=0;i<=255;i++)
{
(pin,i);
}
for(i=255;i>=0;i--)
{
analogWrite(pin,i);
}
}
void loop()
{
cm = 0.0344/2 * readUltrasonicDistance(3, 2);
/*
Serial.print("Inches ");
Serial.print(inches, 1);
Serial.print("\t");
Serial.print("cm ");
Serial.println(cm, 1);
*/
if(cm>0&&cm<50)
{
tone(SPEAKER_PIN, buttonTones[0],1000);
lcd.setCursor(0,0);
lcd.print("scale");
lcd.setCursor(1,1);
lcd.print("do");
analogWrite(pinR, 255);
analogWrite(pinG, 0);
analogWrite(pinB, 0);
}
if(cm>50&&cm<100)
{
tone(SPEAKER_PIN, buttonTones[1],1000);
lcd.setCursor(0,0);
lcd.print("scale");
lcd.setCursor(1,1);
lcd.print("re");
analogWrite(pinR, 0);
analogWrite(pinG, 255);
analogWrite(pinB, 0);
}
if(cm>100&&cm<150)
{
tone(SPEAKER_PIN, buttonTones[2],1000);
lcd.setCursor(0,0);
lcd.print("scale");
lcd.setCursor(1,1);
lcd.print("mi");
analogWrite(pinR, 0);
analogWrite(pinG, 0);
analogWrite(pinB, 255);
}
if(cm>150&&cm<200)
{
tone(SPEAKER_PIN, buttonTones[3],1000);
lcd.setCursor(0,0);
lcd.print("scale");
lcd.setCursor(1,1);
lcd.print("fa");
analogWrite(pinR, 255);
analogWrite(pinG, 255);
analogWrite(pinB, 0);
}
if(cm>200&&cm<250)
{
tone(SPEAKER_PIN, buttonTones[4],1000);
lcd.setCursor(0,0);
lcd.print("scale");
lcd.setCursor(1,1);
lcd.print("so");
analogWrite(pinR, 255);
analogWrite(pinG, 0);
analogWrite(pinB, 255);
}
if(cm>250&&cm<300)
{
tone(SPEAKER_PIN, buttonTones[5],1000);
lcd.setCursor(0,0);
lcd.print("scale");
lcd.setCursor(1,1);
lcd.print("la");
analogWrite(pinR, 0);
analogWrite(pinG, 255);
analogWrite(pinB,255);
}
if(cm>300&&cm<350)
{
tone(SPEAKER_PIN, buttonTones[6],1000);
lcd.setCursor(0,0);
lcd.print("scale");
lcd.setCursor(1,1);
lcd.print("si");
analogWrite(pinR, 255);
analogWrite(pinG, 255);
analogWrite(pinB, 255);
}
if(cm>350&&cm<400)
{
tone(SPEAKER_PIN, buttonTones[7],1000);
lcd.setCursor(0,0);
lcd.print("scale");
lcd.setCursor(1,1);
lcd.print("do");
analogWrite(pinR, 120);
analogWrite(pinG, 120);
analogWrite(pinB, 0);
}
lcd.setCursor(4,0);
lcd.setCursor(12,0);
lcd.print("cm");
lcd.setCursor(11,1);
lcd.print(cm, 1);
lcd.setCursor(14,1);
delay(2000);
lcd.clear();
}