/**
* NodeMCU_ESP8266_L9110_H-Bridge_Demo_Heater_Elec
*
*/
#define MotorForward 21 // choose the pin for the Motor Forward
#define MotorReverse 20 // choose the pin for the Motor Reverse
#define PumpPlus 33 // choose the pin for the Pump Forward
#define PumpMinus 26 // choose the pin for the Pump Reverse
//RGB LED
#define RLed 17
#define GLed 16
#define BLed 15
//Buttons
#define buttonPlus 39 // choose the input pin (for a pushbutton)
#define buttonMinus 38 // choose the input pin (for a pushbutton)
#define buttonSelector 40 // choose the input pin (for a pushbutton)
#define buttonAllOff 41 // choose the input pin (for a pushbutton)
#define DEBOUNCE_TIME 20 // the debounce time in millisecond, increase this time if it still chatters
int prestate = 0;
int selector_count_value = 0;
int motor_count_value = 60;
int pump_count_value = 0;
int buttonStateMotorPlus = 0; // variable for reading the pin status
int buttonStateMotorMinus = 0; // variable for reading the pin status
int buttonStatePumpPlus = 0; // variable for reading the pin status
int buttonStatePumpMinus = 0; // variable for reading the pin status
int buttonStateSelector = 0;
int buttonStateAllOff = 0; // variable for reading the pin status
// Motor Speed Values - Start at zero
int MotorSpeed1 = 60;
int MotorSpeed2 = 60;
// Variables will change:
int lastSteadyState = LOW; // the previous steady state from the input pin
int lastFlickerableState = LOW; // the previous flickerable state from the input pin
int currentState; // the current reading from the input pin
// the following variables are unsigned longs because the time, measured in
// milliseconds, will quickly become a bigger number than can be stored in an int.
unsigned long lastDebounceTime = 0; // the last time the output pin was t
// // Variables will change:
// int lastState = LOW; // the previous state from the input pin
// int currentState; // the current reading from the input pin
//int selector[4];
// void setup(void);
void setup() {
Serial.begin(9600);
pinMode(MotorForward, OUTPUT); // declare Motor as output
pinMode(MotorReverse, OUTPUT); // declare Motor as output
pinMode(PumpPlus, OUTPUT); // declare Pump as output
pinMode(PumpMinus, OUTPUT); // declare Pump as output
pinMode(RLed, OUTPUT); // declare Motor as output
pinMode(GLed, OUTPUT); // declare Pump as output
pinMode(BLed, OUTPUT); // declare Pump as output
pinMode(buttonPlus, INPUT); // declare pushbutton as input
pinMode(buttonMinus, INPUT); // declare pushbutton as input
pinMode(buttonSelector, INPUT); // declare pushbutton as input
pinMode(buttonAllOff, INPUT); // declare pushbutton as input
digitalWrite(RLed, HIGH);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, HIGH);
}
void MotorControl()//int buttonStateMotorPlus, int buttonStateMotorMinus
{
// buttonStateMotorPlus = digitalRead(buttonPlus);
// buttonStateMotorMinus = digitalRead(buttonMinus);
// digitalWrite(RLed, LOW);
// digitalWrite(GLed, HIGH);
// digitalWrite(BLed, HIGH);
delay(20);
if (buttonStateMotorPlus == HIGH && prestate == 0)
{
motor_count_value++;
if(motor_count_value > 245)
{
motor_count_value = 245;
}
// turn LED on
digitalWrite(MotorForward, HIGH);
digitalWrite(MotorReverse, LOW);
// digitalWrite(RLed, HIGH);
// digitalWrite(GLed, LOW);
// digitalWrite(BLed, HIGH);
// Read the values from the potentiometers
MotorSpeed1 = motor_count_value;//analogRead(SpeedControl1);
//MotorSpeed2 = motor_count_value--;//analogRead(SpeedControl2);
// Convert to range of 0-255
MotorSpeed1 = map(MotorSpeed1, 0, 1023, 0, 255);
//MotorSpeed2 = map(MotorSpeed2, 0, 1023, 0, 255);
// Adjust to prevent "buzzing" at very low speed
if (MotorSpeed1 < 8)
{
MotorSpeed1 = 0;
}
//if (MotorSpeed2 < 8)MotorSpeed2 = 0;
// Set the motor speeds for L9110 H-Bridge driver
//analogWrite(MotorForward, MotorSpeed1);
//analogWrite(MotorReverse, 0);
delay(100);
// turn LED off
//digitalWrite(ledPin, LOW);
//digitalWrite(ledPinForward, LOW);
//digitalWrite(ledPinReverse, HIGH);
Serial.print("Motor Count Value: ");
Serial.println(motor_count_value);
Serial.print("Motor Speed: ");
Serial.println(MotorSpeed1);
prestate = 1;
//Serial.println("prestate" + prestate);
}
delay(20);
if (buttonStateMotorMinus == HIGH && prestate == 0)
{
motor_count_value--;
if(motor_count_value <= 0)
{
motor_count_value = 0;
digitalWrite(MotorForward, LOW);
digitalWrite(MotorReverse, LOW);
digitalWrite(RLed, HIGH);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, HIGH);
delay(100);
}
else
{
// turn LED on
digitalWrite(MotorForward, LOW);
digitalWrite(MotorReverse, HIGH);
digitalWrite(RLed, LOW);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, HIGH);
delay(100);
// turn LED off
//digitalWrite(ledPinForward, HIGH);
//digitalWrite(ledPinReverse, LOW);
}
Serial.print("Motor Count Value: ");
Serial.println(motor_count_value);
prestate = 1;
}
else if(buttonStateMotorPlus == LOW)
{
prestate = 0;
}
}
void MotorForwardReverseControl()//int buttonStateMotorPlus, int buttonStateMotorMinus
{
// buttonStateMotorPlus = digitalRead(buttonPlus);
// buttonStateMotorMinus = digitalRead(buttonMinus);
// digitalWrite(RLed, LOW);
// digitalWrite(GLed, HIGH);
// digitalWrite(BLed, HIGH);
delay(20); //For push button debouncing
if (buttonStateMotorPlus == HIGH && prestate == 0)
{
//motor_count_value++;
motor_count_value = motor_count_value + 50;
if(motor_count_value > 245)
{
motor_count_value = 245;
}
// turn LED on
digitalWrite(MotorForward, HIGH);
digitalWrite(MotorReverse, LOW);
// digitalWrite(RLed, HIGH);
// digitalWrite(GLed, LOW);
// digitalWrite(BLed, HIGH);
// Read the values from the potentiometers
MotorSpeed1 = motor_count_value;//analogRead(SpeedControl1);
//MotorSpeed2 = motor_count_value--;//analogRead(SpeedControl2);
// Convert to range of 0-255
MotorSpeed1 = map(MotorSpeed1, 60, 1023, 60, 255);
//MotorSpeed2 = map(MotorSpeed2, 0, 1023, 0, 255);
// Adjust to prevent "buzzing" at very low speed
// if (MotorSpeed1 < 8)
// {
// MotorSpeed1 = 0;
// }
//if (MotorSpeed2 < 8)MotorSpeed2 = 0;
// Set the motor speeds for L9110 H-Bridge driver
analogWrite(MotorForward, MotorSpeed1);
analogWrite(MotorReverse, 0);
delay(5);
analogWrite(MotorForward, 0);
analogWrite(MotorReverse, MotorSpeed1);
delay(100);
// turn LED off
//digitalWrite(ledPin, LOW);
//digitalWrite(ledPinForward, LOW);
//digitalWrite(ledPinReverse, HIGH);
Serial.print("Motor Count Value: ");
Serial.println(motor_count_value);
Serial.print("Motor Speed: ");
Serial.println(MotorSpeed1);
prestate = 1;
//Serial.println("prestate" + prestate);
}
delay(20);
if (buttonStateMotorMinus == HIGH && prestate == 0)
{
//motor_count_value--;
motor_count_value = motor_count_value - 50;
if(motor_count_value <= 0)
{
motor_count_value = 0;
digitalWrite(MotorForward, LOW);
digitalWrite(MotorReverse, LOW);
digitalWrite(RLed, HIGH);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, HIGH);
delay(100);
}
else
{
// turn LED on
digitalWrite(MotorForward, LOW);
digitalWrite(MotorReverse, HIGH);
digitalWrite(RLed, LOW);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, HIGH);
delay(100);
// turn LED off
//digitalWrite(ledPinForward, HIGH);
//digitalWrite(ledPinReverse, LOW);
}
Serial.print("Motor Count Value: ");
Serial.println(motor_count_value);
prestate = 1;
}
else if(buttonStateMotorPlus == LOW)
{
prestate = 0;
}
}
void PumpControl()//int buttonStatePumpPlus, int buttonStatePumpMinus
{
// buttonStatePumpPlus = digitalRead(buttonPlus);
// buttonStatePumpMinus = digitalRead(buttonMinus);
// digitalWrite(RLed, HIGH);
// digitalWrite(GLed, LOW);
// digitalWrite(BLed, HIGH);
delay(20);
if (buttonStatePumpPlus == HIGH && prestate == 0)
{
pump_count_value++;
if(pump_count_value > 245)
{
pump_count_value = 245;
}
// turn LED on
digitalWrite(PumpPlus, HIGH);
digitalWrite(PumpMinus, LOW);
delay(100);
// turn LED off
//digitalWrite(ledPin, LOW);
//digitalWrite(ledPinForward, LOW);
//digitalWrite(ledPinReverse, HIGH);
Serial.print("Pump Count Value: ");
Serial.println(pump_count_value);
prestate = 1;
//Serial.println("prestate" + prestate);
}
delay(20);
if (buttonStatePumpMinus == HIGH && prestate == 0)
{
pump_count_value--;
if(pump_count_value <= 0)
{
pump_count_value = 0;
digitalWrite(PumpPlus, LOW);
digitalWrite(PumpMinus, LOW);
delay(100);
}
else
{
// turn LED on
digitalWrite(PumpPlus, LOW);
digitalWrite(PumpMinus, HIGH);
delay(100);
// turn LED off
//digitalWrite(ledPinForward, HIGH);
//digitalWrite(ledPinReverse, LOW);
}
Serial.print("Pump Count Value: ");
Serial.println(pump_count_value);
prestate = 1;
}
else if(buttonStateMotorPlus == LOW)
{
prestate = 0;
}
}
/*
bool ButtonDebounce(int ButtonPressed)//, int Selector)
{
// check to see if you just pressed the button
// (i.e. the input went from LOW to HIGH), and you've waited long enough
// since the last press to ignore any noise:
// If the switch/button changed, due to noise or pressing:
if (ButtonPressed != lastFlickerableState) {
// reset the debouncing timer
lastDebounceTime = millis();
// save the the last flickerable state
lastFlickerableState = ButtonPressed;
}
if ((millis() - lastDebounceTime) > DEBOUNCE_TIME)
{
// whatever the reading is at, it's been there for longer than the debounce
// delay, so take it as the actual current state:
// if the button state has changed:
if(lastSteadyState == HIGH && ButtonPressed == LOW)
{
Serial.println("The button is pressed");
return true;
// switch (Selector)
// {
// case 1: //Motor
// MotorControl();
// break;
// case 2: //Pump
// PumpControl();
// break;
// default:
// break;
// }
}
else if(lastSteadyState == LOW && ButtonPressed == HIGH)
{
//Serial.println("The button is released");
return false;
}
// save the the last steady state
lastSteadyState = ButtonPressed;
}
}
*/
void loop(){
//read the state of the pushbutton value:
buttonStateSelector = digitalRead(buttonSelector);
buttonStateMotorPlus = digitalRead(buttonPlus);
buttonStateMotorMinus = digitalRead(buttonMinus);
buttonStatePumpPlus = digitalRead(buttonPlus);
buttonStatePumpMinus = digitalRead(buttonMinus);
buttonStateAllOff = digitalRead(buttonAllOff);
// check to see if you just pressed the button
// (i.e. the input went from LOW to HIGH), and you've waited long enough
// since the last press to ignore any noise:
// If the switch/button changed, due to noise or pressing:
if (buttonStateSelector != lastFlickerableState) {
// reset the debouncing timer
lastDebounceTime = millis();
// save the the last flickerable state
lastFlickerableState = buttonStateSelector;
}
if ((millis() - lastDebounceTime) > DEBOUNCE_TIME) {
// whatever the reading is at, it's been there for longer than the debounce
// delay, so take it as the actual current state:
// if the button state has changed:
if(lastSteadyState == HIGH && buttonStateSelector == LOW)
{
Serial.println("The button is pressed");
selector_count_value++;
if(selector_count_value <= 7)
{
}
else
{
selector_count_value = 1;
}
Serial.print("Selector Count Value: ");
Serial.println(selector_count_value);
}
else if(lastSteadyState == LOW && buttonStateSelector == HIGH)
{
//Serial.println("The button is released");
}
// save the the last steady state
lastSteadyState = buttonStateSelector;
}
/*
if (lastState == HIGH && buttonStateSelector == LOW)
{
Serial.println("The button is pressed");
selector_count_value++;
if(selector_count_value <= 4)
{
}
else
{
selector_count_value = 1;
}
Serial.print("Selector Count Value: ");
Serial.println(selector_count_value);
}
else if (lastState == LOW && buttonStateSelector == HIGH)
{
Serial.println("The button is released");
selector_count_value++;
if(selector_count_value <= 4)
{
}
else
{
selector_count_value = 1;
}
Serial.print("Selector Count Value: ");
Serial.println(selector_count_value);
}
// save the the last state
lastState = buttonStateSelector;
*/
/*
if(buttonStateSelector == HIGH)
{
selector_count_value++;
if(selector_count_value <= 4)
{
}
else
{
selector_count_value = 1;
}
Serial.print("Selector Count Value: ");
Serial.println(selector_count_value);
}
*/
// if(selector_count_value <= 4)
// {
if(selector_count_value == 1) //Motor Forward and Reverse
{
//Green LED
digitalWrite(RLed, HIGH);
digitalWrite(GLed, LOW);
digitalWrite(BLed, HIGH);
//MotorControl();//buttonStateMotorPlus, buttonStateMotorMinus);
//ButtonDebounce(buttonStateMotorPlus, 1);
MotorForwardReverseControl();
}
else if(selector_count_value == 2)//Pump
{
//Blue LED
digitalWrite(RLed, HIGH);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, LOW);
PumpControl();//buttonStatePumpPlus, buttonStatePumpMinus);
//ButtonDebounce(buttonStatePumpPlus, 2);
}
else if(selector_count_value == 3)//Heater
{
//Red LED
digitalWrite(RLed, LOW);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, HIGH);
}
else if(selector_count_value == 4)//Elec
{
//Yellow LED
digitalWrite(RLed, LOW);
digitalWrite(GLed, LOW);
digitalWrite(BLed, HIGH);
}
else if(selector_count_value == 5)//Motor Rotate
{
//Purple Magenta LED
digitalWrite(RLed, LOW);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, LOW);
}
else if(selector_count_value == 6)//
{
//Cyan LED
digitalWrite(RLed, HIGH);
digitalWrite(GLed, LOW);
digitalWrite(BLed, LOW);
}
else if(selector_count_value == 7)//
{
//WHITE LED
digitalWrite(RLed, LOW);
digitalWrite(GLed, LOW);
digitalWrite(BLed, LOW);
}
// }
// else
// {
// selector_count_value = 1;
// Serial.print("Selector Count Value: ");
// Serial.println(selector_count_value);
// }
if(buttonStateAllOff == HIGH)
{
digitalWrite(RLed, HIGH);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, HIGH);
digitalWrite(MotorForward, LOW);
digitalWrite(MotorReverse, LOW);
digitalWrite(PumpPlus, LOW);
digitalWrite(PumpMinus, LOW);
motor_count_value = 0;
selector_count_value = 0;
Serial.print("Motor Count Value: ");
Serial.println(motor_count_value);
Serial.print("Pump Count Value: ");
Serial.println(pump_count_value);
Serial.print("Selector Count Value: ");
Serial.println(selector_count_value);
}
}Loading
esp32-s2-devkitm-1
esp32-s2-devkitm-1