Mario Quartey's Accelerometer Code
Dependencies: MMA8452 N5110 PowerControl mbed
Revision 2:c3e9a24a3ddf, committed 2015-05-11
- Comitter:
- MrMavriks
- Date:
- Mon May 11 22:54:16 2015 +0000
- Parent:
- 1:8359e6982b30
- Commit message:
- Done
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Accel.cpp Mon May 11 22:54:16 2015 +0000 @@ -0,0 +1,108 @@ +/** +@file Accel.cpp +@brief Program Implementation +*/ + +#include "Accel.h" +#include "mbed.h" +#include "N5110.h" +#include "MMA8452.h" +#include "PowerControl/PowerControl.h" +#include "PowerControl/EthernetPowerControl.h" + +/// Buffers for values to be read or calculated +char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) +char buffer1[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) +char buffer2[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) +char buffer3[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) + +/// Gets Readings and Displays them +void readings(); + +PwmOut myled(p22); +PwmOut buzzer(p21); +// VCC,SCE,RST,D/C,MOSI,SCLK,LED order of mbed pins should match +N5110 lcd(p7,p8,p9,p10,p11,p13,p26); +MMA8452 mma8452(p28,p27); // SDA, SCL +Serial serial(USBTX,USBRX); +AnalogIn pot(p20); + +Timeout timer; // create ticker object + +/// sets flag to 0 +int timerFlag = 0; // flag for timer + +///Interrupt Service Routine +void timerExpired() { + timerFlag = 1; + + /// sets the scale for x to be able to reach 1-45 readings per second + float x=-(1-pot.read())*44/45+1; + timer.detach(); + timer.attach(&timerExpired,x); + +} +///Turns on LCD AND Accelerometer. +void turnon () { + lcd.init(); + lcd.printString("Mario Quartey", 0,0); + lcd.printString("Accelerometer", 0,1); + lcd.printString("Elec 2645", 0,2); + lcd.printString("Dr C Evans!", 0,3); + lcd.refresh(); + wait(2); + lcd.clear(); + mma8452.init(); // 100 Hz update rate, ±4g scale + } +/// Gets readings and Prints to LCD +void readings () { + Acceleration acceleration; + lcd.printString("X Y Z Values", 0,0); + acceleration = mma8452.readValues(); // read current values and print over serial port + int xx = sprintf(buffer, "x = %.2f", acceleration.x); // figure eout the length of chars + int yy = sprintf(buffer1, "y = %.2f", acceleration.y); + int zz = sprintf(buffer2, "z = %.2f", acceleration.z); + ///calculates the square root,multiplication and addition of the 3 arguments and return + float mag = sqrt((acceleration.x*acceleration.x + acceleration.y*acceleration.y + acceleration.z*acceleration.z)); + int ff = sprintf(buffer3, "Mag = %.2f", mag); + wait(0.1); // short delay until next reading + if (xx <= 14){ // if the length is smaller than 14 chars. it prints + lcd.printString(buffer, 10, 1); + if (yy <= 14){ // if the length is smaller than 14 chars. it prints + lcd.printString(buffer1, 10, 2); + if (zz <= 14){ // if the length is smaller than 14 chars. it prints + lcd.printString(buffer2, 10, 3); + if (mag <= 14){ // if the length is smaller than 14 chars. it prints + lcd.printString(buffer3, 10, 4); + + /// Compares Values for magnitude and Triggers Buzzer + if (mag > 1.5) + for(float p = 0.0f; p < 1.0f; p += 0.1f) { + buzzer = p; + wait (0.3); + buzzer = 0; + }}}}}} + + +int main() { + turnon(); + + timer.attach(&timerExpired,1); + +PHY_PowerDown(); //Powers Down ethernet + +/// Flash LED in Infinite loop, while readings are being taken. + while (1) { + + for(float p = 0.0f; p < 1.0f; p += 0.1f) { + myled = p; + } + if (timerFlag) { + readings (); + + timerFlag = 0; + } + lcd.refresh(); + } + + }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Accel.h Mon May 11 22:54:16 2015 +0000 @@ -0,0 +1,172 @@ +/** +@file Accel.h +@brief Header file containing functions prototypes, defines and global variables. +@brief Revision 1.0. +@author Mario Quartey Papafio +@date May 2015 +*/ + +#ifndef ACCEL_H +#define ACCEL_H + +#define PI 3.141592 + +#include "mbed.h" +#include "N5110.h" +#include "MMA8452.h" +#include "PowerControl/PowerControl.h" +#include "PowerControl/EthernetPowerControl.h" + + +/** +@namespace buffer +@namespace buffer1 +@namespace buffer2 +@namespace buffer3 +@namespace myled +@namespace buzzer +@namespace N5110 lcd +@brief GPIO output for status LED,BUZZER N5110 lcd +*/ + +//char buffer[14]; + // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) + // so can display a string of a maximum 14 characters in length + // or create formatted strings - ensure they aren't more than 14 characters long + +/** Initialise LCD and MMA8542 sensor(accelerometer) + * + * Powers up the display and turns on backlight (50% brightness default). + * Sets the display up in horizontal addressing mode and with normal video mode. + * Powers up MMA8542 sensor + * Default values100 Hz update rate, ±4g scale + */ +void turnon(); + +/** Gets readings and prints to LCD. + * + * Gets the x,y,z data + * Calculates Magnitude + * Displays Magnitude and x,y,z data + */ +void readings(); + +/** +@code + +/// Buffers for values to be read or calculated +char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) +char buffer1[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) +char buffer2[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) +char buffer3[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) + +/// Gets Readings and Displays them +void readings(); + +PwmOut myled(p22); +PwmOut buzzer(p21); +// VCC,SCE,RST,D/C,MOSI,SCLK,LED order of mbed pins should match +N5110 lcd(p7,p8,p9,p10,p11,p13,p26); + +@brief AnalogIn input for number of readings per second +@brief serial input for accelerometer readings + +MMA8452 mma8452(p28,p27); // SDA, SCL +Serial serial(USBTX,USBRX); +AnalogIn pot(p20); + +Timeout timer; // create ticker object + +/// sets flag to 0 +int timerFlag = 0; // flag for timer + +///Interrupt Service Routine +void timerExpired() { + timerFlag = 1; + + adds float value x +@param x - float to use for pot, to set number of readings per second +@returns the value of x + + /// sets the scale for x to be able to reach 1-45 readings per second + float x=-(1-pot.read())*44/45+1; + timer.detach(); + timer.attach(&timerExpired,x); + +} +///Turns on LCD AND Accelerometer. +void turnon () { + lcd.init(); + lcd.printString("Mario Quartey", 0,0); + lcd.printString("Accelerometer", 0,1); + lcd.printString("Elec 2645", 0,2); + lcd.printString("Dr C Evans!", 0,3); + lcd.refresh(); + wait(2); + lcd.clear(); + mma8452.init(); // 100 Hz update rate, ±4g scale + } +/// Gets readings and Prints to LCD +void readings () { + Acceleration acceleration; + lcd.printString("X Y Z Values", 0,0); + acceleration = mma8452.readValues(); // read current values and print over serial port + int xx = sprintf(buffer, "x = %.2f", acceleration.x); // figure eout the length of chars + int yy = sprintf(buffer1, "y = %.2f", acceleration.y); + int zz = sprintf(buffer2, "z = %.2f", acceleration.z); + + + ///calculates the square root,multiplication and addition of the 3 arguments and return + Multiplies and square roots and adds three float variables + * @param acceleration.x + * @param acceleration.y + * @param acceleration.z + * @returns the multipplication, addition and square root of (acceleration.x)^2 and (acceleration.y)^2 and (acceleration.z)^2 + // + + float mag = sqrt((acceleration.x*acceleration.x + acceleration.y*acceleration.y + acceleration.z*acceleration.z)); + int ff = sprintf(buffer3, "Mag = %.2f", mag); + wait(0.1); // short delay until next reading + if (xx <= 14){ // if the length is smaller than 14 chars. it prints + lcd.printString(buffer, 10, 1); + if (yy <= 14){ // if the length is smaller than 14 chars. it prints + lcd.printString(buffer1, 10, 2); + if (zz <= 14){ // if the length is smaller than 14 chars. it prints + lcd.printString(buffer2, 10, 3); + if (mag <= 14){ // if the length is smaller than 14 chars. it prints + lcd.printString(buffer3, 10, 4); + + /// Compares Values for magnitude and Triggers Buzzer + if (mag > 1.5) + for(float p = 0.0f; p < 1.0f; p += 0.1f) { + buzzer = p; + wait (0.3); + buzzer = 0; + }}}}}} + + +int main() { + turnon(); + + timer.attach(&timerExpired,1); + +PHY_PowerDown(); //Powers Down ethernet + +/// Flash LED in Infinite loop, while readings are being taken. + while (1) { + + for(float p = 0.0f; p < 1.0f; p += 0.1f) { + myled = p; + } + if (timerFlag) { + readings (); + + timerFlag = 0; + } + lcd.refresh(); + } + + } +*/ + +#endif \ No newline at end of file
--- a/Acceloro.cpp Mon May 11 18:27:20 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -/** -@file main.h -@Header file contains code for displaying acceleration, defines and global variables. -@Revision 1.0 -@Author Mario Quartey Papafio -@Date May 2015 -*/ - - -#include "mbed.h" -#include "N5110.h" -#include "MMA8452.h" -#include "PowerControl/PowerControl.h" -#include "PowerControl/EthernetPowerControl.h" - -char buffer[14]; // to store array character takes 6 pixels -char buffer1[14]; -char buffer2[14]; -char buffer3[14]; - -DigitalOut led(LED1); - -void readings(); - -PwmOut myled(p22); -PwmOut buzzer(p21); -N5110 lcd(p7,p8,p9,p10,p11,p13,p26); -MMA8452 mma8452(p28,p27); // SDA, SCL -Serial serial(USBTX,USBRX); -AnalogIn pot(p20); - -Timeout timer; // create ticker object - -int timerFlag = 0; // flag for timer - -//Interrupt Service Routine -void timerExpired() { - timerFlag = 1; - //led=!led; - - float x=-(1-pot.read())*44/45+1; - timer.detach(); - timer.attach(&timerExpired,x); - -} - - - - -void turnon () { //Turns on LCD AND Accelerometer. - lcd.init(); - lcd.printString("Mario Quartey", 0,0); - lcd.printString("Accelerometer", 0,1); - lcd.printString("Elec 2645", 0,2); - lcd.printString("Dr C Evans!", 0,3); - lcd.refresh(); - wait(2); - lcd.clear(); - mma8452.init(); // 100 Hz update rate, ±4g scale - } -void readings () { - Acceleration acceleration; - lcd.printString("X Y Z Values", 0,0); - acceleration = mma8452.readValues(); // read current values and print over serial port - int xx = sprintf(buffer, "x = %.2f", acceleration.x); // figure eout the length of chars - int yy = sprintf(buffer1, "y = %.2f", acceleration.y); - int zz = sprintf(buffer2, "z = %.2f", acceleration.z); - float mag = sqrt((acceleration.x*acceleration.x + acceleration.y*acceleration.y + acceleration.z*acceleration.z)); - int ff = sprintf(buffer3, "Mag = %.2f", mag); - //serial.printf("x = %.2f g y = %.2f g z = %.2f g\n",acceleration.x,acceleration.y,acceleration.z); - wait(0.1); // short delay until next reading - if (xx <= 14){ // if the length is smaller than 14 chars. it prints - lcd.printString(buffer, 10, 1); - if (yy <= 14){ // if the length is smaller than 14 chars. it prints - lcd.printString(buffer1, 10, 2); - if (zz <= 14){ // if the length is smaller than 14 chars. it prints - lcd.printString(buffer2, 10, 3); - if (mag <= 14){ // if the length is smaller than 14 chars. it prints - lcd.printString(buffer3, 10, 4); - if (mag > 1.5) - for(float p = 0.0f; p < 1.0f; p += 0.1f) { - buzzer = p; - wait (0.3); - buzzer = 0; - }}}}}} - - -int main() { - turnon(); - - timer.attach(&timerExpired,1); - -PHY_PowerDown(); //Powers Down ethernet - - while (1) { - - for(float p = 0.0f; p < 1.0f; p += 0.1f) { - myled = p; - - } - - if (timerFlag) { - readings (); - - timerFlag = 0; - } - lcd.refresh(); - } - - }