Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MSGEQ7 TextLCD mbed
main.cpp
- Committer:
- chrisisthefish
- Date:
- 2013-10-16
- Revision:
- 0:ee637039cb58
File content as of revision 0:ee637039cb58:
// LCD_Spectrum_Analyzer
// Created by Chris Wilson
// 10/16/2013
// NOTE: Contains LCD Custom Character code from Lluis Nadal
#include "mbed.h"
#include "MSGEQ7.h"
#include "TextLCD.h"
#define MAX 15
MSGEQ7 eq(p13, p14, p15); //reset, strobe, analog
TextLCD lcd(p30, p29, p28, p27, p26, p25); // rs, e, d4-d7
// Defines LCD bus to write data.
BusOut Lcd_pins(p28, p27, p26, p25); // d4, d5, d6, d7
DigitalOut rs_pin(p30); // LCD pin rs (register select.)
DigitalOut e_pin(p29); // LCD pin e (enable).
//This data is 8 LCD characters representing an 8-level bar graph
char levels[8][8] = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F},
{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F},
{0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F},
{0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F},
{0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F},
{0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F},
{0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F},
{0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}
};
/* Code from Lluis Nadal
http://mbed.org/users/lnadal/code/Lcd_Custom_Char/
*/
// Because we use 4 bit LCD, data must be sent in two steps.
void writePort(int value) {
Lcd_pins = value >> 4; // Shifts 4 bit right.
wait(0.000040f); // Wait 40us.
e_pin = 0;
wait(0.000040f);
e_pin = 1;
Lcd_pins = value;
wait(0.000040f);
e_pin = 0;
wait(0.000040f);
e_pin = 1;
}
/* Code from Lluis Nadal
http://mbed.org/users/lnadal/code/Lcd_Custom_Char/
*/
void createChars(){
for (int j=0; j<8; j++) {
rs_pin = 0; // We send a command.
/* 0X40 is the initial CGRAM address. Because each character needs a total amount of 8 memory
locations, we increment addres in 8 units after each character.
*/
writePort(0x40+8*j);
// Writes data.
rs_pin = 1; // We send data.
for (int i=0; i<8; i++) {
writePort(levels[j][i]);
}
}
}
int main() {
int i = 0;
lcd.cls();
createChars();
while(1) {
eq.readInt(MAX); //Read in frequency data, mapped to a max number of 15
for(i = 0; i < 7; i++){
lcd.locate(i, 1); //Draw second (lower) row first
if(eq.freqDataInt[i] > 7){ //Is the lower level maxed out?
lcd.putc(7); // If maxed out, display full bars
}else{
lcd.putc(eq.freqDataInt[i]);
}
lcd.locate(i, 0); //Draw first (upper) row
if(eq.freqDataInt[i] < 8){
lcd.putc(32); //If empty, draw a space (' ')
}else{
lcd.putc(eq.freqDataInt[i] - 8);
}
}
}
}