Advertisement
Guest User

Untitled

a guest
Feb 9th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.43 KB | None | 0 0
  1. #include <Wire.h>
  2. #include <LiquidCrystal.h>
  3. #include <OneWire.h>
  4.  
  5. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Deklaracja wyswietlacza
  6. OneWire ds(7); // Deklaracja termometru
  7.  
  8. //
  9. // AKCELEROMETR
  10. //
  11. byte Version[3];
  12. int8_t x_data;
  13. int8_t y_data;
  14. int8_t z_data;
  15. byte range=0x00;
  16. float divi=16;
  17. float x,y,z;
  18. int8_t x_cal = 0;
  19. int8_t y_cal = 0;
  20. int8_t z_cal = 0;
  21.  
  22. //
  23. // TEMPERATURA (DS18B20)
  24. //
  25. byte i;
  26. byte present = 0;
  27. byte type_s;
  28. byte data[12];
  29. byte addr[8];
  30. float celsius, fahrenheit;
  31. int HighByte, LowByte, SignBit, Whole, Fract, TReading, Tc_100, FWhole;
  32.  
  33. //
  34. // ZMIENNE ITERACYJNE
  35. //
  36. int c = 1;
  37.  
  38. //
  39. // PRZYPISANIE PINOW
  40. //
  41. int buttonpin = 8;
  42. int buttonpin2 = 9;
  43.  
  44. void setup()
  45. {
  46. Serial.begin(9600);
  47. pinMode(buttonpin, INPUT_PULLUP);
  48. pinMode(buttonpin2, INPUT_PULLUP);
  49.  
  50. // AKCELEROMETR
  51. Wire.begin();
  52. Wire.beginTransmission(0x0A);
  53. Wire.write(0x22);
  54. Wire.write(range);
  55. Wire.write(0x20);
  56. Wire.write(0x05);
  57. Wire.endTransmission();
  58. AccelerometerCal();
  59.  
  60.  
  61. // WYSWIETLACZ
  62. lcd.begin(16,2);
  63. init_wyswietlacz();
  64. }
  65.  
  66. void init_wyswietlacz(){
  67. lcd.setCursor(6, 0);
  68. lcd.print("MOTH");
  69. delay(2000);
  70. lcd.clear();
  71. lcd.setCursor(0, 0);
  72. lcd.print("IWP Virtual");
  73. lcd.setCursor(0, 1);
  74. lcd.print("Engineering");
  75. delay(2000);
  76. lcd.clear();
  77. lcd.setCursor(0, 0);
  78. lcd.print("System created");
  79. lcd.setCursor(0, 1);
  80. lcd.print("by Haras & Enc.");
  81. delay(2000);
  82. lcd.clear();
  83. lcd.setCursor(0,0);
  84. lcd.print("Soft version:");
  85. lcd.setCursor(6,1);
  86. lcd.print(" 0.1a");
  87. delay(2000);
  88. lcd.clear();
  89. }
  90.  
  91. void AccelerometerCal(){
  92. Wire.beginTransmission(0x0A);
  93. Wire.write(0x04);
  94. Wire.endTransmission();
  95. Wire.requestFrom(0x0A,1);
  96. while(Wire.available())
  97. {
  98. Version[0] = Wire.read();
  99. }
  100. x_cal=(int8_t)Version[0]>>2;
  101.  
  102. Wire.beginTransmission(0x0A);
  103. Wire.write(0x06);
  104. Wire.endTransmission();
  105. Wire.requestFrom(0x0A,1);
  106. while(Wire.available())
  107. {
  108. Version[1] = Wire.read();
  109. }
  110. y_cal=(int8_t)Version[1]>>2;
  111.  
  112. Wire.beginTransmission(0x0A);
  113. Wire.write(0x08);
  114. Wire.endTransmission();
  115. Wire.requestFrom(0x0A,1);
  116. while(Wire.available())
  117. {
  118. Version[2] = Wire.read();
  119. }
  120. z_cal=(int8_t)Version[2]>>2;
  121. }
  122.  
  123. void AccelerometerInit()
  124. {
  125. Wire.beginTransmission(0x0A);
  126. Wire.write(0x04);
  127. Wire.endTransmission();
  128. Wire.requestFrom(0x0A,1);
  129. while(Wire.available())
  130. {
  131. Version[0] = Wire.read();
  132. }
  133. x_data=(int8_t)Version[0]>>2;
  134.  
  135. Wire.beginTransmission(0x0A);
  136. Wire.write(0x06);
  137. Wire.endTransmission();
  138. Wire.requestFrom(0x0A,1);
  139. while(Wire.available())
  140. {
  141. Version[1] = Wire.read();
  142. }
  143. y_data=(int8_t)Version[1]>>2;
  144.  
  145. Wire.beginTransmission(0x0A);
  146. Wire.write(0x08);
  147. Wire.endTransmission();
  148. Wire.requestFrom(0x0A,1);
  149. while(Wire.available())
  150. {
  151. Version[2] = Wire.read();
  152. }
  153. z_data=(int8_t)Version[2]>>2;
  154.  
  155. x=(float)(x_data- x_cal)/divi;
  156. y=(float)(y_data- y_cal)/divi;
  157. z=(float)(z_data- z_cal)/divi;
  158. }
  159.  
  160. void odczyt_temp(){
  161. if ( !ds.search(addr)) {
  162. ds.reset_search();
  163. delay(250);
  164. return;
  165. }
  166.  
  167. if (OneWire::crc8(addr, 7) != addr[7]) {
  168. return;
  169. }
  170. switch (addr[0]) {
  171. case 0x10:
  172. type_s = 1;
  173. break;
  174. case 0x28:
  175. type_s = 0;
  176. break;
  177. case 0x22:
  178. type_s = 0;
  179. break;
  180. default:
  181. return;
  182. }
  183.  
  184. ds.reset();
  185. ds.select(addr);
  186. ds.write(0x44, 1);
  187. present = ds.reset();
  188. ds.select(addr);
  189. ds.write(0xBE);
  190.  
  191.  
  192. for ( i = 0; i < 9; i++) {
  193. data[i] = ds.read();
  194. }
  195.  
  196. int16_t raw = (data[1] << 8) | data[0];
  197. if (type_s) {
  198. raw = raw << 3;
  199. if (data[7] == 0x10) {
  200. raw = (raw & 0xFFF0) + 12 - data[6];
  201. }
  202. }
  203. else {
  204. byte cfg = (data[4] & 0x60);
  205. if (cfg == 0x00) raw = raw & ~7;
  206. else if (cfg == 0x20) raw = raw & ~3;
  207. else if (cfg == 0x40) raw = raw & ~1;
  208. }
  209.  
  210. celsius = (float)raw / 16.0;
  211. fahrenheit = celsius * 1.8 + 32.0;
  212. }
  213.  
  214. void loop()
  215. {
  216.  
  217. switch(range)
  218. {
  219. case 0x00:divi=16; break;
  220. case 0x01:divi=8; break;
  221. case 0x02:divi=4; break;
  222. case 0x03:divi=2; break;
  223. default: Serial.println("range setting is Wrong,range:from 0to 3.Please check!");while(1);
  224. }
  225. AccelerometerInit();
  226.  
  227.  
  228. if (digitalRead(8) == HIGH)
  229. {
  230. delay(100);
  231. c = c+1;
  232. lcd.clear();
  233. if (c > 4) {
  234. c = 1;
  235. }
  236. }
  237.  
  238. if (digitalRead(9) == HIGH)
  239. {
  240. delay(100);
  241. lcd.clear();
  242. c=1;
  243.  
  244. }
  245.  
  246. switch(c){
  247.  
  248. case 1:
  249. lcd.setCursor(0,0);
  250. lcd.print("X=");
  251. lcd.print(x); // print the character
  252. lcd.setCursor (8,0);
  253.  
  254. lcd.print("Y=");
  255. lcd.print(y); // print the character
  256.  
  257. lcd.setCursor(6,1);
  258. lcd.print("Z="); // print the character
  259. lcd.print(z);
  260. break;
  261.  
  262. case 2:
  263. odczyt_temp();
  264. lcd.setCursor(0,0);
  265. lcd.print("Temperatura: ");
  266. lcd.setCursor(0,1);
  267. lcd.print(celsius);
  268. lcd.print(" C");
  269. lcd.setCursor(8,1);
  270. lcd.print(fahrenheit);
  271. lcd.print(" F");
  272. break;
  273.  
  274. case 3:
  275. lcd.setCursor(0,0);
  276. lcd.print("Co robi Jarek ?");
  277. break;
  278.  
  279. case 4:
  280. lcd.setCursor(0,0);
  281. lcd.print("Stoper");
  282. break;
  283.  
  284. }
  285.  
  286. delay(100);
  287.  
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement