دوستان سلام من از یک کتاب برنامه قطب نما با ماژول CMPs03 رو دیدم ، اما چون این ماژول گران قیمت هست به جاش ماژول GY-271 را از ECA خریدم ، حالا ظاهرا این ماژول با این برنامه راه اندازی نمیشود ! (مگه چه فرقی داره هر دو تاش با پروتکل دو سیمه وصل میشن اما این ماژول ارزون قیمته امکاناتش کمتره ) برنامه رو گذاشتم اما یک سری اطلاعات از http://www.electrodragon.com/w/index.php?title=HMC5883L_Three-Axis_Compass_Magneticfield_Module در باره ی این ماژول گرفتم ولی نفهمیدم !
دیتا شیت ماژول GY-271
http://bit.ly/1fjrurf
سورس برنامه قطب نما با ماژول CMPS03
http://bit.ly/1fjrBTU
دیتا شیت ماژول GY-271
http://bit.ly/1fjrurf
سورس برنامه قطب نما با ماژول CMPS03
http://bit.ly/1fjrBTU
کد:
#include <mega16.h> #include <stdio.h> #include <stdlib.h> #include <delay.h> // I2C Bus functions #asm .equ __i2c_port=0x18 ;PORTB .equ __sda_bit=0 .equ __scl_bit=1 #endasm #include <i2c.h> // Alphanumeric LCD Module functions #include <alcd.h> unsigned char compass_data; void compass_read(void); void main(void) { char str[20],str1[20]; float point; // TWI initialization // TWI disabled TWCR=0x00; // I2C Bus initialization i2c_init(); // Alphanumeric LCD initialization // Connections specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTD Bit 0 // RD - PORTD Bit 1 // EN - PORTD Bit 2 // D4 - PORTD Bit 4 // D5 - PORTD Bit 5 // D6 - PORTD Bit 6 // D7 - PORTD Bit 7 // Characters/line: 16 lcd_init(16); while (1) { compass_read(); point=(float)compass_data*1.41176; ftoa(point,1,str1); sprintf(str,"point:%s ",str1); lcd_gotoxy(0,0); lcd_puts(str); if (point<45 || point>315) { lcd_gotoxy(5,1); lcd_putsf("NORTH"); } else if (point<135 && point>=45) { lcd_gotoxy(5,1); lcd_putsf("EAST"); } else if (point<215 && point>=135) { lcd_gotoxy(5,1); lcd_putsf("SOUTH"); } else if (point<315 && point>=215) { lcd_gotoxy(5,1); lcd_putsf("WEST"); } delay_ms(100); }; } void compass_read() { i2c_start(); i2c_write(0xC0); i2c_write(0x01); i2c_start(); i2c_write(0xC1); compass_data=i2c_read(0); i2c_stop(); }
دیدگاه