Hi
I have been playing around with the serial on Arduino.
At the moment , i am controlling 8 relays, they will either be pulsed or latched.
The code below works, but i would like to use a serial string instead of a single character in the switch cases, as an example "relay a pulse" or "relay a on" and "relay a off"
I would like to control a maximum of 16 relays using the MCP23017 I2C chip, all either pulse or latched, but run out of single characters. Also it would keep the code neater using a string.
Any advice would be gratefully received.
[code]
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 17, 16, 15, 14); // pins for LCD
void setup(){
lcd.begin(16,2); // 16 characters, 2 rows
lcd.clear();
//Set all the pins we need to output pins
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
//Begin serial, turn on LCD LED and set welcoming message
Serial.begin(9600);
delay(2000);
digitalWrite(13, HIGH);
delay(1000);
lcd.setCursor(0,0);
lcd.print("Automation");
delay(1000);
lcd.setCursor(2,1);
lcd.print("READY TO RUN");
Serial.begin(9600);
}
void loop (){
if (Serial.available()) {
char ser = Serial.read(); //read serial as a character
switch (ser) {
case 'A':
triggerPin(8);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(2,1);
lcd.print("Last Relay A");
break;
case 'B':
triggerPin(7);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(2,1);
lcd.print("Last Relay B");
break;
case 'C':
triggerPin(6);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(2,1);
lcd.print("Last Relay C");
break;
case 'D':
triggerPin(5);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(2,1);
lcd.print("Last Relay D");
break;
case 'E':
triggerPin(9);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(2,1);
lcd.print("Last Relay E");
break;
case 'F':
triggerPin(10);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(2,1);
lcd.print("Last Relay F");
break;
case 'G':
triggerPin(11);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(2,1);
lcd.print("Last Relay G");
break;
case 'H':
triggerPin(12);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(2,1);
lcd.print("Last Relay H");
break;
case'I':
digitalWrite(8, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay A ON");
break;
case 'a':
digitalWrite(8, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay A OFF");
break;
case 'J':
digitalWrite(7, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay B ON");
break;
case 'b':
digitalWrite(7, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay B OFF");
break;
case 'K':
digitalWrite(6, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay C ON");
break;
case 'c':
digitalWrite(6, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay C OFF");
break;
case 'L':
digitalWrite(5, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay D ON");
break;
case 'd':
digitalWrite(5, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay D OFF");
break;
case 'M':
digitalWrite(9, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay E ON");
break;
case 'e':
digitalWrite(9, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay E OFF");
break;
case 'N':
digitalWrite(10, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay F ON");
break;
case 'f':
digitalWrite(10, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay F OFF");
break;
case 'O':
digitalWrite(11, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay G ON");
break;
case 'g':
digitalWrite(11, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay G OFF");
break;
case 'P':
digitalWrite(12, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay H ON");
break;
case 'h':
digitalWrite(12, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Automation");
lcd.setCursor(0,1);
lcd.print("Last Relay H OFF");
break;
}
}
}
void triggerPin(int pin){
digitalWrite(pin, HIGH);
delay(700);
digitalWrite(pin, LOW);
}
[/code]