![]() | ![]() | ![]() |
| | #76 |
|
what do you want it to do? It works fine for me. when i press up or down it says [cm] 01
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF Nokia 6100 Driver/Software My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics | |
| |
| | #77 |
|
Here you go complete: Code: #include <pic.h>
#include "pic.h"
#include "delay.h"
#include "math.h"
#include <stdio.h>
#include <stdlib.h> //
void userMenu(char pos); //
void FloatToStr(float , char[]);
void DelayMs(unsigned char);
void lcd_cmd(unsigned char);
void lcd_data(unsigned char);
void lcd_clear(void);
void lcd_puts(const char[]);
void lcd_goto_L1(void);
void lcd_goto_L2(void);
void lcd_cursor(unsigned char);
void lcd_init(void);
void init(void);
char WaitForInput(void);
unsigned char user_input(void);
void home_screen(void);
void EnterHeight(void);
void EnterScreen(void);
void ShowDigits(unsigned char val);
void main(void);
void calc_distance(void);
#define LCD_RS RC0 //LCD RS pin
#define LCD_EN RC1 //LCD EN pin
#define LCD_STROBE() LCD_EN = 1; asm("nop"); asm("nop"); LCD_EN = 0
unsigned char cm10; //
unsigned char cm; //
unsigned int math; // used for voltage calculations
unsigned char NumDec;
unsigned char NumSep[2];
unsigned char i,j,k;
char temp[8];
//[/b]
unsigned char height=50;
unsigned char range;
unsigned char area;
unsigned char SensorPos=10;
//[/b] New Vars
char input_sw;
char mnuPOS;
unsigned char MyVal;
unsigned char MyValLCD[2];
unsigned char MyMaxVal;
unsigned char MyMinVal;
unsigned char ;
#define HOME_SW RC2 //HOME switch
#define INCREASE_SW RC3 //INCREASE switch
#define DECREASE_SW RC4 //DECREASE switch
#define ENTERSETTINGS_SW RA4 //ENTERSETTINGS switch
///////////////////////CONVERT FLOAT TO STRING///////////////////
// This function was taken from the CAVR library. It was modified slightly
// to suit our design.
void FloatToStr(float n, char str[])
{
float scale;
unsigned char d,f;
f=0;i=0;
if (n<0.0) {n=-n; str[f]='-'; f++;};
n=n+0.005;
scale=1.0;
while (n>=scale) {scale=scale*10.0; ++i;};
if (i==0) {str[f]='0'; f++;}
else
while (i--)
{
scale=floor(0.5+scale/10.0);
d=(unsigned char) (n/scale);
str[f]=d+'0';
n=n-scale*d;
f++;
};
str[f]='.';
f++;
for (j=0;j<=1;j++) //2 decimal points
{
n=n*10.0;
d=(unsigned char) n;
str[f]=d+'0';
n=n-d;
f++;
};
str[f]='\0';
}
///////////////////END CONVERT FLOAT TO STRING///////////////////
/////////////////////////////DELAY///////////////////////////////
void DelayMs(unsigned char cnt)
{
#if XTAL_FREQ <= 2MHZ
do {
DelayUs(996);
} while(--cnt);
#endif
#if XTAL_FREQ > 2MHZ
unsigned char p;
do {
p = 4;
do {
DelayUs(250);
} while(--p);
} while(--cnt);
#endif
}
void DelayS(unsigned char cnt)
{
for (j=0; j<(cnt*10); j++)
DelayMs(100);
}
///////////////////////////DELAY END/////////////////////////////
//////////////////////////////LCD SETUP//////////////////////////
/* send a command to the LCD */
void lcd_cmd(unsigned char c)
{
DelayMs(2); //wait for LCD to be ready shorter delay
LCD_RS = 0; //write instruction
PORTB = (c & 0xF0); //load upper nibble on LCD data lines
LCD_STROBE(); //send instruction to LCD
PORTB = ((c << 4) & 0xF0); //load upper nibble on LCD data lines
LCD_STROBE(); //send instruction to LCD
}
/* send data to the LCD */
void lcd_data(unsigned char c)
{
DelayMs(2); //wait for LCD to be ready shorter delay
PORTB = 0x00;
LCD_RS = 1; //write data
PORTB |= (c & 0xF0); //load upper nibble on LCD data lines
LCD_STROBE(); //send instruction to LCD
PORTB &= 0x00; //load upper nibble on LCD data lines
PORTB |= ( (c << 4) & 0xF0);
LCD_STROBE(); //send instruction to LCD
}
/*Clear the LCD*/
void lcd_clear(void)
{
lcd_cmd(0x01); //command to clear LCD
}
/*write a string of chars to the LCD*/
void lcd_puts(const char s[])
{
j = -1;
while(s[++j]!=('\0')) // send characters until null character reached
lcd_data(s[j]);
}
/*go to beginning of line 1*/
void lcd_goto_L1(void)
{
lcd_cmd(0b10000000); // command to go to line 1
}
/*go to beginning of line 2*/
void lcd_goto_L2(void)
{
lcd_cmd(0b11000000); // command to go to line 2
}
/*move cursor "x" positions to the right*/
void lcd_cursor(unsigned char x)
{
lcd_cmd(((x)&0x7F)|0x80);
}
/*initialise the LCD - put into 4 bit mode*/
void lcd_init(void)
{
LCD_RS = 0;
LCD_EN = 0;
DelayMs(20); //wait for LCD startup
lcd_cmd(0x02);
lcd_cmd(0x28); // 4-bit mode
lcd_cmd(0x08); // display off
lcd_cmd(0x01); // clear display
lcd_cmd(0x0C); // disp. on, cursor off, cursor blink off
lcd_cmd(0x06); // entry mode
lcd_cmd(0x80); // initialise DDRAM address to zero
}
//////////////////////////LCD SETUP END//////////////////////////
void init(void)
{
MyVal = 0; //initializn these variables here
MyMinVal = 0;
MyMaxVal = 99;
OSCCON|=0x60; //set fosc to 4Mhz
TRISB=0x00;
TRISC=0xFC;
TRISA = 0b10010010; // RA7 high imp, RA3 is serial out, RA4 button input
ANSEL=0x02; //set RA1 as analog input for GP2 sensor
ANSELH=0x00;
lcd_init(); //call LCD initialisation
}
char WaitForInput(void){
char done;
char temp;
done = 0;
while(!done){
if(!ENTERSETTINGS_SW){
temp = 1;
done = 0xff;
}
if(!HOME_SW){
temp = 2;
done = 0xff;
}
if(!INCREASE_SW){
temp = 3;
done = 0xff;
}
if(!DECREASE_SW){
temp = 4;
done = 0xff;
}
}//end of while
DelayMs(150); //debounce
return temp;
}//
void userMenu(char pos){
lcd_clear();
lcd_goto_L1();
switch(pos){
case 0:
lcd_puts(" HEIGHT ");
break;
case 1:
lcd_puts(" RANGE ");
break;
case 2:
lcd_puts(" SURFACE AREA ");
break;
}
lcd_goto_L2();
lcd_puts("Press Up/Down"); //home screen message (line 2)
}
// New Menu System
void EnterHeight(void){
lcd_clear();
lcd_goto_L1();
lcd_puts(" ENTER HEIGHT ");
lcd_goto_L2();
lcd_puts("Press Up/Down"); //home screen message (line 2)
}
void EnterScreen(void){
lcd_clear();
lcd_goto_L1();
lcd_puts(" [cm] ");
}
void ShowDigits(unsigned char val){
MyValLCD[0] = val /10; //returns the quotient (if temp = 35 the result is 3)
MyValLCD[1] = val % 10; //Returns remainder (if temp = 35 the result is 5)
MyValLCD[0] += 0x30; //to ASCII
MyValLCD[1] += 0x30; //to ASCII
EnterScreen();
lcd_goto_L2();
lcd_data(MyValLCD[0]); //to LCD
lcd_data(MyValLCD[1]); //to LCD
}
void calc_distance(void)
{
// from the transeiver datasheet the analog voltage is
// the inverse of distance, so distance can be calculated
// d = (1 / volts) then just scaled to suit the transeiver
// load ADC value in 16bit math var
math = ADRESH;
math = (math * 256);
math += ADRESL;
// now invert it; (1 / volts) use (6050 / volts) for scaling
math = (6050 / math);
if(math >= 2) math -=2; // fix linear error (-2)
if(math > 99) math = 99; // max limit at 99cm
// convert from 0-99 to 2 decimal digits, 0-99cm
cm10=0;
while(math >= 10)
{
cm10++;
math -= 10;
}
cm = math;
}
//
unsigned char user_input(void) //This will return what we want
{
char done = 0;
MyVal = 0; //Start on 0
while(done == 0){
input_sw = WaitForInput();
switch(input_sw){
case 1:
done = 0xff; //This tells us the user finished entering
lcd_goto_L1();
lcd_puts(" Done! "); //home screen message (line 1)
break;
case 3:
if(MyVal < MyMaxVal)
MyVal++;
EnterScreen();
ShowDigits(MyVal);
break;
case 4:
if(MyVal > MyMinVal)
MyVal--;
EnterScreen();
ShowDigits(MyVal);
break;
default:
break;
}
}
DelayS(1);
return MyVal;
}
void home_screen(void){
mnuPOS = 0;
lcd_clear();
lcd_goto_L1();
lcd_puts("INFRARED LIQUID"); //home screen message (line 1)
lcd_goto_L2();
lcd_puts("LEVEL DETECTOR"); //home screen message (line 2)
input_sw = 0; //Reset the value
while(input_sw != 1) //Wait until enter is pressed
input_sw = WaitForInput();
//EnterScreen();
//EnterHeight();
userMenu(0);
DelayMs(2); //shorter delay
height = user_input(); //The HEIGHT var will have the myVal
userMenu(1);
DelayMs(2); //shorter delay
range = user_input(); //The HEIGHT var will have the myVal
userMenu(2);
DelayMs(2); //shorter delay
area = user_input(); //The HEIGHT var will have the myVal
/*
"enter height"
call enter/settings (which is now user input function in new code)
height=MyVal
"enter range"
call user_input
range=MyVal
"enter surface area"
call user_input
area=MyVal
*/
}
void main(void)
{
init(); // initialise I/O ports, LCD
while(1){
home_screen();
}
}
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF Nokia 6100 Driver/Software My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics | |
| |
| | #78 |
|
well its doing the above stuff without me pressing any buttons.... o gosh i just looked at mplab config bits again.....i had saved this in a new file and it reset the config bits to default..... ![]() im sure it will work after i set the bits correctly again.....thanx AtomSoft.....
__________________ Learn without thinking begets ignorance. Think without learning is dangerous. | |
| |
| | #79 |
|
heh no problem. I made the whole menu in the new code posted. I add the range and area stuff
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF Nokia 6100 Driver/Software My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics | |
| |
| | #80 |
|
lol complete thanx ![]() ![]() ....Yeah it sure is working smoothly... tried it out now....i have to start paying forward my bank balance (im not working yet lol)...if i dont start paying back in kind hehe....
__________________ Learn without thinking begets ignorance. Think without learning is dangerous. Last edited by fantabulous68; 14th September 2009 at 09:26 PM. | |
| |
| | #81 |
|
heh paying foward heh If you need any more help be sure to simply ask
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF Nokia 6100 Driver/Software My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics | |
| |
| | #82 | |
|
Uhmmmm Hello AtomSoft...could you tell me why you suggest i use int instead of unsigned int....??? the distances are all going to be positive... This is from the original code: unsigned int math; // used for voltage calculations Quote:
__________________ Learn without thinking begets ignorance. Think without learning is dangerous. | ||
| |
| | #83 | |
| Quote:
Unsigned int is best in this case
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF Nokia 6100 Driver/Software My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics | ||
| |
| | #84 |
|
O Ok...Cool. Hello AtomSoft...I wrote a test today & came home early...hehe I am attempting ADC 1st time today lol....well it looks easy to set up and stuff ...hopefully it will work when i put it in the circuit (o else lol someone will be getting bothered ![]() ![]() )
__________________ Learn without thinking begets ignorance. Think without learning is dangerous. | |
| |
| | #85 |
|
This compiled successfully but im not sure if im doing the part highlighted in red correctly.....I want to display the unsigned int value stored in cm to the LCD. cm=math from the calc_distance function. i commented home_screen for now. Want to get cm value displaying and will integrate it later. Code: #include <pic.h>
#include "pic.h"
#include "delay.h"
#include "math.h"
#include <stdio.h>
#include <stdlib.h> //
void userMenu(char pos); //
void FloatToStr(float , char[]);
void DelayMs(unsigned char);
void lcd_cmd(unsigned char);
void lcd_data(unsigned char);
void lcd_clear(void);
void lcd_puts(const char[]);
void lcd_goto_L1(void);
void lcd_goto_L2(void);
void lcd_cursor(unsigned char);
void lcd_init(void);
void init(void);
char WaitForInput(void);
unsigned char user_input(void);
void home_screen(void);
void EnterHeight(void);
void EnterScreen(void);
void ShowDigits(unsigned char val);
void calc_distance(void);
void main(void);
unsigned int temp;
unsigned char cm2LCD;
#define LCD_RS RC0 //LCD RS pin
#define LCD_EN RC1 //LCD EN pin
#define LCD_STROBE() LCD_EN = 1; asm("nop"); asm("nop"); LCD_EN = 0
unsigned char cm10; //
unsigned char cm; //
unsigned int math; // used for voltage calculations
unsigned char NumDec;
unsigned char NumSep[2];
unsigned char i,j,k;
//char temp[8];
//[/b]
unsigned char height=50;
unsigned char range;
unsigned char area;
unsigned char SensorPos=10;
//[/b] New Vars
char input_sw;
char mnuPOS;
unsigned char MyVal;
unsigned char MyValLCD[2];
unsigned char MyMaxVal;
unsigned char MyMinVal;
unsigned long bres; // for bresenham 2-second timer system
unsigned char ;
#define HOME_SW RC2 //HOME switch
#define INCREASE_SW RC3 //INCREASE switch
#define DECREASE_SW RC4 //DECREASE switch
#define ENTERSETTINGS_SW RA4 //ENTERSETTINGS switch
///////////////////////CONVERT FLOAT TO STRING///////////////////
// This function was taken from the CAVR library. It was modified slightly
// to suit our design.
void FloatToStr(float n, char str[])
{
float scale;
unsigned char d,f;
f=0;i=0;
if (n<0.0) {n=-n; str[f]='-'; f++;};
n=n+0.005;
scale=1.0;
while (n>=scale) {scale=scale*10.0; ++i;};
if (i==0) {str[f]='0'; f++;}
else
while (i--)
{
scale=floor(0.5+scale/10.0);
d=(unsigned char) (n/scale);
str[f]=d+'0';
n=n-scale*d;
f++;
};
str[f]='.';
f++;
for (j=0;j<=1;j++) //2 decimal points
{
n=n*10.0;
d=(unsigned char) n;
str[f]=d+'0';
n=n-d;
f++;
};
str[f]='\0';
}
///////////////////END CONVERT FLOAT TO STRING///////////////////
/////////////////////////////DELAY///////////////////////////////
void DelayMs(unsigned char cnt)
{
#if XTAL_FREQ <= 2MHZ
do {
DelayUs(996);
} while(--cnt);
#endif
#if XTAL_FREQ > 2MHZ
unsigned char p;
do {
p = 4;
do {
DelayUs(250);
} while(--p);
} while(--cnt);
#endif
}
void DelayS(unsigned char cnt)
{
for (j=0; j<(cnt*10); j++)
DelayMs(100);
}
///////////////////////////DELAY END/////////////////////////////
//////////////////////////////LCD SETUP//////////////////////////
/* send a command to the LCD */
void lcd_cmd(unsigned char c)
{
DelayMs(2); //wait for LCD to be ready shorter delay
LCD_RS = 0; //write instruction
PORTB = (c & 0xF0); //load upper nibble on LCD data lines
LCD_STROBE(); //send instruction to LCD
PORTB = ((c << 4) & 0xF0); //load upper nibble on LCD data lines
LCD_STROBE(); //send instruction to LCD
}
/* send data to the LCD */
void lcd_data(unsigned char c)
{
DelayMs(2); //wait for LCD to be ready shorter delay
PORTB = 0x00;
LCD_RS = 1; //write data
PORTB |= (c & 0xF0); //load upper nibble on LCD data lines
LCD_STROBE(); //send instruction to LCD
PORTB &= 0x00; //load upper nibble on LCD data lines
PORTB |= ( (c << 4) & 0xF0);
LCD_STROBE(); //send instruction to LCD
}
/*Clear the LCD*/
void lcd_clear(void)
{
lcd_cmd(0x01); //command to clear LCD
}
/*write a string of chars to the LCD*/
void lcd_puts(const char s[])
{
j = -1;
while(s[++j]!=('\0')) // send characters until null character reached
lcd_data(s[j]);
}
/*go to beginning of line 1*/
void lcd_goto_L1(void)
{
lcd_cmd(0b10000000); // command to go to line 1
}
/*go to beginning of line 2*/
void lcd_goto_L2(void)
{
lcd_cmd(0b11000000); // command to go to line 2
}
/*move cursor "x" positions to the right*/
void lcd_cursor(unsigned char x)
{
lcd_cmd(((x)&0x7F)|0x80);
}
/*initialise the LCD - put into 4 bit mode*/
void lcd_init(void)
{
LCD_RS = 0;
LCD_EN = 0;
DelayMs(20); //wait for LCD startup
lcd_cmd(0x02);
lcd_cmd(0x28); // 4-bit mode
lcd_cmd(0x08); // display off
lcd_cmd(0x01); // clear display
lcd_cmd(0x0C); // disp. on, cursor off, cursor blink off
lcd_cmd(0x06); // entry mode
lcd_cmd(0x80); // initialise DDRAM address to zero
}
//////////////////////////LCD SETUP END//////////////////////////
void init(void)
{
// setup the PIC 16f690
OSCCON = 0x72; // internal osc, 8MHz
PORTA = 0;
TRISA = 0b10010010; // RA7 high imp, RA3 is serial out, RA4 button input
PORTB = 0; // PORTB not used
WPUB = 1; // PORTB pullups ON
RABPU = 0;
/* Init ADC */
ADCON0 = 0b10000101; // bit 7 right justify,analogue channel select bits bits5-2 0001=AN1,ADC ON, RA1 is ADC input
ADCON1 = 0b00100000; //bits6-4 fosc/32
ADON=1; // turn on the A2D conversion module
ANSEL=0x02; //set RA1 as analog input for GP2 sensor
ANSELH=0x00;
T1CON = 0b00010001; // TMR1 is ON, 1:2 prescale, =1MHz
T2CON = 0b00000101; // TMR2 is ON, 1:4 prescale, =1MHz
MyVal = 0; //initializn these variables here
MyMinVal = 0;
MyMaxVal = 99;
TRISB=0x00;
TRISC=0xFC;
lcd_init(); //call LCD initialisation
}
char WaitForInput(void){
char done;
char temp;
done = 0;
while(!done){
if(!ENTERSETTINGS_SW){
temp = 1;
done = 0xff;
}
if(!HOME_SW){
temp = 2;
done = 0xff;
}
if(!INCREASE_SW){
temp = 3;
done = 0xff;
}
if(!DECREASE_SW){
temp = 4;
done = 0xff;
}
}//end of while
DelayMs(150); //debounce
return temp;
}//
void userMenu(char pos){
lcd_clear();
lcd_goto_L1();
switch(pos){
case 0:
lcd_puts(" HEIGHT ");
break;
case 1:
lcd_puts(" RANGE ");
break;
case 2:
lcd_puts(" SURFACE AREA ");
break;
}
lcd_goto_L2();
lcd_puts("Press Up/Down"); //home screen message (line 2)
}
// New Menu System
void EnterHeight(void){
lcd_clear();
lcd_goto_L1();
lcd_puts(" ENTER HEIGHT ");
lcd_goto_L2();
lcd_puts("Press Up/Down"); //home screen message (line 2)
}
void EnterScreen(void){
lcd_clear();
lcd_goto_L1();
lcd_puts(" [cm] ");
}
void ShowDigits(unsigned char val){
MyValLCD[0] = val /10; //returns the quotient (if temp = 35 the result is 3)
MyValLCD[1] = val % 10; //Returns remainder (if temp = 35 the result is 5)
MyValLCD[0] += 0x30; //to ASCII
MyValLCD[1] += 0x30; //to ASCII
EnterScreen();
lcd_goto_L2();
lcd_data(MyValLCD[0]); //to LCD
lcd_data(MyValLCD[1]); //to LCD
}
void calc_distance(void)
{
// from the transeiver datasheet the analog voltage is
// the inverse of distance, so distance can be calculated
// d = (1 / volts) then just scaled to suit the transeiver
// load ADC value in 16bit math var
math = ADRESH;
math = (math * 256);
math += ADRESL;
// now invert it; (1 / volts) use (6050 / volts) for scaling
math = (6050 / math);
if(math >= 2) math -=2; // fix linear error (-2)
if(math > 99) math = 99; // max limit at 99cm
// convert from 0-99 to 2 decimal digits, 0-99cm
cm10=0;
while(math >= 10)
{
cm10++;
math -= 10;
}
cm = math;
}
//
unsigned char user_input(void) //This will return what we want
{
char done = 0;
MyVal = 0; //Start on 0
while(done == 0){
input_sw = WaitForInput();
switch(input_sw){
case 1:
done = 0xff; //This tells us the user finished entering
lcd_goto_L1();
lcd_puts(" Done! "); //home screen message (line 1)
break;
case 3:
if(MyVal < MyMaxVal)
MyVal++;
EnterScreen();
ShowDigits(MyVal);
break;
case 4:
if(MyVal > MyMinVal)
MyVal--;
EnterScreen();
ShowDigits(MyVal);
break;
default:
break;
}
}
DelayS(1);
return MyVal;
}
void home_screen(void){
mnuPOS = 0;
lcd_clear();
lcd_goto_L1();
lcd_puts("INFRARED LIQUID"); //home screen message (line 1)
lcd_goto_L2();
lcd_puts("LEVEL DETECTOR"); //home screen message (line 2)
input_sw = 0; //Reset the value
while(input_sw != 1) //Wait until enter is pressed
input_sw = WaitForInput();
userMenu(0);
DelayMs(2); //shorter delay
height = user_input(); //The HEIGHT var will have the myVal
userMenu(1);
DelayMs(2); //shorter delay
range = user_input(); //The HEIGHT var will have the myVal
userMenu(2);
DelayMs(2); //shorter delay
area = user_input(); //The HEIGHT var will have the myVal
/*
"enter height"
call enter/settings (which is now user input function in new code)
height=MyVal
"enter range"
call user_input
range=MyVal
"enter surface area"
call user_input
area=MyVal
*/
}
//*********************************************************
/* Junebug_Serial4.c RomanBlack.com 19th July 2009.
uses "zero error 1 second timer"
system to generate a 2 second interval, then every
2 seconds it reads an analog voltage from a
Sharp GP2 distance sensor and converts it to decimal
distance, then sends that data to a LCD
Code for MikroC, config handled by MikroC compiler;
_INTI02_OSC_1H
_WDT_OFF_2H
-MCLRE_ON_3H
_LVP_OFF_4L
_PWRT_ON_2L
*/
//*********************************************************
void main(void)
{
init(); // initialise I/O ports, LCD
while(1){
// home_screen();
// wait for 2 seconds, uses TMR1 free running at 1Mhz
while(!TMR1IF) // wait for TMR1 overflow
TMR1IF = 0; // clear overflow flag
bres += 65536; // add 65536uS to bres value
if(bres >= 2000000) // if reached 2 seconds!
{
bres -= 2000000; // subtract 2 seconds, keep error
// read the ADC voltage RA1 (Sharp GP2 sensor)
GODONE=1; // initiate conversion on the channel 0
while(GODONE) continue; // Wait convertion done
calc_distance(); // convert ADC value to distance
cm2LCD=cm+0x30; //converting cm(from calc_distance procedure) to ascii
lcd_data(cm2LCD);
}
}
}
__________________ Learn without thinking begets ignorance. Think without learning is dangerous. Last edited by fantabulous68; 16th September 2009 at 03:09 PM. | |
| |
| | #86 |
|
actually i tried something like this 1st: Code: tempvar=calc_distance(); // tempvar assigned cm value from calc_distance procedure cm2LCD=tempvar+0x30; lcd_data(cm2LCD);
__________________ Learn without thinking begets ignorance. Think without learning is dangerous. Last edited by fantabulous68; 16th September 2009 at 03:04 PM. | |
| |
| | #87 |
|
You have to remember this. Can CM be higher than 09 ? if so then you should spilt the variable CM into 2 like Code: cmHigh = ( ( cm >> 4 ) & 0x0F ) + 0x30; cmLow = ( cm & 0x0F ) + 0x30; lcd_data(cmHigh); lcd_data(cmLow);
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF Nokia 6100 Driver/Software My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics Last edited by AtomSoft; 16th September 2009 at 03:26 PM. | |
| |
| | #88 |
|
the sensor has a range from 10cm to 80 cm So yes CM can be higher than 09. I ran my code that i posted and the LCD displays random numbers when i power up. EG. 12768126498124987491874 12094809128409283498239 But when i put a page in front the sensor and i hold it steadily then the sensor displays EG. 888888888888888888888888 888888888888888888888888 and if i move it away and hold it steady it displays 4444444444444444444444444444 4444444444444444444444444444 if its not steady then the numbers are just random......im guessing im not formatting it correctly or something...... im going to try what you suggested now.......... its improving................. when i power up its random numbers now when i put a page & hold it steady.... EG. 010101010101010 010101010101010 i keep moving it away and... 020202020202020 020202020202020 030303030303030 030303030303030 till..... 090909090909090 090909090909090 THEN 000000000000000 000000000000000 and it repeats the sequence 010101010101010 010101010101010............... and so on...... BTW (it does not go to 111111111111111 111111111111111) and 1212121212121212 1212121212121212 .....etc) i just measured manually with a ruler to verify the values....its accurate meaning.... the sensor has a min range of 10 cm...... so when the page is 10cm away it displays.... 000000000000000 000000000000000 and if it 5cm away from the min range(ie. 15cm) then it display: 050505050505050 050505050505050 and i measured this with a ruler and it gives 15cm
__________________ Learn without thinking begets ignorance. Think without learning is dangerous. Last edited by fantabulous68; 16th September 2009 at 06:39 PM. | |
| |
| | #89 |
|
ook just so i dont screw up the code.. can you post entire project again. So i can have a clear look.
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF Nokia 6100 Driver/Software My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics | |
| |
| | #90 |
|
to me it sounds like its just looping with no stop heh which is a simple fix when i see the code.
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF Nokia 6100 Driver/Software My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics | |
| |
|
| Tags |
| display, lcd, pushbutton, reading |
| Thread Tools | |
| Display Modes | |
| |
Similar | ||||
| Title | Starter | Forum | Replies | Latest |
| Substituting a 16x2 LCD display for 16x1 LCD display? | Dawny | Electronic Projects Design/Ideas/Reviews | 19 | 11th October 2008 09:58 AM |
| Pushbutton Slow & Repeating Pulse | btanner | Electronic Projects Design/Ideas/Reviews | 1 | 22nd January 2008 06:18 PM |
| Is this display burned out? (Sony MD LCD Display) | Amphr_Moth | General Electronics Chat | 4 | 28th October 2007 07:47 PM |
| how to display '-' & '+' range number on LCD? | meera83 | Micro Controllers | 8 | 5th July 2007 09:56 AM |
| lcd display with hd44780 display driver | ANUPAMA | Micro Controllers | 2 | 7th April 2004 02:58 PM |