Advertisement
Guest User

pin change int example

a guest
May 23rd, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.08 KB | None | 0 0
  1. #include <PinChangeInterrupt.h>
  2. //#include <PinChangeInterruptBoards.h>
  3. //#include <PinChangeInterruptPins.h>
  4. //#include <PinChangeInterruptSettings.h>
  5.  
  6. #include <stdio.h>
  7. #include <Wire.h>
  8. #include <I2CLCD.h>
  9.  
  10. // definizioni PIN
  11. #define MOT1_E 6  // Enable Motore  trascinamento
  12. #define MOT2_E 5 //  Enable Motore FEED
  13. #define MOT1 A0 // Motore 1 Trascinamento
  14. #define ENC 10 // Encoder Motore 1
  15. #define FEEDMOT A2 // motore 2 FEEDer
  16. #define ENDFEED 9 // proxim sensore di FEED guaina
  17. #define FEED 11 // proxim fine feed
  18. #define CUTVALVE A3 // valvola pistone taglio
  19. #define CUTUP 7 // contatto taglierina su
  20. #define CUTDWN 8   // contatto taglierina giù
  21. #define COVER 4 // switch copertura aperta BLOCCO macchina
  22. #define ENCDWN  A1 // magnete di abbassamento encoder
  23.  
  24. // definizioni tasti
  25. #define POUND 35 // #
  26. #define ASTERIX 42//*
  27. #define K 6 // costante per il calcolo dei giri = quanti impulsi per mm
  28. #define CF 1 // Fattore correzione errore
  29.  
  30. I2CLCD lcd = I2CLCD(0x12, 20, 4);
  31. volatile long giri = 0; // impulsi dal encoder del motore
  32. volatile boolean err = false;//  errore bloccante
  33. volatile  int oldgiri = 0;
  34.  
  35.  
  36. void setup() {
  37.  
  38.   pinMode(MOT1, OUTPUT); // Motore 1 avanzamento
  39.   pinMode(FEEDMOT, OUTPUT); // Motore 2 Svolgitore
  40.   pinMode(MOT1_E, OUTPUT); // Motore 1 Enable
  41.   pinMode(MOT2_E, OUTPUT); // Motore 2 Enable
  42.   pinMode(CUTVALVE, OUTPUT); // Valvola pistone taglio
  43.   pinMode(ENCDWN, OUTPUT); // Encoder piston
  44.   digitalWrite(MOT1_E, LOW); // Disabilita MOT1
  45.   digitalWrite(MOT2_E, LOW); // Disabilita MOT2
  46.   digitalWrite(CUTVALVE, LOW);
  47.   digitalWrite(FEEDMOT, LOW);
  48.   digitalWrite(MOT1, LOW);
  49.   pinMode(COVER, INPUT); // Sensore protezione lama aperta
  50.   pinMode(FEED, INPUT); // Sensore proxim di alimentazione guaina
  51.   pinMode(ENDFEED, INPUT); // Sensore proxim di alimentazione guaina
  52.   pinMode(CUTUP, INPUT); // posizione lama Taglio SU
  53.   pinMode(CUTDWN, INPUT); // posizione lama Taglio GIU
  54.  // pinMode(ENC, INPUT); // Encoder Motore 1 con pcint
  55.   delay(1000);
  56.   lcd.init();
  57.   lcd.interruptOff();
  58.   lcd.backlight(0);
  59.   lcd.cursorOn();
  60.   lcd.blinkOn();
  61.   digitalWrite(CUTVALVE, LOW);
  62.   digitalWrite(FEEDMOT, LOW);
  63.   digitalWrite(MOT1, LOW);
  64.   digitalWrite(MOT1_E, HIGH); // abilita MOT1
  65.   digitalWrite(MOT2_E, HIGH); // abilita MOT2
  66.   lcd.clear();
  67.   lcd.cursorOff();
  68. }
  69.  
  70.  
  71. void loop() {
  72.   // put your main code here, to run repeatedly:
  73.  uint8_t key = 0x20;
  74.   volatile int test = 500;
  75.   char numero[16];
  76.   giri = 0;
  77.   lcd.clear();
  78.   lcd.write("TEST 1 giro encoder");
  79.   analogWrite(MOT1_E, 128);
  80.   attachPinChangeInterrupt(digitalPinToPinChangeInterrupt(ENC), int_motor, FALLING);
  81.   digitalWrite(MOT1, HIGH);
  82.   while (giri < test) {
  83.   }
  84.   digitalWrite(MOT1, LOW);
  85.   detachPinChangeInterrupt(digitalPinToPinChangeInterrupt(ENC));
  86.   lcd.setCursor(1, 0);
  87.   lcd.write("encoder : ");
  88.   ltoa(giri, numero, 10);
  89.   lcd.write(numero);
  90.  
  91.   while (key == 0x20) {
  92.     key = lcd.getKey();
  93.   }
  94.  
  95. }
  96.  
  97.  
  98. void int_motor(void)  // *********** INT MOTOR gestione interrupt encoder del motore trascinamento
  99. {
  100.   cli();
  101.   giri++;
  102.   oldgiri = 0;
  103.   sei();
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement