Hello everyone,
First off, amazing community you all have here. It has inspired me to begin a design I've thought of for quite awhile. It is a guitar effects switching system with a few twists. Right now I am having some trouble. I have a save button that reads the current state of relays, and then what I am trying to do is save it to eitherpreset button 1, 2, or 3, depending on which button I press. I've spent a few days reading over source material and re-educating myself, but I need to reach out and ask for some guidance. Am I on target with else if, is a switch case more appropriate?
This is my first "complex" code, I'm sure it's filled with rookie mistakes and repetitiveness. Are there any issues making separate void programs (helps keep me personally organized), am I going to screw up my code somewhere?
//Save button
if (digitalRead(Save) == HIGH)
{
SavePressed = true;
}
else {
SavePressed = false;
SaveToggle = false;
}
if (SavePressed == true && SaveToggle == false) {
SaveToggle = true;
save();
//Save program
void save() {
int var = digitalRead(Preset1) && digitalRead(Preset2) && digitalRead(Preset3);
unsigned char relay = 0;
if (Preset1 == HIGH) {
for (int r = 14; r < 17; r++)
{
bitWrite(relay, r - 14, digitalRead(r));
}
EEPROM.write (Address1, relay);
}
else if (Preset2 == HIGH) {
for (int r = 14; r < 17; r++)
{
bitWrite(relay, r - 14, digitalRead(r));
}
EEPROM.write(Address2, relay);
}
else (Preset3 == HIGH); {
for (int r = 14; r < 17; r++)
{
bitWrite(relay, r - 14, digitalRead(r));
}
EEPROM.write(Address3, relay);
}
}
void preset1() {
unsigned char relay = 0;
relay = EEPROM.read(Address1);
for (int r = 14; r < 17; r++) {
digitalWrite(r, bitRead(relay, r - 14));
}
lcd.setCursor(16, 1);
lcd.print("Preset 1");
}
void preset2() {
unsigned char relay = 0;
relay = EEPROM.read(Address2);
for (int r = 14; r < 17; r++) {
digitalWrite(r, bitRead(relay, r - 14));
lcd.setCursor(16, 1);
lcd.print("Preset 2");
}
} void preset3() {
unsigned char relay = 0;
relay = EEPROM.read(Address3);
for (int r = 14; r < 17; r++) {
digitalWrite(r, bitRead(relay, r - 14));
lcd.setCursor(16, 1);
lcd.print("Preset 3");
}
}
Here is the full code as it is now. I'm writing the code for a nano, then once I know what I'm doing, I'll adapt it for a much larger Mega project. Thank you guys for any help or pointers in how to do better, it's all very appreciated. Keep up the great work and community!
#include <EEPROM.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(5, 6, 7, 8, 9, 10);
const int Save = 11;
const int Preset1 = 12;
const int Preset2 = 13;
const int Preset3 = 20;
int Address1 = 30;
int Address2 = 31;
int Address3 = 32;
int RelayPins [] = {14, 15, 16};
int RelayPinCount = 3;
int LedPins [] = {17, 18, 19};
int LedPinCount = 3;
int SwitchPins [] = {2, 3, 4};
int SwitchPinCount = 3;
boolean Switch1Pressed = false;
boolean Toggle1 = false;
boolean Switch2Pressed = false;
boolean Toggle2 = false;
boolean Switch3Pressed = false;
boolean Toggle3 = false;
//for save and presets
boolean SavePressed = false;
boolean SaveToggle = false;
boolean Address1Pressed = false;
boolean Address1Toggle = false;
boolean Address2Pressed = false;
boolean Address2Toggle = false;
boolean Address3Pressed = false;
boolean Address3Toggle = false;
void setup()
{
int r;
for (int r = 0; r < 2; r++) {
pinMode(RelayPins[r], OUTPUT);
}
pinMode(Switch1, INPUT);
pinMode(Switch2, INPUT);
pinMode(Switch3, INPUT);
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
pinMode(Relay3, OUTPUT);
pinMode(Led1, OUTPUT);
pinMode(Led2, OUTPUT);
pinMode(Led3, OUTPUT);
}
void loop()
{
lcd.begin(16, 2);
lcd.print("Barnett Bypass");
//LED and Relay tracking
if (digitalRead(Relay1) == HIGH) {
digitalWrite(Led1, HIGH);
}
else {
digitalWrite(Led1, LOW);
}
if (digitalRead(Relay2) == HIGH) {
digitalWrite(Led2, HIGH);
}
else {
digitalWrite(Led2, LOW);
}
if (digitalRead(Relay3) == HIGH) {
digitalWrite(Led3, HIGH);
}
else {
digitalWrite(Led3, LOW);
}
//Save button
if (digitalRead(Save) == HIGH)
{
SavePressed = true;
}
else {
SavePressed = false;
SaveToggle = false;
}
if (SavePressed == true && SaveToggle == false) {
SaveToggle = true;
save();
}
//Preset 1 button
if (digitalRead(Preset1) == HIGH)
{
Address1Pressed = true;
}
else {
Address1Pressed = false;
Address1Toggle = false;
}
if (Address1Pressed == true && Address1Toggle == false) {
Address1Toggle = true;
preset1();
}
//Switch 1
if (digitalRead(Switch1) == HIGH)
{
Switch1Pressed = true;
}
else {
Switch1Pressed = false;
Toggle1 = false;
}
if (Switch1Pressed == true && Toggle1 == false) {
Toggle1 = true;
toggle1();
}
//Switch 2
if (digitalRead(Switch2) == HIGH)
{
Switch2Pressed = true;
}
else {
Switch2Pressed = false;
Toggle2 = false;
}
if (Switch2Pressed == true && Toggle2 == false) {
Toggle2 = true;
toggle2();
}
//Switch 3
if (digitalRead(Switch3) == HIGH)
{
Switch3Pressed = true;
}
else {
Switch3Pressed = false;
Toggle3 = false;
}
if (Switch3Pressed == true && Toggle3 == false) {
Toggle3 = true;
toggle3();
}
delay(50);
}
void save() {
int var = digitalRead(Preset1) && digitalRead(Preset2) && digitalRead(Preset3);
unsigned char relay = 0;
if (Preset1 == HIGH) {
for (int r = 14; r < 17; r++)
{
bitWrite(relay, r - 14, digitalRead(r));
}
EEPROM.write (Address1, relay);
}
else if (Preset2 == HIGH) {
for (int r = 14; r < 17; r++)
{
bitWrite(relay, r - 14, digitalRead(r));
}
EEPROM.write(Address2, relay);
}
else (Preset3 == HIGH); {
for (int r = 14; r < 17; r++)
{
bitWrite(relay, r - 14, digitalRead(r));
}
EEPROM.write(Address3, relay);
}
}
void preset1() {
unsigned char relay = 0;
relay = EEPROM.read(Address1);
for (int r = 14; r < 17; r++) {
digitalWrite(r, bitRead(relay, r - 14));
}
lcd.setCursor(16, 1);
lcd.print("Preset 1");
}
void preset2() {
unsigned char relay = 0;
relay = EEPROM.read(Address2);
for (int r = 14; r < 17; r++) {
digitalWrite(r, bitRead(relay, r - 14));
lcd.setCursor(16, 1);
lcd.print("Preset 2");
}
} void preset3() {
unsigned char relay = 0;
relay = EEPROM.read(Address3);
for (int r = 14; r < 17; r++) {
digitalWrite(r, bitRead(relay, r - 14));
lcd.setCursor(16, 1);
lcd.print("Preset 3");
}
}
void toggle1()
{ digitalWrite(Led1, !digitalRead(Led1));
digitalWrite(Relay1, !digitalRead(Relay1));
lcd.setCursor(0, 1);
lcd.print("Loop 1");
}
void toggle2()
{ digitalWrite(Led2, !digitalRead(Led2));
digitalWrite(Relay2, !digitalRead(Relay2));
lcd.setCursor(0, 1);
}
void toggle3()
{ digitalWrite(Led3, !digitalRead(Led3));
digitalWrite(Relay3, !digitalRead(Relay3));
lcd.setCursor(0, 1);
lcd.print("Loop 3");
}