Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#include <TimerOne.h> //https://github.com/PaulStoffregen/TimerOne [Attiny support]
- #include<Timer1.h> //https://github.com/carlosrafaelgn/ArduinoTimer/tree/master/Timer1
- #include "PinChangeInterrupt.h"
- #define MotorPin 4 // Triac Pin [Physical Pin 3]
- #define ZCD_Pin 1 // Zero Cross [Physical Pin 6]
- //----------------------------------------------------------------------------------------------//
- // Motor Speed Control
- int fanval[5] = {90, 50, 20}; // Fan different Speed
- int timeval;
- bool interruptState = false;
- boolean fan;
- byte speedCounter = 0;
- volatile boolean fanON = 0;
- bool machineState = false;
- //----------------------------------------------------------------------------------------------//
- char mode;
- void setup() {
- Serial.begin(9600);
- pinMode(ZCD_Pin, INPUT);
- pinMode(MotorPin, OUTPUT);
- fan = false;
- attachPCINT(digitalPinToPCINT(ZCD_Pin), dimmer, FALLING);
- // attachInterrupt(0, dimmer, FALLING);
- }
- void dimmer()
- {
- long int dimval;
- dimval = timeval * 75;
- if (fanON)
- startTimer1(dimval);
- // Timer1.initialize(dimval);
- }
- ISR(timer1Event)
- {
- // Timer1.stop();
- pauseTimer1();
- digitalWrite(MotorPin, HIGH);
- delayMicroseconds(100);
- digitalWrite(MotorPin, LOW);
- }
- void loop() {
- if (Serial.available() > 0) {
- mode = Serial.read();
- //////////////////////////////////////////////////////////////////// OFF ////////////////////////////////////////////////////////////////////
- if (mode == '0')
- {
- Serial.println("OFF");
- if (machineState == true) { // Turn OFF only if it's ON
- fanON = 0;
- interruptState = false;
- machineState = false;
- }
- }
- //////////////////////////////////////////////////////////////////// LOW ////////////////////////////////////////////////////////////////////
- if (mode == '1')
- {
- Serial.println("LOW");
- if (machineState == false) { // Turn ON only if it's OFF
- speedCounter = 3;
- timeval = fanval[0];
- if (interruptState == false) {
- fanON = 1;
- interruptState = true;
- }
- machineState = true;
- }
- }
- //////////////////////////////////////////////////////////////////// MED ////////////////////////////////////////////////////////////////////
- if (mode == '2')
- {
- Serial.println("MED");
- timeval = fanval[1];
- if (interruptState == false) {
- fanON = 1;
- interruptState = true;
- }
- }
- //////////////////////////////////////////////////////////////////// HIGH ////////////////////////////////////////////////////////////////////
- if (mode == '3')
- {
- Serial.println("HIGH");
- timeval = fanval[2];
- if (interruptState == false) {
- fanON = 1;
- interruptState = true;
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment