Список сравнения


пусто

05.11.2013 делаем цифровой компас HMC5883L


   +matrixassembledss

 компас и 8х8 светодиодный матричный дисплей

 нужно скачать библиотеки  LedControl и HMC5883L

Фото и видео скоро будут =)

наш код  :  

#include <avr/pgmspace.h>
#include <LedControl.h>
#include "Wire.h"
#include "HMC5883L.h"

HMC5883L compass;  //  +3.3  gnd  scl(аналоговый вход 5)  sda(аналоговый вход 4)
// *CONSTANTS
const int DIN = 8;            //DataIn pin (18)
const int CLK = 10;            //Clock pin (17)
const int LOAD = 9;           //Load pin (16)
const int numDevices = 2;      //Number of MAX7219 LED Driver Chips (1-8)
const long scrollDelay = 70;


unsigned long bufferLong [20] = {1};  //Buffer for scrolling text
LedControl lc=LedControl(DIN,CLK,LOAD,numDevices);

void setup(){
    for (int x=0; x<numDevices; x++){
        lc.shutdown(x,false);       //The MAX72XX is in power-saving mode on startup
        lc.setIntensity(x,8);       // Set the brightness to default value
        lc.clearDisplay(x);         // and clear the display
          Wire.begin();
           compass = HMC5883L();  // создаем экземпляр HMC5883L библиотеки
  setupHMC5883L();
    }
}

void loop(){
    float heading = getHeading();
 
  int y = map(heading, 0, 360, 0, 8);
    delay(100);
int ycom;
int xcom;
 
 lc.setLed(0,0,0,true);
 if(y==0)
 {
 lc.setLed(0,1,1,true);
 lc.setLed(0,2,2,true);
 
 lc.setLed(0,3,3,true);
 lc.setLed(0,3,4,true);
 lc.setLed(0,4,3,true);
 lc.setLed(0,4,4,true);

 


 }
 else
 {
 lc.setLed(0,1,1,false);
 lc.setLed(0,2,2,false);
 }
 
 
 lc.setLed(0,7,7,true);
 
  if(y==2)
 {
 lc.setLed(0,6,1,true);
 lc.setLed(0,5,2,true);
 }
 else
 {
 lc.setLed(0,6,1,false);
 lc.setLed(0,5,2,false);
 }
 
 lc.setLed(0,7,0,true);
 
  if(y==4)
 {
 lc.setLed(0,6,6,true);
 lc.setLed(0,5,5,true);
 }
 else
 {
 lc.setLed(0,6,6,false);
 lc.setLed(0,5,5,false);
 }
 
 
 lc.setLed(0,0,7,true);
 
   if(y==6)
 {
 lc.setLed(0,2,5,true);
 lc.setLed(0,1,6,true);
 }
 else
 {
 lc.setLed(0,2,5,false);
 lc.setLed(0,1,6,false);
 }
 
 
     // рамка север
 lc.setLed(0,0,2,true);
 lc.setLed(0,0,3,true);
 lc.setLed(0,0,4,true);
 lc.setLed(0,0,5,true);
 if(y==7){
 lc.setLed(0,1,3,true);
 lc.setLed(0,1,4,true);
 lc.setLed(0,1,5,true);
 lc.setLed(0,1,2,true);
 }
  else 
 {
 lc.setLed(0,1,2,false);
 lc.setLed(0,1,3,false);
 lc.setLed(0,1,4,false);
 lc.setLed(0,1,5,false);
 }
 
     // рамка юг
 lc.setLed(0,7,2,true);
 lc.setLed(0,7,3,true);
 lc.setLed(0,7,4,true);
 lc.setLed(0,7,5,true);
 
 if(y==3){
 lc.setLed(0,6,2,true);
 lc.setLed(0,6,3,true);
 lc.setLed(0,6,4,true);
 lc.setLed(0,6,5,true);
 }
  else 
 {
 lc.setLed(0,6,2,false);
 lc.setLed(0,6,3,false);
 lc.setLed(0,6,4,false);
 lc.setLed(0,6,5,false);
 }

 
     // рамка  запад
 lc.setLed(0,2,0,true);
 lc.setLed(0,3,0,true);
 lc.setLed(0,4,0,true);
 lc.setLed(0,5,0,true);


 if(y==1){
 lc.setLed(0,2,1,true);
 lc.setLed(0,3,1,true);
 lc.setLed(0,4,1,true);
 lc.setLed(0,5,1,true);
 }
  else 
 {
 lc.setLed(0,2,1,false);
 lc.setLed(0,3,1,false);
 lc.setLed(0,4,1,false);
 lc.setLed(0,5,1,false);
 }
 
     // рамка восток
 lc.setLed(0,2,7,true);
 lc.setLed(0,3,7,true);
 lc.setLed(0,4,7,true);
 lc.setLed(0,5,7,true);
 
  if(y==5){
 lc.setLed(0,2,6,true);
 lc.setLed(0,3,6,true);
 lc.setLed(0,4,6,true);
 lc.setLed(0,5,6,true);
 }
  else 
 {
 lc.setLed(0,2,6,false);
 lc.setLed(0,3,6,false);
 lc.setLed(0,4,6,false);
 lc.setLed(0,5,6,false);
 }
 

//lc.setLed(0,col,row,false); // выключается светодиод столбец, строка
//delay(10);

 
}
void setupHMC5883L(){
  // инициализация HMC5883L, и проверка наличия ошибок
  int error; 
  error = compass.SetScale(0.88); // чувствительность датчика из диапазона: 0.88, 1.3, 1.9, 2.5, 4.0, 4.7, 5.6, 8.1
  if(error != 0) Serial.println(compass.GetErrorText(error)); // если ошибка, то выводим ее
 
  error = compass.SetMeasurementMode(Measurement_Continuous); // установка режима измерений как Continuous (продолжительный)
  if(error != 0) Serial.println(compass.GetErrorText(error)); // если ошибка, то выводим ее
}
 
float getHeading(){
  // считываем данные с HMC5883L и рассчитываем  направление
  MagnetometerScaled scaled = compass.ReadScaledAxis(); // получаем масштабированные элементы с датчика
  float heading = atan2(scaled.YAxis, scaled.XAxis);    // высчитываем направление
 
  // корректируем значения с учетом знаков
  if(heading < 0) heading += 2*PI;
  if(heading > 2*PI) heading -= 2*PI;
 
  return heading * RAD_TO_DEG; // переводим радианы в градусы
}

 


.

Закрыть рекламу