با یاد خدا
دوستان زیادی دنبال برنامه ای ای وی آر برای راه اندازی ماژول کامپس آنهم بزبان سی هستند،برای اینکه کمتر دچار مشکل و سردرگرمی شوند برنامه زیر را در اختیار دوستان قرار می دهم،امیدوارم مفید باشد،اضمنا گر سوالی بود درخدمتم
/*****************************************************
Project : CMPS03 Module Program
Author: Alireza.M.Qasemi
Version : v.1
Company : FOX - www.FoxLab.ir
Comments: This program © FOX Robotic Team.
*****************************************************/
#include <mega8.h>
#include <stdio.h>
#include <stdlib.h>
#include <i2c.h>
#include <delay.h>
#include <lcd.h>
void start();
void process();
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
}
int data;
#asm
.equ __i2c_port=0x15
.equ __sda_bit=4
.equ __scl_bit=5
#endasm
#asm
.equ __lcd_port=0x12
#endasm
//****************************************************
void main(void)
{
PORTD=0x08;
DDRD=0x08;
lcd_init(20);
i2c_init();
//****************************************************
while (1)
{
start();
}
}
//****************************************************
void start()
{
lcd_clear();
i2c_start();
i2c_write(0xc0);
i2c_write(0x01);
i2c_start();
i2c_write(0xc1);
data=i2c_read(0);
data=data*1.4117647058823529411764705882353;
i2c_stop();
process();
}
//****************************************************
//****************************************************
void process()
{
if(data < 45 || data > 315)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("north");
delay_ms(20);
}
if(data < 135 && data > 45)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("east");
delay_ms(20);
}
if(data < 215 && data > 135)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("soth");
delay_ms(20);
}
if(data < 315 && data > 215)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("west");
delay_ms(20);
}
}
//****************************************************
ضمنا با توجه به اینکه کامپس عددی بین 0-255 به ما تحویل می دهد، باید آنرا تبدیل به 0-360 کنیم،برای اینکار دیتا را در عدد 1.41 (این عدد از تقسیم 360 بر 255 حاصل شده) ضرب می نمایم.
ضمنا تابع پروسس برای راه اندازی کامپس نیاز نیست و فقط تابعیست که در ال سی دی مشخص می کند در کدام جهت هستیم،