Ok, well now MES-1 has a library, easy :o to use.
Librar
/*
Mes1dlc.h
MES-1 Lib for Disp and LEDs
v 0.1 12 dec 2009
Created > sgbzona
*/
#ifndef Mes1dlc_h
#define Mes1dlc_h
#include "WProgram.h"
class Mes1dlc{
public:
Mes1dlc(uint8_t d3, uint8_t d2, uint8_t d1, uint8_t d0);
// pins used by Display or LEDs
void init(uint8_t d3, uint8_t d2, uint8_t d1, uint8_t d0);
void disp(int k);
void ledsC(int k);
void ledsE(int k);
private:
uint8_t _pPIN[4];
};
#endif
/*
Mes1dlc.cpp
MES-1 code for Disp and LEDs
v 0.1 12 dec 2009
Created > sgbzona
*/
#include "WProgram.h"
#include "Mes1dlc.h"
int Num [][16] = {{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},{0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1},{1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1},{1,1,0,0},{1,1,0,1},{1,1,1,0},{1,1,1,1}};
int NumE [][19] = {{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,1,0,0},{1,0,0,0},{1,0,0,1},{0,1,1,0},{0,0,0,0},{0,0,0,1},{0,0,1,1},{0,1,1,1},{1,1,1,1},{0,1,1,0},{1,1,0,0},{0,0,1,1},{1,0,1,0},{0,1,0,1},{0,0,0,0},{1,1,1,1}};
Mes1dlc::Mes1dlc(uint8_t d3, uint8_t d2, uint8_t d1, uint8_t d0){
init (d3, d2, d1, d0);
}
void Mes1dlc::init(uint8_t d3, uint8_t d2, uint8_t d1, uint8_t d0){
int i;
_pPIN[0] = d3;
_pPIN[1] = d2;
_pPIN[2] = d1;
_pPIN[3] = d0;
for (i = 0; i <= 3; i++){
pinMode(_pPIN[i],OUTPUT);
digitalWrite(_pPIN[i],0);
}
}
void Mes1dlc::disp(int k){
int i;
int j;
i = k;
for (j = 0; j <= 3; j++){
digitalWrite(_pPIN[j],Num[i][j]);
}
}
void Mes1dlc::ledsC(int k){
int i;
int j;
i = k;
for (j = 0; j <= 3; j++){
digitalWrite(_pPIN[j],Num[i][j]);
}
}
void Mes1dlc::ledsE(int k){
int i;
int j;
i = k;
for (j = 0; j <= 3; j++){
digitalWrite(_pPIN[j],NumE[i][j]);
}
}
New Sample code.
/* MES-1 V1.6
Sample code to use one axis , from accelerometer ADXL320
Displays numeric and position values using the MES.
spacebird 2009
v0.1 - nov 2009 // Basic CONFIG
v0.2 - dic 2009 // Using Basic CONFIG w/Cycles
v0.3 - dic 2009 // Using a Library
*/
#include <Mes1dlc.h>
//LEDS
Mes1dlc mes1PLEDS (7,6,5,4);
//For decoder
Mes1dlc mes1PDISP (13,12,11,10);
//Analog Input 0
int An0 = 0;
int i;
//Int variables
int a;
int b;
int DataAn0;
int Cent;
int PF;
int Num1;
int Num2;
//Float variables
float m;
float P;
float P1;
void setup(){
}
void loop(){
//Calculate m
a = 98;
b = 76;
m = 180 / (float)(a - b);
// Read actual value from accelerometer
DataAn0 = analogRead (An0);
DataAn0 = map(DataAn0,0,1024,0,1024);
//Calculate position
Cent = 87;
P = m*(DataAn0 - Cent) + 90;
P1 = round (P);
PF = abs((int)P1 - 90);
//Display position on LEDS
if ((P1 >= 0) && (P1 <= 30)){
mes1PLEDS.ledsE(4);
delay (255);
}else if ((P1 >= 31) && (P1 <= 60)){
mes1PLEDS.ledsE(3);
delay (255);
}else if ((P1 >= 61) && (P1 <= 90)){
mes1PLEDS.ledsE(6);
delay (255);
}else if ((P1 >= 91) && (P1 <= 120)){
mes1PLEDS.ledsE(6);
delay (255);
}else if ((P1 >= 121) && (P1 <= 150)){
mes1PLEDS.ledsE(2);
delay (255);
}else if((P1 >= 151) && (P1 <= 180)){
mes1PLEDS.ledsE(1);
delay (255);
}
//Display numeric value on 7 Segment Display
Num1 = PF / 10;
Num2 = PF % 10;
mes1PDISP.disp(Num1);
delay (250);
mes1PDISP.disp(Num2);
delay (250);
mes1PDISP.disp(12);
delay (250);
}