User:Laurier Rochon/prototyping/clapping music with arduino LED screen pushbutton: Difference between revisions
No edit summary |
No edit summary |
||
Line 26: | Line 26: | ||
<source lang="C"> | <source lang="C"> | ||
#include <LiquidCrystal.h> | #include <LiquidCrystal.h> | ||
const int numRows = 2; | const int numRows = 2; | ||
const int numCols = 16; | const int numCols = 16; | ||
Line 42: | Line 40: | ||
int lentxt=txt.length(); | int lentxt=txt.length(); | ||
LiquidCrystal lcd(6, 7, 2, 3, 4, 5); | |||
LiquidCrystal lcd( | |||
String pat = "999999999999"; | |||
String pat = " | String mov = "555755757557"; | ||
String mov = " | |||
const int buttonPin = 9; | const int buttonPin = 9; | ||
int buttonState = 0; | int buttonState = 0; | ||
void setup() { | void setup() { | ||
pinMode(buttonPin, INPUT); | pinMode(buttonPin, INPUT); | ||
lcd.begin(numCols,numRows); | lcd.begin(numCols,numRows); | ||
Line 61: | Line 53: | ||
void loop() { | void loop() { | ||
buttonState = digitalRead(buttonPin); | buttonState = digitalRead(buttonPin); | ||
if (buttonState == HIGH) { | if (buttonState == HIGH) { | ||
int patlen = pat.length(); | int patlen = pat.length(); | ||
Line 74: | Line 65: | ||
int val1 = pat.charAt(p); | int val1 = pat.charAt(p); | ||
int val2 = mov.charAt(p); | int val2 = mov.charAt(p); | ||
int diff = (val1-val2)*100; | int diff = (val1-val2)*100; | ||
tone(8, diff, 10); | tone(8, diff, 10); | ||
String first = mov.charAt(0); | String first = mov.charAt(0); | ||
String second = ""; | String second = ""; | ||
for(int i=1;i<12;i++){ | for(int i=1;i<12;i++){ | ||
second.concat(mov.charAt(i)); | second.concat(mov.charAt(i)); | ||
} | } | ||
diff = diff/100; | diff = diff/100; | ||
mov = second+first; | mov = second+first; | ||
// | //screen stuff | ||
if(a<8){row=0;}else{row=1;} | if(a<8){row=0;}else{row=1;} | ||
if(lpos==8){lpos=0;} | if(lpos==8){lpos=0;} | ||
lcd.setCursor(lpos,row); | lcd.setCursor(lpos,row); | ||
String newstr = diff; | |||
if ( | if(a==16){a=0;lcd.clear();} | ||
lcd.print(newstr.charAt(0), BYTE); | |||
lpos++; | lpos++; | ||
a++; | a++; | ||
delay( | delay(150); | ||
} | } | ||
}else{ | }else{ | ||
txt="NOT PLAYING"; | txt="NOT PLAYING"; | ||
readtext(); | readtext(); | ||
Line 132: | Line 109: | ||
for (int lindex = 0; lindex <= lentxt; lindex++) { | for (int lindex = 0; lindex <= lentxt; lindex++) { | ||
if(a<8){row=0;}else{row=1;} | if(a<8){row=0;}else{row=1;} | ||
if(lpos==8){lpos=0;} | if(lpos==8){lpos=0;} | ||
Line 143: | Line 120: | ||
a++; | a++; | ||
if(a==16){ a=0; lcd.clear(); | if(a==16){ a=0;lcd.clear();} | ||
} | } | ||
lcd.clear(); | lcd.clear(); | ||
} | } | ||
</source> | </source> |
Revision as of 15:17, 26 October 2010
Clapping music + shifting pattern /w Arduino
Constant pattern + shifting pattern using a single channel piezo and values subtraction. I didn't want to use two piezos/speakers as that would simply duplicate the code into something slightly less interesting. Result of the subtraction of the two patterns is printed to the screen and loops.
Got some help from http://www.ladyada.net/learn/lcd/charlcd.html
HARD
- 16-pin 16x1 LED display
- pushbutton
- piezo
- 3 resistors
- breadboard
- Arduino 168 Diecimila
{{#ev:vimeo|16137046|640}}
SOFT
This code needs more work (i.e. more modular). Some things are hard-coded and no comments are in yet...more to come. I had much trouble converting my string/int to char to send to the LCD screen. Atoi wouldn't do it and the built-in C functions wouldn't do it = ugly IF.
#include <LiquidCrystal.h>
const int numRows = 2;
const int numCols = 16;
int a=0;
int row=0;
int lpos=0;
int pos1=0;
int pos2=0;
String txt="NOT PLAYING";
int lentxt=txt.length();
LiquidCrystal lcd(6, 7, 2, 3, 4, 5);
String pat = "999999999999";
String mov = "555755757557";
const int buttonPin = 9;
int buttonState = 0;
void setup() {
pinMode(buttonPin, INPUT);
lcd.begin(numCols,numRows);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
int patlen = pat.length();
for (int p=0; p<patlen; p++) {
//tone stuff
int val1 = pat.charAt(p);
int val2 = mov.charAt(p);
int diff = (val1-val2)*100;
tone(8, diff, 10);
String first = mov.charAt(0);
String second = "";
for(int i=1;i<12;i++){
second.concat(mov.charAt(i));
}
diff = diff/100;
mov = second+first;
//screen stuff
if(a<8){row=0;}else{row=1;}
if(lpos==8){lpos=0;}
lcd.setCursor(lpos,row);
String newstr = diff;
if(a==16){a=0;lcd.clear();}
lcd.print(newstr.charAt(0), BYTE);
lpos++;
a++;
delay(150);
}
}else{
txt="NOT PLAYING";
readtext();
}
}
void readtext(){
for (int lindex = 0; lindex <= lentxt; lindex++) {
if(a<8){row=0;}else{row=1;}
if(lpos==8){lpos=0;}
lcd.setCursor(lpos,row);
lcd.print(txt.charAt(lindex), BYTE);
delay(100);
lpos++;
a++;
if(a==16){ a=0;lcd.clear();}
}
lcd.clear();
}