antonaciantonio

Untitled

Jul 24th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.40 KB | None | 0 0
  1. [code]
  2. /*
  3. * timbratrice: vers. 4.0
  4. * movimenti carrello avanti e indietro
  5. * movimenti timbro alto e basso
  6. * comandati da elettrovalvole collegate a modulo relé
  7. * data: 18/05/2018
  8. *
  9. *---------------------------------------------------------------------
  10. * NOTA:
  11. * =====
  12. * i moduli relè (reperibili su amazon o altrisiti)
  13. * normalmente attivano l'uscita quando il pin di controllo va a massa
  14. *---------------------------------------------------------------------
  15. * finecorsa avanti, indietro
  16. *
  17. * NOTA:
  18. * =====
  19. * finecorsa di tipo microswitch con contatto che chiude a massa
  20. *----------------------------------------------------------------------
  21. * selettore a due posizioni timbro singolo/ripetuto
  22. *
  23. * NOTA:
  24. * =====
  25. * selettore posizione 1 scollegato! (=+5V) = timbro singolo
  26. * selettore posizione 2 chiude il contatto a massa = timbro ripetuto
  27. *---------------------------------------------------------------------
  28. * pulsanti avvio e stop
  29. *
  30. * NOTA:
  31. * =====
  32. * pulsanti chiudono a massa
  33. *---------------------------------------------------------------------
  34. * 4 potenziometri da 10K collegati tra +5V e gnd di arduino
  35. * con centrale su A0, A1, A2 e A3 per variare tempi nelle varie fasi
  36. *---------------------------------------------------------------------
  37. * Aggiunta 18/5/2018
  38. * selettore a due posizioni partenza timbratrice
  39. *
  40. * NOTA:
  41. * =====
  42. * selettore posizione 1 scollegato! (=+5V) = partenza avanti
  43. * selettore posizione 2 chiude il contatto a massa = partenza indietro
  44. * aggiunte funzioni:
  45. * qualeStart() seleziona il ciclo da eseguire per la timbratura
  46. * e predispone la macchina nel modo corretto
  47. * eseguiTimbroDue() esegue la timbratura con partenza indietro alto
  48. * ---------------------------------------------------------------------
  49. * NOTA2:
  50. * ======
  51. * se il modulo relè attiva l'uscita con ingresso alto bisogna
  52. * cambiare releAttivato da LOW ad HIGH e
  53. * cambiare releDisattivato da HIGH a LOW
  54. *
  55. */
  56.  
  57. //___________________________________________________________//
  58. // ************* logica funzionamento relé ****************//
  59. //-----------------------------------------------------------//
  60. // a seconda dell'uscita relé bassa o alta
  61. // commentare le righe appropriate
  62.  
  63. //tipo1 standard pin basso (0V)= uscita attivata
  64. const byte releAttivato = LOW;
  65. const byte releDisattivato = HIGH;
  66.  
  67. //tipo2 pin Alto (5V) = uscita attivata
  68. //const byte releAttivato = HIGH;
  69. //const byte releDisattivato = LOW;
  70. //___________________________________________________________//
  71. // *********** fine logica funzionamento relé *************//
  72. //-----------------------------------------------------------//
  73.  
  74. //___________________________________________________________//
  75. // ********** collegamenti fisici con Arduino *************//
  76. //-----------------------------------------------------------//
  77. // collegamenti pin arduino con contatti relé
  78. const byte releIndietro = 3;
  79. const byte releBasso = 4;
  80.  
  81. // collegamenti pin arduino con contatti finecorsa
  82. const byte fcAvanti = 6;
  83. const byte fcIndietro = 7;
  84.  
  85. const byte potBassoIndietro = A0;
  86. const byte potBassoAvanti = A1;
  87. const byte potAltoAvanti = A2;
  88. const byte potAltoIndietro = A3;
  89.  
  90.  
  91. //collegamento pin arduino con selettore a due posizioni timbro singolo/multiplo
  92. const byte timbroSingolo = 10;
  93.  
  94. //collegamento pin Arduino con selettore a due posizioni partenza avanti/indietro
  95. const byte StartAvantiIndietro = 9;
  96.  
  97. // collegamento pin arduino pulsanti marcia e arresto
  98. const byte pulMarcia = 11;
  99. const byte pulStop = 2;
  100. //_________________________________________________________//
  101. // ******** fine collegamenti fisici con Arduino **********//
  102. //---------------------------------------------------------//
  103.  
  104. //_________________________________________________________//
  105. // ************ variabili usate dal programma *************//
  106. //---------------------------------------------------------//
  107. int pausa = 1000; // pausa per commutazioni relè alto/basso 1 secondo
  108. byte numTimbri = 0; // se = 1 timbro singolo se = 2 multipla
  109. byte startAvanti = 0; // se 1 posizione start avanti se 2 posizione start indietro
  110. bool startPremuto = false; // flag pressione pulsante marcia
  111. bool startCiclo = false; // flag partenza timbratura
  112. volatile bool fermaCiclo = false; // flag di controllo stop premuto
  113.  
  114. int tempoPotBI, tempoPotBA, tempoPotAI, tempoPotAA;
  115.  
  116. void setup() {
  117. Serial.begin(9600);
  118.  
  119.  
  120. // pinMode(fcBasso, INPUT_PULLUP);
  121. // pinMode(fcAlto, INPUT_PULLUP);
  122. pinMode(fcAvanti, INPUT_PULLUP);
  123. pinMode(fcIndietro, INPUT_PULLUP);
  124. pinMode(pulMarcia, INPUT_PULLUP);
  125. pinMode(pulStop, INPUT_PULLUP);
  126. pinMode(timbroSingolo, INPUT_PULLUP);
  127. pinMode(StartAvantiIndietro, INPUT_PULLUP);
  128.  
  129. pinMode(releIndietro, OUTPUT);
  130. pinMode(releBasso, OUTPUT);
  131. // predispongo le condizioni iniziali
  132. // timbratrice indieto e timbro in alto
  133. digitalWrite(releBasso, releDisattivato);
  134. digitalWrite(releIndietro, releDisattivato);
  135. attachInterrupt(digitalPinToInterrupt(pulStop), stopCiclo, FALLING);
  136. // assegno il valore corrente dei potenziometri alle variabili
  137. tempoPotBI = map(analogRead(potBassoIndietro),0,1023,0,2000);
  138. tempoPotBA = map(analogRead(potBassoAvanti),0,1023,0,2000);
  139. tempoPotAI = map(analogRead(potAltoIndietro),0,1023,0,2000);
  140. tempoPotAA = map(analogRead(potAltoAvanti),0,1023,0,2000);
  141. }
  142.  
  143. void loop() {
  144. //legge posizione iniziale per start
  145. qualeStart();
  146. //quanti timbri?
  147. leggiNumTimbri();
  148. //premuto marcia?
  149. leggiMarcia();
  150. //avvio timbratura
  151.  
  152. //per debug
  153. Serial.print("numero timbrature: (1=singola 2=multipla) -> ");
  154. Serial.println(numTimbri);
  155. Serial.print("start premuto? 0=No 1=Si -> ");
  156. Serial.println(startPremuto);
  157.  
  158. startTimbro();
  159. }
  160.  
  161. void leggiNumTimbri() {
  162. if (digitalRead(timbroSingolo)) { // se sono in posizione 1 ho 5V
  163. numTimbri = 1;
  164. } else { // se sono in posizione 2 ho 0V
  165. numTimbri = 2;
  166. }
  167. }
  168. void leggiMarcia() {
  169. if (!digitalRead(pulMarcia) && !startPremuto) {
  170. startCiclo = true;
  171. startPremuto = true;
  172. delay(10);
  173. }
  174. }
  175. void startTimbro() {
  176. // predispongo le condizioni iniziali
  177. // timbratrice indieto e timbro in alto
  178.  
  179. if (startPremuto) { // se ho premuto lo start
  180. Serial.println("start premuto");
  181. if (numTimbri == 1) { // se selettore è su 1 timbro
  182. Serial.println("timbratura singola");
  183. if (startAvanti = 1) {
  184. eseguiTimbro(); // esegue una timbratura con partenza da avanti
  185. } else if (startAvanti = 2) {
  186. eseguiTimbroDue(); // esegue timbratura con partenza da indietro
  187. }
  188. startPremuto = false; // azzera tutto
  189. startCiclo = false;
  190. fermaCiclo = false;
  191. numTimbri = 0;
  192. } else {
  193. Serial.println("ciclo multiplo"); //fino a che non premo stop
  194. while (numTimbri == 2) {
  195. if (startAvanti = 1) {
  196. eseguiTimbro(); // esegue timbratura con partenza da avanti
  197. } else if (startAvanti = 2) {
  198. eseguiTimbroDue(); // esegue timbratura con partenza da indietro
  199. }
  200. if (fermaCiclo) { //se è stato premuto lo stop
  201. Serial.println("Uscita-- stop premuto");
  202. startPremuto = false;
  203. startCiclo = false;
  204. fermaCiclo = false;
  205. numTimbri = 0;
  206. break; // azzera tutto ed esce
  207. }
  208. }
  209. }
  210. }
  211. }
  212.  
  213. // timbratura con finecorsa
  214. // partenza posizione alto e avanti
  215. // ciclo indietro (tenuta), basso, alto, avanti(rilascio), basso, alto.
  216. void eseguiTimbro() {
  217. //leggo ogni volta i potenziometri così ad ogni timbratura i tempi sono aggiornati
  218. tempoPotBI = map(analogRead(potBassoIndietro),0,1023,0,2000);
  219. tempoPotBA = map(analogRead(potBassoAvanti),0,1023,0,2000);
  220. tempoPotAI = map(analogRead(potAltoIndietro),0,1023,0,2000);
  221. tempoPotAA = map(analogRead(potAltoAvanti),0,1023,0,2000);
  222.  
  223. //vado indietro
  224. Serial.println("Attendo fcIndietro");
  225. digitalWrite(releIndietro, releAttivato); // vado indietro
  226. while (digitalRead(fcIndietro)) {} // attendo finecorsa indietro e tengo indietro
  227. delay(pausa);
  228.  
  229. //inchiostraggio tampone
  230. Serial.println("Attendo Basso");
  231. digitalWrite(releBasso, releAttivato); //vado in basso
  232. delay(tempoPotBI);
  233.  
  234. digitalWrite(releBasso, releDisattivato); // risalgo
  235. Serial.println("Attendo Alto");
  236. delay(tempoPotAI);
  237.  
  238. //posizionamento per timbratura
  239. Serial.println("Attendo fcAvanti");
  240. digitalWrite(releIndietro, releDisattivato); //torno avanti
  241. while (digitalRead(fcAvanti)) {}
  242. delay(pausa);
  243.  
  244. // timbratura
  245. Serial.println("Attendo Basso");
  246. digitalWrite(releBasso, releAttivato); //vado giù
  247. delay(tempoPotBA);
  248.  
  249. digitalWrite(releBasso, releDisattivato); //risalgo
  250. Serial.println("Attendo Alto");
  251. // attendo finecorsa alto
  252. delay(tempoPotAA);
  253. }
  254.  
  255. // timbratura con finecorsa
  256. // partenza posizione alto e indietro
  257. // ciclo basso, alto, avanti (rilascio), basso, alto, indietro.
  258. void eseguiTimbroDue() {
  259. //leggo ogni volta i potenziometri così ad ogni timbratura i tempi sono aggiornati
  260. tempoPotBI = map(analogRead(potBassoIndietro),0,1023,0,2000);
  261. tempoPotBA = map(analogRead(potBassoAvanti),0,1023,0,2000);
  262. tempoPotAI = map(analogRead(potAltoIndietro),0,1023,0,2000);
  263. tempoPotAA = map(analogRead(potAltoAvanti),0,1023,0,2000);
  264.  
  265. //inchiostraggio tampone
  266. Serial.println("Attendo Basso");
  267. digitalWrite(releBasso, releAttivato); //vado in basso
  268. delay(tempoPotBI);
  269.  
  270. digitalWrite(releBasso, releDisattivato); // risalgo
  271. Serial.println("Attendo Alto");
  272. delay(tempoPotAI);
  273.  
  274. //posizionamento per timbratura
  275. Serial.println("Attendo fcAvanti");
  276. digitalWrite(releIndietro, releDisattivato); //torno avanti
  277. while (digitalRead(fcAvanti)) {}
  278. delay(pausa);
  279.  
  280. // timbratura
  281. Serial.println("Attendo Basso");
  282. digitalWrite(releBasso, releAttivato); //vado giù
  283. delay(tempoPotBA);
  284.  
  285. digitalWrite(releBasso, releDisattivato); //risalgo
  286. Serial.println("Attendo Alto");
  287. // attendo finecorsa alto
  288. delay(tempoPotAA);
  289.  
  290. //vado indietro
  291. Serial.println("Attendo fcIndietro");
  292. digitalWrite(releIndietro, releAttivato); // vado indietro
  293. while (digitalRead(fcIndietro)) {} // attendo finecorsa indietro e tengo indietro
  294. delay(pausa);
  295. }
  296.  
  297. void qualeStart() {
  298. if (digitalRead(StartAvantiIndietro)) { // se sono in posizione 1 ho 5V
  299. startAvanti = 1;
  300. Serial.println("Attendo fcAvanti");
  301. digitalWrite(releIndietro, releDisattivato); //torno avanti
  302. while (digitalRead(fcAvanti)) {}
  303. delay(pausa);
  304. } else { // se sono in posizione 2 ho 0V
  305. startAvanti = 2;
  306. //vado indietro
  307. Serial.println("Attendo fcIndietro");
  308. digitalWrite(releIndietro, releAttivato); // vado indietro
  309. while (digitalRead(fcIndietro)) {} // attendo finecorsa indietro e tengo indietro
  310. delay(pausa);
  311. }
  312. }
  313.  
  314. //funzione di interrupt
  315. void stopCiclo () {
  316. fermaCiclo = true;
  317. }
  318. [/code]
Add Comment
Please, Sign In to add comment