babyyoda_

DimmerAtmega

Jul 9th, 2021 (edited)
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //#include <TimerOne.h>   //https://github.com/PaulStoffregen/TimerOne         [Attiny support]
  2. #include<Timer1.h>        //https://github.com/carlosrafaelgn/ArduinoTimer/tree/master/Timer1
  3.  
  4.  
  5. #include "PinChangeInterrupt.h"
  6.  
  7. #define MotorPin 4       // Triac Pin  [Physical Pin 3]
  8. #define ZCD_Pin 1        // Zero Cross [Physical Pin 6]
  9. //----------------------------------------------------------------------------------------------//
  10. // Motor Speed Control
  11. int fanval[5] = {90, 50, 20};         // Fan different Speed
  12. int timeval;
  13. bool interruptState = false;
  14. boolean  fan;
  15. byte speedCounter = 0;
  16. volatile boolean fanON = 0;
  17. bool machineState = false;
  18. //----------------------------------------------------------------------------------------------//
  19.  
  20. char mode;
  21.  
  22. void setup() {
  23.   Serial.begin(9600);
  24.   pinMode(ZCD_Pin, INPUT);
  25.   pinMode(MotorPin, OUTPUT);
  26.   fan = false;
  27.   attachPCINT(digitalPinToPCINT(ZCD_Pin), dimmer, FALLING);
  28. //  attachInterrupt(0, dimmer, FALLING);
  29. }
  30.  
  31. void dimmer()
  32. {
  33.   long int dimval;
  34.   dimval = timeval * 75;
  35.   if (fanON)
  36.     startTimer1(dimval);
  37.   //    Timer1.initialize(dimval);
  38. }
  39.  
  40. ISR(timer1Event)
  41. {
  42.   //  Timer1.stop();
  43.   pauseTimer1();
  44.   digitalWrite(MotorPin, HIGH);
  45.   delayMicroseconds(100);
  46.   digitalWrite(MotorPin, LOW);
  47. }
  48. void loop() {
  49.  
  50.   if (Serial.available() > 0) {
  51.  
  52.     mode = Serial.read();
  53.     //////////////////////////////////////////////////////////////////// OFF ////////////////////////////////////////////////////////////////////
  54.     if (mode == '0')
  55.     {
  56.       Serial.println("OFF");
  57.       if (machineState == true) {                 // Turn OFF only if it's ON
  58.         fanON = 0;
  59.         interruptState = false;
  60.         machineState = false;
  61.       }
  62.     }
  63.     //////////////////////////////////////////////////////////////////// LOW ////////////////////////////////////////////////////////////////////
  64.     if (mode == '1')
  65.     {
  66.       Serial.println("LOW");
  67.       if (machineState == false) {                        // Turn ON only if it's OFF
  68.  
  69.         speedCounter = 3;
  70.         timeval = fanval[0];
  71.         if (interruptState == false) {
  72.           fanON = 1;
  73.           interruptState = true;
  74.         }
  75.         machineState = true;
  76.       }
  77.     }
  78.     //////////////////////////////////////////////////////////////////// MED ////////////////////////////////////////////////////////////////////
  79.     if (mode == '2')
  80.     {
  81.       Serial.println("MED");
  82.       timeval = fanval[1];
  83.       if (interruptState == false) {
  84.         fanON = 1;
  85.         interruptState = true;
  86.       }
  87.     }
  88.     //////////////////////////////////////////////////////////////////// HIGH ////////////////////////////////////////////////////////////////////
  89.     if (mode == '3')
  90.     {
  91.       Serial.println("HIGH");
  92.       timeval = fanval[2];
  93.       if (interruptState == false) {
  94.         fanON = 1;
  95.         interruptState = true;
  96.       }
  97.     }
  98.   }
  99. }
Add Comment
Please, Sign In to add comment