0,0 → 1,160 |
// MLAB LABduino LCD module example |
// www.mlab.cz |
//--------------------------------------------------------------------- |
|
#include <LiquidCrystal.h> |
|
#define S1 9 // PB1 |
#define S2 10 // PB2 |
#define S3 6 // PD6 |
#define S4 7 // PD7 |
|
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); |
|
// Create a set of new characters |
byte smiley[8] = { |
0b00000, |
0b00000, |
0b01010, |
0b00000, |
0b00000, |
0b10001, |
0b01110, |
0b00000 |
}; |
|
byte frownie[8] = { |
0b00000, |
0b00000, |
0b01010, |
0b00000, |
0b00000, |
0b00000, |
0b01110, |
0b10001 |
}; |
|
|
|
void play() |
{ |
// notes in the melody: |
int melody[] = { |
262, 196, 196, 220, 196,0, 247, 262}; |
|
// note durations: 4 = quarter note, 8 = eighth note, etc.: |
int noteDurations[] = { |
4, 8, 8, 4,4,4,4,4 }; |
|
// iterate over the notes of the melody: |
for (int thisNote = 0; thisNote < 8; thisNote++) |
{ |
// to calculate the note duration, take one second |
// divided by the note type. |
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. |
int noteDuration = 1000/noteDurations[thisNote]; |
tone(8, melody[thisNote],noteDuration); |
|
// to distinguish the notes, set a minimum time between them. |
// the note's duration + 30% seems to work well: |
int pauseBetweenNotes = noteDuration * 1.30; |
delay(pauseBetweenNotes); |
// stop the tone playing: |
noTone(8); |
} |
} |
|
int button; |
|
void setup() |
{ |
lcd.begin(16,2); // initialize the lcd |
|
lcd.createChar (0, smiley); // load character to the LCD |
lcd.createChar (1, frownie); // load character to the LCD |
|
lcd.home (); // go home |
lcd.print("www.mlab.cz www.mlab.cz www.mlab.cz"); |
lcd.setCursor ( 0, 1 ); |
lcd.print("wiki.mlab.cz/doku.php?id=cs:labduino"); |
|
|
pinMode(S1, INPUT); // initialize buttons |
pinMode(S2, INPUT); |
pinMode(S3, INPUT); |
pinMode(S4, INPUT); |
|
button = 6; |
lcd.setCursor ( 0, 1 ); |
} |
|
unsigned int n=0; |
|
void loop() |
{ |
|
if (!digitalRead(S1)) // read buttons |
{ |
button=1; |
} |
if (!digitalRead(S2)) |
{ |
button=2; |
} |
if (!digitalRead(S3)) |
{ |
button=3; |
} |
if (!digitalRead(S4)) |
{ |
button=4; |
} |
|
if ((button<=4)&&(button>=1)) |
{ |
lcd.clear(); // clear display |
lcd.home (); // go home |
lcd.print("www.mlab.cz"); |
lcd.setCursor ( 0, 1 ); |
lcd.print("Cvak...S"); |
} |
|
switch (button) // do some specific action |
{ |
case 1: |
lcd.print("1"); |
button=0; |
break; |
case 2: |
lcd.print("2"); |
button=0; |
break; |
case 3: |
lcd.print("3"); |
button=0; |
break; |
case 4: |
lcd.print("4"); |
button=0; |
break; |
} |
|
if (0==button) // do rest of action |
{ |
lcd.setCursor ( 10, 1 ); |
lcd.print ( char(0)); |
play(); |
lcd.setCursor ( 0, 1 ); |
lcd.print("Hmmm... "); |
lcd.print ( char(1)); |
button=5; |
lcd.setCursor ( 0, 1 ); |
} |
|
|
if ((n++ > 25000) && (button==6)) // time delay |
{ |
lcd.scrollDisplayLeft(); |
n=0; |
} |
} |