Advertisement
Guest User

Untitled

a guest
Apr 28th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.56 KB | None | 0 0
  1. #include <LiquidCrystal.h>// Fuegt die Libary ein, das man den LCD Code nicht schreiben muss.
  2. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Sagt dem LCD Code welche Pins was machen.
  3.  
  4. #define rightRotation 10 //Definiert den Output für die rechte Richtung.
  5. #define leftRotation 7 //Definiert den Output für die linke Richtung.
  6. #define pumpIn 8 //Definiert den Output für das Aufpumpen.
  7. #define pumpOut 9 //Definiert den Output für das Abpumpen
  8. #define befuellung 6 //Defeniert den InputPin für befüllung
  9. #define automatic 13 //Definiert den Input für den Automatik Modus
  10. //Analog
  11. #define leftButton A0 //Definiert den Input für den manuellLinks Button
  12. #define rightButton A1 //Definiert den Input für den manuellRechts Button
  13. #define manuellPumpOut A2 //Definiert den Input für den manuellAufpumpen Button
  14. #define manuellPumpIn A3 //Definiert den Input für den manuellAufpumpen Button
  15. #define startButton A4 //Defeniert den Input für den Start Button
  16. #define pressure A5 //Definiert den analogen Input für den Druck
  17. #define programm_button A6 //Programm Taster
  18. #define round_sensor A7 //Umrndungssensor
  19. //Alle anderen Variablen
  20. String mode = ""; //String für den Modus
  21. int Schritt = 0;
  22. const int numReadings = 10; //Anzahl der Zählung beim druck ein lessen
  23. int readings[numReadings]; // Ein Array mit den lesungen.
  24. int readIndex = 0; // nummer der derzeitigen Lesung.
  25. const String startSentence1 = " Traubenpresse"; // Start Zeile auf dem LCD Display, nicht änderbar im Code auser in dieser Zeile
  26. const String startSentence2 = " made by HTL 16"; // ---//---
  27. unsigned long current = 0; //Zeit Variable
  28. unsigned long lastTime = 0; //Zeit zum vergleichen
  29. unsigned long lastDisplay = 0; //---//---
  30. long updateInt = 250; //Intervall für das Display
  31. int total = 0;
  32. int druckinmv = 0;
  33. int druck = 0;
  34. boolean sx = false;
  35. boolean sy = false;
  36. boolean sz = false;
  37. boolean sVB = false;
  38. boolean sB = false;
  39. boolean pBB = false;
  40. String row1 = "";
  41. String row2 = "";
  42. //Druck
  43.  
  44. //analoge werte
  45. int stB = 0;
  46. int maPIB = 0;
  47. int maPOB = 0;
  48. int uS = 0;
  49. int pB = 0;
  50. //Programmwerte
  51. int programm = 0;
  52. int programm_anzahl = 4;
  53. boolean programm_ready = false;
  54. int real_program_druch = 0;
  55. int real_count = 0;
  56. boolean real_count_b = false;
  57. //Erste mal Absaugen
  58. int dru = -30;
  59. int umd = 7;
  60. //Inprogramm Werte
  61. int durchgaenge = 0;
  62. int auf_druck[20];
  63. int hold_druck[20];
  64. int ab_druck[20];
  65. int umdrehungen[20];;
  66. //Pfeil erstellen.
  67. byte Arrow[8] = {
  68. 0b00000,
  69. 0b00100,
  70. 0b00110,
  71. 0b11111,
  72. 0b11111,
  73. 0b00110,
  74. 0b00100,
  75. 0b00000
  76. };
  77.  
  78. void setup() {
  79. //Hier ist das vorbereiten des druckzählers!
  80.  
  81. //ENDE
  82. //ANFANG LCD DISPLAY
  83. lcd.begin(16, 2);
  84. lcd.createChar(0, Arrow);
  85. //ENDE
  86. //ANFANG PINMODE
  87. pinMode(rightRotation, OUTPUT);
  88. pinMode(leftRotation, OUTPUT);
  89. pinMode(pumpIn, OUTPUT);
  90. pinMode(pumpOut, OUTPUT);
  91. pinMode(pressure, INPUT);
  92. pinMode(automatic, INPUT);
  93. pinMode(rightButton, INPUT);
  94. pinMode(leftButton, INPUT);
  95. pinMode(befuellung, INPUT);
  96. pinMode(startButton, INPUT);
  97. pinMode(manuellPumpIn, INPUT);
  98. pinMode(manuellPumpOut, INPUT);
  99. pinMode(programm_button, INPUT);
  100. pinMode(round_sensor, INPUT);
  101. //Programm Taster
  102. //ENDE
  103. //ANFANG LCDSIPLAY ANZEIGEN
  104. lcd.print(startSentence1);
  105. lcd.setCursor(0, 1);
  106. lcd.print(startSentence2);
  107. lcd.setCursor(0, 0);
  108. delay(5000);
  109. lcd.clear();
  110. //ENDE
  111. }
  112.  
  113. void loop() {
  114. //ZEIT SEIT DEM STARTEN
  115. current = millis();
  116. //ENDE
  117. //----- Analog Daten einlesen ----
  118. for (int i = 0; i < numReadings; i++) { //Schleife geht 0 - numReadings durch
  119. if (i == 9) {
  120. readings[9] = analogRead(pressure); //Wenn man beim letzten angekommen ist lest er die daten ein
  121. } else {
  122. readings[i] = readings[i + 1]; //Setzt ein Teil des Arrays mit dem Wert des vorherigen
  123. }
  124. }
  125. for (int i = 0; i < numReadings; i++) { //Zählt alle Readings zusammen
  126. total = total + readings[i]; //Addiert alle Werte an einander.
  127. }
  128. druckinmv = (total / numReadings); //Rechnet den mittelwert aus und nutzt den angleichungsfaktor :
  129. druck = (map(druckinmv, 122, 1023, -100, 1000));
  130. delay(2); //Sicherheitshalber ;)
  131. //ENDE
  132. //VARIABLEN DER ANALOGENPINS EINLESEN
  133. stB = analogRead(startButton);
  134. maPIB = analogRead(manuellPumpIn);
  135. maPOB = analogRead(manuellPumpOut);
  136. uS = analogRead(round_sensor);
  137. pB = analogRead(programm_button);
  138. //ENDE
  139. //----- Mode wechseln ----
  140. if (digitalRead(automatic) == HIGH) { //ABFRAGEN OB AUTOMATIC ISTT
  141. mode = "A";
  142. if (sx == false) {
  143. sx = true;
  144. reset();
  145. sy = false;
  146. sz = false;
  147. }
  148. } else if (digitalRead(befuellung) == HIGH) { //ABFRAGEN OB BEFüLLUNG ISTT
  149. mode = "B";
  150. if (sy == false) {
  151. sy = true;
  152. reset();
  153. sx = false;
  154. sz = false;
  155. }
  156. } else if (digitalRead(automatic) == LOW && digitalRead(befuellung) == LOW) { //ABFRAGEN OB MANUELL ISTT
  157. mode = "M";
  158. row1 = "Manueller Modus";
  159. row2 = " ";
  160. if (sz == false) {
  161. sz = true;
  162. reset();
  163. sx = false;
  164. sy = false;
  165. }
  166. }
  167. //------- Ende -------------
  168. //MODUS VORBEREITEN UND AUSFüHRUNG
  169. //MODUS MANUELL
  170. if (mode == "M") {
  171. programm = true;
  172. //red B. maPIB|white B. maPOB
  173. if (maPIB >= 1000) {
  174. row2 = "Aufpumpen";
  175. }
  176. if (maPOB >= 1000) {
  177. row2 = "Abpumpen";
  178. }
  179. if (digitalRead(rightButton) == HIGH) {
  180. row2 = "Rechtsdrehung";
  181. }
  182. if (digitalRead(leftButton) == HIGH) {
  183. row2 = "Linksdrehung";
  184. }
  185. if (stB >= 1000) {
  186. if (digitalRead(rightButton) == HIGH) {
  187. digitalWrite(leftRotation, LOW);
  188. digitalWrite(rightRotation, HIGH);
  189. row2 = "Rechtsdrehung";
  190. } else if (digitalRead(leftButton) == HIGH) {
  191. digitalWrite(rightRotation, LOW);
  192. digitalWrite(leftRotation, HIGH);
  193. row2 = "Linksdrehung";
  194. } else if (maPIB >= 1000) {
  195. digitalWrite(pumpOut, LOW);
  196. digitalWrite(pumpIn, HIGH);
  197. row2 = "Aufpumpen";
  198. } else if (maPOB >= 1000) {
  199. digitalWrite(pumpIn, LOW);
  200. digitalWrite(pumpOut, HIGH);
  201. row2 = "Abpumpen";
  202. } else {
  203. row2 = "";
  204. }
  205. } else {
  206. digitalWrite(pumpIn, LOW);
  207. digitalWrite(rightRotation, LOW);
  208. digitalWrite(leftRotation, LOW);
  209. digitalWrite(pumpOut, LOW);
  210. }
  211. }
  212. //ENDE
  213. //ANFANG BEFüLLUNG
  214. if (mode == "B") {
  215. programm = true;
  216. if (stB >= 1000) {
  217. row1 = "Fuellmodus";
  218. row2 = "Rechtsdrehend";
  219. digitalWrite(rightRotation, HIGH);
  220. sVB = false;
  221. }
  222. if (sVB == true) {
  223. row1 = "Fuellmodus";
  224. row2 = "Stillstand";
  225. digitalWrite(rightRotation, LOW);
  226. }
  227. }
  228. //ENDE
  229. //ANFANG AUTOMATIC
  230. if (mode == "A") {
  231. //Programm wahl
  232. if (Schritt == 0) {
  233. if (pB >= 1000 && pBB == false) {
  234. programm++;
  235. pBB = true;
  236. } else {
  237. pBB = false;
  238. }
  239. if (stB >= 1000) {
  240. programm = true;
  241. setProgramm();
  242. Schritt = 999;
  243. digitalWrite(pumpOut, HIGH);
  244. sB = true;
  245. } else {
  246. sB = false;
  247. programm = false;
  248. }
  249. row1 = " Programm " + programm;
  250. if (programm >= programm_anzahl) {
  251. row2 = " Programm 1";
  252. } else {
  253. row2 = " Programm " + programm + 1;
  254. }
  255.  
  256. } else if (Schritt == 999) {
  257. row1 = "Vorzyklus!";
  258. row2 = "Abpumpen " + String(druck) + "KPa";
  259. if (druck <= dru) {
  260. digitalWrite(pumpOut, LOW);
  261. digitalWrite(leftRotation, HIGH);
  262. Schritt == 1000;
  263. }
  264. } else if (Schritt == 1000) {
  265. row1 = "Vorzyklus!";
  266. row2 = "Umdrehungen - " + real_count;
  267. if (uS >= 1000 && real_count_b == false) {
  268. real_count++;
  269. real_count_b == true;
  270. } else {
  271. real_count_b == false;
  272. }
  273. if (real_count > umd) {
  274. digitalWrite(leftRotation, LOW);
  275. real_count = 0;
  276. Schritt == 1001;
  277. }
  278. } else if ( Schritt == 1001) {
  279. Schritt == 1;
  280. real_program_druch = 1;
  281. }
  282. if (Schritt == 1 + (4 * real_program_druch)) {
  283.  
  284. int d = auf_druck[real_program_druch - 1];
  285. if (d > 0) {
  286. digitalWrite(pumpIn, HIGH);
  287. row1 = real_program_druch + "DG. Aufpumpen";
  288. row2 = String(druck) + "kPa > " + String(d) + "kPa";
  289. if (druck > d) {
  290. digitalWrite(pumpOut, LOW);
  291. Schritt++;
  292. lastTime = current;
  293. }
  294. } else {
  295. digitalWrite(pumpOut, HIGH);
  296. row1 = real_program_druch + "DG. Abpumpen";
  297. row2 = String(druck) + "kPa < " + String(d) + "kPa";
  298. if (druck < d) {
  299. digitalWrite(pumpOut, LOW);
  300. Schritt++;
  301. lastTime = current;
  302. }
  303. }
  304. }
  305. if (Schritt == 2 + (4 * real_program_druch)) {
  306. int z = hold_druck[real_program_druch - 1];
  307. row1 = real_program_druch + "DG. Halten";
  308. row2 = ((current - lastTime) / 1000) + " > " + z;
  309. if (current - lastTime >= (z * 1000)) {
  310. Schritt++;
  311. }
  312. }
  313. if (Schritt == 3 + (4 * real_program_druch)) {
  314. int d = ab_druck[real_program_druch - 1];
  315. if (d > 0) {
  316. digitalWrite(pumpIn, HIGH);
  317. row1 = real_program_druch + "DG. Aufpumpen";
  318. row2 = String(druck) + "kPa > " + String(d) + "kPa";
  319. if (druck > d) {
  320. digitalWrite(pumpOut, LOW);
  321. Schritt++;
  322.  
  323. }
  324. } else {
  325. digitalWrite(pumpOut, HIGH);
  326. row1 = real_program_druch + "DG. Abpumpen";
  327. row2 = String(druck) + "kPa < " + String(d) + "kPa";
  328. if (druck < d) {
  329. digitalWrite(pumpOut, LOW);
  330. Schritt++;
  331. }
  332. }
  333. }
  334. if ( Schritt == 4 + (4 * real_program_druch)) {
  335. row1 = real_program_druch + "DG. Drehn";
  336. row2 = real_count + " - " + umd;
  337. if (uS >= 1000 && real_count_b == false) {
  338. real_count++;
  339. real_count_b == true;
  340. } else {
  341. real_count_b == false;
  342. }
  343. if (real_count > umd) {
  344. digitalWrite(leftRotation, LOW);
  345. Schritt++;
  346. real_program_druch++;
  347. if (real_program_druch > durchgaenge) {
  348. Schritt == 777;
  349. }
  350. }
  351. }
  352. if (Schritt == 777) {
  353. digitalWrite(pumpIn, LOW);
  354. digitalWrite(rightRotation, LOW);
  355. digitalWrite(leftRotation, LOW);
  356. digitalWrite(pumpOut, LOW);
  357. row1 = "Fertig!";
  358. row2 = "Ausleeren";
  359. }
  360. }
  361. // Schritte des Automatischen Modus
  362. //row1 & row2 sind die Variablen die man verändert, diese werden dann jedes mal beim Disdaply angezeigt. :)
  363. // Ende
  364. //--------- Display Update ------------------
  365. if (current - lastDisplay >= updateInt) { //Zeit immer wenn die Zeit abgelaufen ist.
  366. if (programm_ready) {
  367. lcd.clear(); //Löscht das LCD Display
  368. lcd.setCursor(0, 0); //Setzt den Cursor auf 1 Reihe 1 Zeichen
  369. lcd.print(row1); //Schreibt die erste Reihe
  370. lcd.setCursor(0, 1); //Setzt den Cursor auf 2 Reihe 1 Zeichen
  371. lcd.print(row2); //Schreibt die Zweite Reihe
  372. lastDisplay = current; //Setzt die Variable für die Zeit schaltung.
  373. } else {
  374. lcd.clear(); //Löscht das LCD Display
  375. lcd.setCursor(0, 0); //Setzt den Cursor auf 1 Reihe 1 Zeichen
  376. lcd.write((byte)0);
  377. lcd.print(row1); //Schreibt die erste Reihe
  378. lcd.setCursor(0, 1); //Setzt den Cursor auf 2 Reihe 1 Zeichen
  379. lcd.print(row2); //Schreibt die Zweite Reihe
  380. lastDisplay = current; //Setzt die Variable für die Zeit schaltung.
  381. }
  382.  
  383. }
  384. //---------- Ende ---------------
  385. }
  386. void reset() {
  387. //RESETTET ALLES :)
  388. sB = false;
  389. sVB = true;
  390. Schritt = 1;
  391. }
  392.  
  393. void setProgramm() {
  394.  
  395. /*
  396. dru = <>; //Druck erstes mal
  397. umd = <>; //Umdrehungen erstes mal
  398. durchgaenge = <>; Anzahl der durchgaenge
  399. auf_druck = <>; //Druck beim aufpumpen bitte ein array mit den Zahlen für jeden Druchgang
  400. hold_druck = <>0; //Zeit zum halten des Drucks bitte ein array mit den Zahlen für jeden Druchgang
  401. ab_druck = <>; //ABpumpdruck bitte ein array mit den Zahlen für jeden Druchgang
  402. umdrehungen = <>; //Umdrehenung bitte ein array mit den Zahlen für jeden Druchgang
  403.  
  404. Beispiel:
  405.  
  406. dru = -30;
  407. umd = 7;
  408. durchgaenge = 5;
  409.  
  410. int auf_druck_x[] = {20,20,60,60,120};
  411. int hold_druck_x[] = {150,150,150,150,240};
  412. int ab_druck_x[] = {-30,-30,-30,-30,-30};
  413.  
  414. for(int i = 0; i < durchgaenge; i++){
  415. auf_druck[i] = auf_druck_x[i];
  416. hold_druck[i] = hold_druck_x[i];
  417. ab_druck[i] = ab_druck_x[i];
  418. }
  419.  
  420. */
  421.  
  422. //Programm 1
  423. if (programm == 1) {
  424.  
  425. dru = -30;
  426. umd = 7;
  427. durchgaenge = 5;
  428.  
  429. int auf_druck_x[] = {20, 20, 60, 60, 120};
  430. int hold_druck_x[] = {150, 150, 150, 150, 240};
  431. int ab_druck_x[] = { -30, -30, -30, -30, -30};
  432.  
  433. for (int i = 0; i < durchgaenge; i++) {
  434. auf_druck[i] = auf_druck_x[i];
  435. hold_druck[i] = hold_druck_x[i];
  436. ab_druck[i] = ab_druck_x[i];
  437. }
  438.  
  439. }
  440. //Programm 2
  441.  
  442. //Programm 3
  443.  
  444. //Programm 4
  445. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement