아두이노

interrupt문을사용한 정지(컷팅기)

내동 2019. 7. 26. 08:21

#include <Servo.h>

//------------------------- stepper --------------------------------

#define stepPin 7

#define dirPin 8


//------------------------- servo ----------------------------------

Servo snippers_1;

Servo snippers_3;

#define servo_1   3

#define  servo_3  4

#define openAngle_1 90

#define openAngle_2  90

#define closedAngle 0


//--------------------------- input -------------------------------

#define start_Bt 13

#define up_Bt 5

int state = 1;

const byte stop_Bt = 2;

volatile  byte ledon  = LOW;


void setup() {

Serial.begin(9600);

pinMode(start_Bt, INPUT_PULLUP);

pinMode(stop_Bt , INPUT_PULLUP);

attachInterrupt( digitalPinToInterrupt( stop_Bt), stop_Work, RISING);

pinMode(up_Bt , INPUT_PULLUP);

pinMode(stepPin,OUTPUT);

pinMode(dirPin,OUTPUT);

snippers_1.attach(servo_1 );

snippers_3.attach(servo_3);

snippers_1.write(openAngle_1);

snippers_3.write(openAngle_1);

delay(1000);

 digitalWrite( dirPin, LOW);

}


void loop() {

   if (digitalRead(start_Bt)){

      cutting_Work();}

    

   if (digitalRead(stop_Bt)){

      stop_Work();}

          

    if(digitalRead(up_Bt)){

      run_upBt();}  }


     void cutting_Work(){

      while( ! digitalRead (stop_Bt)){

      for(int i = 0; i < 377 ; i++){

       digitalWrite(stepPin,HIGH);

       delayMicroseconds(2000);

      digitalWrite(stepPin,LOW);

       delayMicroseconds(2000);}


       for(int i = 0; i < 560 ; i++){

       digitalWrite(stepPin,HIGH);

       delayMicroseconds(1000);

      digitalWrite(stepPin,LOW);

       delayMicroseconds(1000);}


       for(int i = 0; i < 280 ; i++){

       digitalWrite(stepPin,HIGH);

       delayMicroseconds(2000);

      digitalWrite(stepPin,LOW);

       delayMicroseconds(2000);}

            

      Serial.println(" motor run");

       delay(1000);

      snippers_1.write(closedAngle);

      Serial.print(" servo_1,   run  closeAngle  :");

      Serial.println (closedAngle);    

      delay(2000);

      snippers_3.write(closedAngle);

      Serial.print(" servo_3 run  closeAngle  :");

      Serial.println (closedAngle);

      delay(2000);

      snippers_1.write(openAngle_1);

       snippers_3.write(openAngle_1);

      Serial.print(" servo_1,3,  run openAngle :");

      Serial.println (openAngle_1);

      delay(2000); }} 

      

      void run_upBt(){

        if(digitalRead(up_Bt)){

        for(int i = 0; i < 430 ; i++){

       digitalWrite(stepPin,HIGH);

       delayMicroseconds(2000);

      digitalWrite(stepPin,LOW);

       delayMicroseconds(2000);}

      } }


    void stop_Work (){     

       digitalWrite (dirPin , LOW);

      digitalWrite (stepPin , LOW);

      snippers_1.write(openAngle_1);

      snippers_3.write(openAngle_1);}

'아두이노' 카테고리의 다른 글

엔코딩모터  (0) 2019.08.01
엔코딩모터  (0) 2019.08.01
컷팅기수정본  (0) 2019.07.24
커터기수정분(운전중 정지 버턴작동)   (0) 2019.07.23
cutter기제작  (0) 2019.07.08