Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.01 KB | None | 0 0
  1. #include <EEPROM.h>
  2. #include <MsTimer2.h>
  3. #include <button.h>
  4. #include <U8g2lib.h>
  5. char str[6] = {'3', '0', ' ', 'm', 'l', 0};
  6. #define button_1 A0
  7. #define button_2 A1
  8. #define button_3 A2
  9. #define button_4 A3
  10. #define button_5 A6
  11. #define button_6 A7
  12. #define IN1 2
  13. #define IN2 3
  14. #define angle0 470
  15. #define angle1 2400
  16. #define angle2 1975
  17. #define angle3 1650
  18. #define angle4 470//1650
  19. #define angle5 850 //1975
  20. #define angle6 1225 //2400
  21. Button encoderA (11, 4);
  22. Button encoderB (10, 4);
  23. Button encoderButton(12, 40);
  24.  
  25. long pos = 30;
  26. U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);
  27.  
  28. void timerInterrupt() {
  29. encoderA.filterAvarage();
  30. encoderB.filterAvarage();
  31. encoderButton.filterAvarage();
  32.  
  33. if ( encoderA.flagClick == true )
  34. {
  35. encoderA.flagClick = false;
  36. if ( encoderB.flagPress == false)
  37. {
  38. if (pos > 0)
  39. pos -= 5;
  40. }
  41. else
  42. {
  43. if (pos < 75)
  44. pos += 5;
  45. }
  46. EEPROM.write(0, pos);
  47. }
  48. }
  49.  
  50. boolean but7, but6, but3, but2, but1, but0;
  51. boolean autoFlag = false;
  52.  
  53. void setup() {
  54. but7 = but6 = but3 = but2 = but1 = but0 = false;
  55. Serial.begin(9600);
  56. delay(2000);
  57. u8g2.begin();
  58. u8g2.setFlipMode(180);
  59. pinMode(6, OUTPUT);
  60. MsTimer2::set(1, timerInterrupt);
  61. MsTimer2::start();
  62. ServoWrite(angle4);
  63. pos = EEPROM.read(0);
  64. autoFlag = EEPROM.read(1);
  65. }
  66.  
  67. bool check( int x )
  68. {
  69. return x < 100 ? 1 : 0;
  70. }
  71.  
  72. void ServoWrite(int an)
  73. {
  74. for (int h = 0; h < an / 100; h++)
  75. {
  76. digitalWrite(6, HIGH);
  77. delayMicroseconds(an); // 1450
  78. digitalWrite(6, LOW);
  79. delayMicroseconds(20000 - an);
  80. }
  81. }
  82.  
  83. void razliv1() {
  84. int flag = 1;
  85.  
  86. if (check(analogRead(button_6))) {
  87. if (but7) {
  88. ServoWrite(angle1);
  89. delay(200);
  90. double st = millis();
  91.  
  92. analogWrite(IN1, 0);
  93. analogWrite(IN2, 255);
  94.  
  95. while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_6))) {
  96. int progr = round((millis() - st - 1000 * flag) / 155);
  97. progr = progr < 0 ? 0 : progr;
  98. str[1] = (progr % 10) + '0';
  99. str[0] = progr / 10 + '0';
  100. u8g2.clearBuffer();
  101. u8g2.setFont(u8g2_font_logisoso26_tr);
  102. u8g2.drawStr(8, 29, str);
  103. u8g2.sendBuffer();
  104. }
  105. analogWrite(IN1, 255);
  106. analogWrite(IN2, 0);
  107. delay(200);
  108. analogWrite(IN1, 0);
  109. delay(100);
  110. flag = 0;
  111. but7 = false;
  112. ServoWrite(angle0);
  113. }
  114. }
  115. else
  116. but7 = true;
  117.  
  118. if (check(analogRead(button_5))) {
  119. if (but6) {
  120. ServoWrite(angle2);
  121. delay(200);
  122. double st = millis();
  123.  
  124. analogWrite(IN1, 0);
  125. analogWrite(IN2, 255);
  126.  
  127. while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_5))) {
  128. int progr = round((millis() - st - 1000 * flag) / 155);
  129. progr = progr < 0 ? 0 : progr;
  130. str[1] = (progr % 10) + '0';
  131. str[0] = progr / 10 + '0';
  132. u8g2.clearBuffer();
  133. u8g2.setFont(u8g2_font_logisoso26_tr);
  134. u8g2.drawStr(8, 29, str);
  135. u8g2.sendBuffer();
  136. }
  137. analogWrite(IN1, 255);
  138. analogWrite(IN2, 0);
  139. delay(200);
  140. analogWrite(IN1, 0);
  141. delay(100);
  142. flag = 0;
  143. but6 = false;
  144. ServoWrite(angle0);
  145. }
  146. }
  147. else
  148. but6 = true;
  149.  
  150. if (check(analogRead(button_4))) {
  151. if (but3) {
  152. ServoWrite(angle3);
  153. delay(200);
  154. double st = millis();
  155.  
  156. analogWrite(IN1, 0);
  157. analogWrite(IN2, 255);
  158.  
  159. while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_4))) {
  160. int progr = round((millis() - st - 1000 * flag) / 155);
  161. progr = progr < 0 ? 0 : progr;
  162. str[1] = (progr % 10) + '0';
  163. str[0] = progr / 10 + '0';
  164. u8g2.clearBuffer();
  165. u8g2.setFont(u8g2_font_logisoso26_tr);
  166. u8g2.drawStr(8, 29, str);
  167. u8g2.sendBuffer();
  168. }
  169. analogWrite(IN1, 255);
  170. analogWrite(IN2, 0);
  171. delay(200);
  172. analogWrite(IN1, 0);
  173. delay(100);
  174. flag = 0;
  175. but3 = false;
  176. ServoWrite(angle0);
  177. }
  178. }
  179. else
  180. but3 = true;
  181.  
  182. if (check(analogRead(button_3))) {
  183. if (but2) {
  184. ServoWrite(angle4);
  185. delay(200);
  186. double st = millis();
  187.  
  188. analogWrite(IN1, 0);
  189. analogWrite(IN2, 255);
  190.  
  191. while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_3))) {
  192. int progr = round((millis() - st - 1000 * flag) / 155);
  193. progr = progr < 0 ? 0 : progr;
  194. str[1] = (progr % 10) + '0';
  195. str[0] = progr / 10 + '0';
  196. u8g2.clearBuffer();
  197. u8g2.setFont(u8g2_font_logisoso26_tr);
  198. u8g2.drawStr(8, 29, str);
  199. u8g2.sendBuffer();
  200. }
  201. analogWrite(IN1, 255);
  202. analogWrite(IN2, 0);
  203. delay(200);
  204. analogWrite(IN1, 0);
  205. delay(100);
  206. flag = 0;
  207. but2 = false;
  208. ServoWrite(angle0);
  209. }
  210. }
  211. else
  212. but2 = true;
  213.  
  214. if (check(analogRead(button_2))) {
  215. if (but1) {
  216. ServoWrite(angle5);
  217. delay(200);
  218. double st = millis();
  219.  
  220. analogWrite(IN1, 0);
  221. analogWrite(IN2, 255);
  222.  
  223. while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_2))) {
  224. int progr = round((millis() - st - 1000 * flag) / 155);
  225. progr = progr < 0 ? 0 : progr;
  226. str[1] = (progr % 10) + '0';
  227. str[0] = progr / 10 + '0';
  228. u8g2.clearBuffer();
  229. u8g2.setFont(u8g2_font_logisoso26_tr);
  230. u8g2.drawStr(8, 29, str);
  231. u8g2.sendBuffer();
  232. }
  233. analogWrite(IN1, 255);
  234. analogWrite(IN2, 0);
  235. delay(200);
  236. analogWrite(IN1, 0);
  237. delay(100);
  238. flag = 0;
  239. but1 = false;
  240. ServoWrite(angle0);
  241. }
  242. }
  243. else
  244. but1 = true;
  245.  
  246. if (check(analogRead(button_1))) {
  247. if (but0) {
  248. ServoWrite(angle6);
  249. delay(200);
  250. double st = millis();
  251.  
  252. analogWrite(IN1, 0);
  253. analogWrite(IN2, 255);
  254.  
  255. while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_1))) {
  256. int progr = round((millis() - st - 1000 * flag) / 155);
  257. progr = progr < 0 ? 0 : progr;
  258. str[1] = (progr % 10) + '0';
  259. str[0] = progr / 10 + '0';
  260. u8g2.clearBuffer();
  261. u8g2.setFont(u8g2_font_logisoso26_tr);
  262. u8g2.drawStr(8, 29, str);
  263. u8g2.sendBuffer();
  264. }
  265. analogWrite(IN1, 255);
  266. analogWrite(IN2, 0);
  267. delay(200);
  268. analogWrite(IN1, 0);
  269. delay(100);
  270. flag = 0;
  271. but0 = false;
  272. ServoWrite(angle0);
  273. }
  274. }
  275. else
  276. but0 = true;
  277.  
  278. if (flag == 0) {
  279. analogWrite(IN1, 255);
  280. analogWrite(IN2, 0);
  281. delay(1450);
  282. analogWrite(IN1, 0);
  283. }
  284. }
  285.  
  286. void razliv2() {
  287.  
  288. int flag = 1;
  289.  
  290. if (check(analogRead(button_6)))
  291. {
  292. ServoWrite(angle1);
  293. delay(200);
  294. double st = millis();
  295.  
  296. analogWrite(IN1, 0);
  297. analogWrite(IN2, 255);
  298.  
  299. while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_6))) {
  300. int progr = round((millis() - st - 1000 * flag) / 155);
  301. progr = progr < 0 ? 0 : progr;
  302. str[1] = (progr % 10) + '0';
  303. str[0] = progr / 10 + '0';
  304. u8g2.clearBuffer();
  305. u8g2.setFont(u8g2_font_logisoso26_tr);
  306. u8g2.drawStr(8, 29, str);
  307. u8g2.sendBuffer();
  308. }
  309. analogWrite(IN1, 255);
  310. analogWrite(IN2, 0);
  311. delay(200);
  312. analogWrite(IN1, 0);
  313. delay(100);
  314. flag = 0;
  315. ServoWrite(angle0);
  316. }
  317.  
  318. if (check(analogRead(button_5)))
  319. {
  320. ServoWrite(angle2);
  321. delay(200);
  322. double st = millis();
  323.  
  324. analogWrite(IN1, 0);
  325. analogWrite(IN2, 255);
  326. while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_5))) {
  327. int progr = round((millis() - st - 1000 * flag) / 155);
  328. progr = progr < 0 ? 0 : progr;
  329. str[1] = (progr % 10) + '0';
  330. str[0] = progr / 10 + '0';
  331. u8g2.clearBuffer();
  332. u8g2.setFont(u8g2_font_logisoso26_tr);
  333. u8g2.drawStr(8, 29, str);
  334. u8g2.sendBuffer();
  335. }
  336. analogWrite(IN1, 255);
  337. analogWrite(IN2, 0);
  338. delay(200);
  339. analogWrite(IN1, 0);
  340. delay(100);
  341. flag = 0;
  342. ServoWrite(angle0);
  343. }
  344.  
  345. if (check(analogRead(button_4)))
  346. {
  347. ServoWrite(angle3);
  348. delay(200);
  349. double st = millis();
  350.  
  351. analogWrite(IN1, 0);
  352. analogWrite(IN2, 255);
  353. while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_4))) {
  354. int progr = round((millis() - st - 1000 * flag) / 155);
  355. progr = progr < 0 ? 0 : progr;
  356. str[1] = (progr % 10) + '0';
  357. str[0] = progr / 10 + '0';
  358. u8g2.clearBuffer();
  359. u8g2.setFont(u8g2_font_logisoso26_tr);
  360. u8g2.drawStr(8, 29, str);
  361. u8g2.sendBuffer();
  362. }
  363. analogWrite(IN1, 255);
  364. analogWrite(IN2, 0);
  365. delay(200);
  366. analogWrite(IN1, 0);
  367. delay(100);
  368. flag = 0;
  369. ServoWrite(angle0);
  370. }
  371.  
  372. if (check(analogRead(button_3)))
  373. {
  374. ServoWrite(angle4);
  375. delay(200);
  376. double st = millis();
  377.  
  378. analogWrite(IN1, 0);
  379. analogWrite(IN2, 255);
  380. while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_3))) {
  381. int progr = round((millis() - st - 1000 * flag) / 155);
  382. progr = progr < 0 ? 0 : progr;
  383. str[1] = (progr % 10) + '0';
  384. str[0] = progr / 10 + '0';
  385. u8g2.clearBuffer();
  386. u8g2.setFont(u8g2_font_logisoso26_tr);
  387. u8g2.drawStr(8, 29, str);
  388. u8g2.sendBuffer();
  389. }
  390. analogWrite(IN1, 255);
  391. analogWrite(IN2, 0);
  392. delay(200);
  393. analogWrite(IN1, 0);
  394. delay(100);
  395. flag = 0;
  396. ServoWrite(angle0);
  397. }
  398.  
  399. if (check(analogRead(button_2)))
  400. {
  401. ServoWrite(angle5);
  402. delay(200);
  403. double st = millis();
  404.  
  405. analogWrite(IN1, 0);
  406. analogWrite(IN2, 255);
  407. while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_2))) {
  408. int progr = round((millis() - st - 1000 * flag) / 155);
  409. progr = progr < 0 ? 0 : progr;
  410. str[1] = (progr % 10) + '0';
  411. str[0] = progr / 10 + '0';
  412. u8g2.clearBuffer();
  413. u8g2.setFont(u8g2_font_logisoso26_tr);
  414. u8g2.drawStr(8, 29, str);
  415. u8g2.sendBuffer();
  416. }
  417. analogWrite(IN1, 255);
  418. analogWrite(IN2, 0);
  419. delay(200);
  420. analogWrite(IN1, 0);
  421. delay(100);
  422. flag = 0;
  423. ServoWrite(angle0);
  424. }
  425.  
  426. if (check(analogRead(button_1)))
  427. {
  428. ServoWrite(angle6);
  429. delay(200);
  430. double st = millis();
  431.  
  432. analogWrite(IN1, 0);
  433. analogWrite(IN2, 255);
  434. while (millis() - st <= (155 * pos + 1000 * flag) && check(analogRead(button_1))) {
  435. int progr = round((millis() - st - 1000 * flag) / 155);
  436. progr = progr < 0 ? 0 : progr;
  437. str[1] = (progr % 10) + '0';
  438. str[0] = progr / 10 + '0';
  439. u8g2.clearBuffer();
  440. u8g2.setFont(u8g2_font_logisoso26_tr);
  441. u8g2.drawStr(8, 29, str);
  442. u8g2.sendBuffer();
  443. }
  444. analogWrite(IN1, 255);
  445. analogWrite(IN2, 0);
  446. delay(200);
  447. analogWrite(IN1, 0);
  448. delay(100);
  449. flag = 0;
  450. ServoWrite(angle0);
  451. }
  452.  
  453.  
  454.  
  455. if (flag == 0) {
  456. analogWrite(IN1, 255);
  457. analogWrite(IN2, 0);
  458. delay(1450);
  459. analogWrite(IN1, 0);
  460. }
  461.  
  462. }
  463.  
  464. void loop() {
  465.  
  466. if (encoderButton.flagClick == true )
  467. {
  468. encoderButton.flagClick = false;
  469. if (pos == 0 || pos == 75)
  470. autoFlag = !autoFlag;
  471. else
  472. if (!autoFlag)
  473. razliv2();
  474. EEPROM.write(1, autoFlag);
  475. }
  476.  
  477. if (autoFlag && pos != 0 && pos != 75)
  478. razliv1();
  479.  
  480. str[1] = (pos % 10) + '0';
  481. str[0] = pos / 10 + '0';
  482. u8g2.clearBuffer();
  483. u8g2.setFont(u8g2_font_logisoso26_tr);
  484. //u8g2.setFlipMode(180);
  485.  
  486. if (pos != 0 && pos != 75)
  487. u8g2.drawStr(8, 29, str);
  488.  
  489. else if (autoFlag)
  490. u8g2.drawStr(-2, 29, "Auto On");
  491. else
  492. u8g2.drawStr(-2, 29, "Auto Off");
  493.  
  494. u8g2.sendBuffer();
  495.  
  496. Serial.println();
  497. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement