Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1.  
  2. #include <Nokia5110.h>
  3. #include "Wire.h"
  4. #include "Math.h"
  5. #include "I2Cdev.h"
  6. #include "MPU6050.h"
  7.  
  8. // LCDnokia5110::LCDnokia5110(int rst, int ce, int dc, int in, int clk)
  9. // vytvoří objekt LCDnokia5110 s názvem lcd na pinech 7,6,5,4,3
  10. LCDnokia5110 lcd(7,6,5,4,3);
  11.  
  12. // vytvoříme objekt s názvem
  13. MPU6050 akcelerometr;
  14.  
  15. // pomovná proměná pro zobrazení na displej
  16. char data[5] = "    ";
  17.  
  18. // zde je uložen obrázek pozadí pro diplej (šipky)
  19. const unsigned char background [] = {
  20. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  21. 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFC, 0xF8,
  22. 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  23. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  24. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  25. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  26. 0x00, 0x00, 0x04, 0x04, 0x06, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  27. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x06, 0x04,
  28. 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  29. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  30. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  31. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F,
  32. 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00,
  33. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  34. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  35. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  36. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
  37. 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFC, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0,
  38. 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  39. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  40. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  41. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
  42. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  43. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3E, 0x3C, 0x1C, 0x18, 0x08, 0x00,
  44. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  45. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  46. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  47. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  48. 0x00, 0x00, 0x1F, 0x1F, 0x0F, 0x07, 0x07, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
  49. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  50. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  51. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  52. };
  53.  
  54.  
  55. // zadáme konstantu Ludofova čísla
  56. // pro pozdější výpočty
  57. const float pi = 3.141592;
  58. //zde zadejte z kolika vzorku bude
  59. // měření probíhat
  60. const int pocet_vzorku = 100;
  61. // pojmenovýní proměných
  62. int16_t ax, ay, az;
  63. float x, y, z;
  64. int  pocet;
  65. float _angle_x, angle_x, _angle_y, angle_y;
  66. long ax_p, ay_p, az_p;
  67.  
  68. void setup() {
  69.     // viz lekce 7
  70.     lcd.LcdInitialise();
  71.     lcd.LcdClear();  
  72.     lcd.GotoXY(13,1);
  73.     lcd.LcdString("Lesson 26");
  74.     lcd.GotoXY(16,3);
  75.     lcd.LcdString("MPU-6050");
  76.     delay(3000);
  77.     lcd.LcdClear();
  78.     lcd.GotoXY(8,1);
  79.     lcd.LcdString("Searching");
  80.     lcd.GotoXY(13,2);
  81.     lcd.LcdString("MPU6050");
  82.     // inicializace I2C
  83.     Wire.begin();
  84.     // inicializace akcelerometru  
  85.     akcelerometr.initialize();
  86.     // Když je spojení OK
  87.     if (akcelerometr.testConnection())
  88.     {
  89.     lcd.GotoXY(13,3);
  90.     lcd.LcdString("...OK");
  91.     }
  92.     //jinak
  93.     else
  94.     {
  95.     lcd.GotoXY(6,3);
  96.     lcd.LcdString("NOT FOUND!");  
  97.     }
  98.    
  99.     delay(500);
  100.     // smaž displej
  101.     lcd.LcdClear();
  102.     // vykresli šipky (pozadí)
  103.     lcd.ShowImage(background,0);  
  104. }
  105.  
  106. void loop() {
  107.     // zjistí všechny hodnoty z akcelerometru
  108.     akcelerometr.getAcceleration(&ax, &ay, &az);
  109.     // sčítáme potřebný počet hodnot
  110.     ax_p = ax_p + ax;
  111.     ay_p = ay_p + ay;
  112.     az_p = az_p + az;
  113.     // pomocné určení počru vzorků
  114.     pocet++;
  115.     // když se dosáhne určeného počtu vzorků  
  116.     if (pocet == pocet_vzorku)
  117.     {
  118.      //zjistíme průmerné hodnoty
  119.      x = ax_p/pocet_vzorku;
  120.      y = ay_p/pocet_vzorku;
  121.      z = az_p/pocet_vzorku;
  122.      // vypočteme sklon a náklon
  123.      angle_x = atan2(x, sqrt(square(y) + square(z))      )/(pi/180);
  124.      angle_y = atan2(y, sqrt(square(x) + square(z))      )/(pi/180);
  125.      // vynulujeme hodnoty pro další použití    
  126.      pocet = 0;
  127.      ax_p = 0;
  128.      ay_p = 0;
  129.      az_p = 0;
  130.    
  131.     // lcd dipleje předáme číslo již jako string
  132.     sprintf(data, "%d" , (int)(angle_x));
  133.     // a zobrazíme kde chceme
  134.     lcd.GotoXY(55,1);
  135.     lcd.LcdString(data);
  136.     // zobrazíme stupně za číslem
  137.     // a dvě mezery pro případ, aby jsme smazali
  138.     // zbytek po dvouciferném čísle na lcd
  139.     lcd.LcdString("'  ");
  140.    
  141.     // to samé z druhou hodnotou
  142.     sprintf(data, "%d" , (int)(angle_y));
  143.     lcd.GotoXY(55,4);
  144.     lcd.LcdString(data);
  145.     lcd.LcdString("'  ");
  146.    
  147.     }
  148.    
  149.    
  150. }