Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <PinChangeInterrupt.h>
- //#include <PinChangeInterruptBoards.h>
- //#include <PinChangeInterruptPins.h>
- //#include <PinChangeInterruptSettings.h>
- #include <stdio.h>
- #include <Wire.h>
- #include <I2CLCD.h>
- // definizioni PIN
- #define MOT1_E 6 // Enable Motore trascinamento
- #define MOT2_E 5 // Enable Motore FEED
- #define MOT1 A0 // Motore 1 Trascinamento
- #define ENC 10 // Encoder Motore 1
- #define FEEDMOT A2 // motore 2 FEEDer
- #define ENDFEED 9 // proxim sensore di FEED guaina
- #define FEED 11 // proxim fine feed
- #define CUTVALVE A3 // valvola pistone taglio
- #define CUTUP 7 // contatto taglierina su
- #define CUTDWN 8 // contatto taglierina giù
- #define COVER 4 // switch copertura aperta BLOCCO macchina
- #define ENCDWN A1 // magnete di abbassamento encoder
- // definizioni tasti
- #define POUND 35 // #
- #define ASTERIX 42//*
- #define K 6 // costante per il calcolo dei giri = quanti impulsi per mm
- #define CF 1 // Fattore correzione errore
- I2CLCD lcd = I2CLCD(0x12, 20, 4);
- volatile long giri = 0; // impulsi dal encoder del motore
- volatile boolean err = false;// errore bloccante
- volatile int oldgiri = 0;
- void setup() {
- pinMode(MOT1, OUTPUT); // Motore 1 avanzamento
- pinMode(FEEDMOT, OUTPUT); // Motore 2 Svolgitore
- pinMode(MOT1_E, OUTPUT); // Motore 1 Enable
- pinMode(MOT2_E, OUTPUT); // Motore 2 Enable
- pinMode(CUTVALVE, OUTPUT); // Valvola pistone taglio
- pinMode(ENCDWN, OUTPUT); // Encoder piston
- digitalWrite(MOT1_E, LOW); // Disabilita MOT1
- digitalWrite(MOT2_E, LOW); // Disabilita MOT2
- digitalWrite(CUTVALVE, LOW);
- digitalWrite(FEEDMOT, LOW);
- digitalWrite(MOT1, LOW);
- pinMode(COVER, INPUT); // Sensore protezione lama aperta
- pinMode(FEED, INPUT); // Sensore proxim di alimentazione guaina
- pinMode(ENDFEED, INPUT); // Sensore proxim di alimentazione guaina
- pinMode(CUTUP, INPUT); // posizione lama Taglio SU
- pinMode(CUTDWN, INPUT); // posizione lama Taglio GIU
- // pinMode(ENC, INPUT); // Encoder Motore 1 con pcint
- delay(1000);
- lcd.init();
- lcd.interruptOff();
- lcd.backlight(0);
- lcd.cursorOn();
- lcd.blinkOn();
- digitalWrite(CUTVALVE, LOW);
- digitalWrite(FEEDMOT, LOW);
- digitalWrite(MOT1, LOW);
- digitalWrite(MOT1_E, HIGH); // abilita MOT1
- digitalWrite(MOT2_E, HIGH); // abilita MOT2
- lcd.clear();
- lcd.cursorOff();
- }
- void loop() {
- // put your main code here, to run repeatedly:
- uint8_t key = 0x20;
- volatile int test = 500;
- char numero[16];
- giri = 0;
- lcd.clear();
- lcd.write("TEST 1 giro encoder");
- analogWrite(MOT1_E, 128);
- attachPinChangeInterrupt(digitalPinToPinChangeInterrupt(ENC), int_motor, FALLING);
- digitalWrite(MOT1, HIGH);
- while (giri < test) {
- }
- digitalWrite(MOT1, LOW);
- detachPinChangeInterrupt(digitalPinToPinChangeInterrupt(ENC));
- lcd.setCursor(1, 0);
- lcd.write("encoder : ");
- ltoa(giri, numero, 10);
- lcd.write(numero);
- while (key == 0x20) {
- key = lcd.getKey();
- }
- }
- void int_motor(void) // *********** INT MOTOR gestione interrupt encoder del motore trascinamento
- {
- cli();
- giri++;
- oldgiri = 0;
- sei();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement