I have a working sketch. I have a 8 channel sainsmart 5v relay board connected to my Mega. I am able to push a button and turn off 2 relays for a set amount of time and have them come back on. I am trying now to implement if a temperature gets too high, to turn off a relay (heater) and turn on an led until the heat comes down. So far the LED comes on until temp falls back down, however the set relay blinks instead of completely going off. Heres my code: its towards the bottom
//Libraries Included
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
// Other Pins Used
int pushButton = 22;
int ledPin = 13;
int ledTemp = 12;
#define RELAY1 53
#define RELAY2 52
#define RELAY3 51
#define RELAY4 50
#define RELAY5 49
#define RELAY6 48
#define RELAY7 47
#define RELAY8 46
// ----------------------------For Temp Sensor information----------------------------
#define ONE_WIRE_BUS_W 9 //Water Temp sensor
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWireW(ONE_WIRE_BUS_W);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensorW(&oneWireW); //water sensor
// arrays to hold device addresses
DeviceAddress insideThermometer, outsideThermometer;
// function that will be called when an alarm condition exists during DallasTemperatures::processAlarms();
void newAlarmHandler(uint8_t* deviceAddress)
{
Serial.println("Alarm Handler Start");
printAlarmInfo(deviceAddress);
printTemp(deviceAddress);
Serial.println();
Serial.println("Alarm Handler Finish");
}
void printCurrentTemp(DeviceAddress deviceAddress)
{
printAddress(deviceAddress);
printTemp(deviceAddress);
Serial.println();
}
void printAddress(DeviceAddress deviceAddress)
{
Serial.print("Address: ");
for (uint8_t i = 0; i < 8; i++)
{
if (deviceAddress < 16) Serial.print("0");
_ Serial.print(deviceAddress*, HEX);_
_ }_
_ Serial.print(" ");_
_}_
void printTemp(DeviceAddress deviceAddress)
_{_
_ float tempC = sensorW.getTempC(deviceAddress);_
if (tempC != DEVICE_DISCONNECTED)
_ {_
_ Serial.print("Current Temp C: ");_
_ Serial.print(tempC);_
_ }_
_ else Serial.print("DEVICE DISCONNECTED");_
_ Serial.print(" ");_
_}_
void printAlarmInfo(DeviceAddress deviceAddress)
_{_
_ char temp;_
_ printAddress(deviceAddress);_
_ temp = sensorW.getHighAlarmTemp(deviceAddress);_
_ Serial.print("High Alarm: ");_
_ Serial.print(temp, DEC);_
_ Serial.print("C");_
_ Serial.print(" Low Alarm: ");_
_ temp = sensorW.getLowAlarmTemp(deviceAddress);_
_ Serial.print(temp, DEC);_
_ Serial.print("C");_
_ Serial.print(" ");_
_}_
_//---------------------------END-------------------------------------------_
void setup() //----------------------------------SETUP--------------------------
_{ _
_// Start Serial*_
* Serial.begin(9600);*
// For Relays, led, and push button
* pinMode(RELAY1, OUTPUT); *
* pinMode(RELAY2, OUTPUT);*
* pinMode(RELAY3, OUTPUT);*
* pinMode(RELAY4, OUTPUT);*
* pinMode(RELAY5, OUTPUT); *
* pinMode(RELAY6, OUTPUT);*
* pinMode(RELAY7, OUTPUT);*
* pinMode(RELAY8, OUTPUT);*
* pinMode(pushButton, INPUT);*
* pinMode(ledPin, OUTPUT);*
* pinMode(ledTemp, OUTPUT);*
* // ------------------------------For temp sensor------------------------*
* sensorW.begin(); //start up temperature library*
* // locate devices on the bus*
* Serial.print("Found ");*
* Serial.print(sensorW.getDeviceCount(), DEC);*
* Serial.println(" devices.");*
* // search for devices on the bus and assign based on an index*
* if (!sensorW.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");*
* if (!sensorW.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1");*
* Serial.print("Device insideThermometer ");*
* printAlarmInfo(insideThermometer);*
* Serial.println();*
* Serial.print("Device outsideThermometer ");*
* printAlarmInfo(outsideThermometer);*
* Serial.println();*
* // set alarm ranges*
* Serial.println("Setting alarm temps...");*
* sensorW.setHighAlarmTemp(insideThermometer, 26);*
* sensorW.setLowAlarmTemp(insideThermometer, 22);*
* Serial.print("New insideThermometer ");*
* printAlarmInfo(insideThermometer);*
* Serial.println();*
* Serial.print("New outsideThermometer ");*
* printAlarmInfo(outsideThermometer);*
* Serial.println();*
* // attach alarm handler*
* sensorW.setAlarmHandler(&newAlarmHandler);*
}
void loop() //--------------------------------LOOP--------------------------------------
{
* //RELAY FUNCTIONS FOR FEEDING*
* digitalWrite(RELAY1,LOW); // Turns ON Relays 1*
* digitalWrite(RELAY2,LOW); // Turns ON Relays 2*
* digitalWrite(RELAY3,LOW); // Turns ON Relays 3*
* digitalWrite(RELAY4,LOW); // Turns ON Relays 4 Heater*
* digitalWrite(RELAY5,LOW); // Turns ON Relays 5 RETURN PUMP*
* digitalWrite(RELAY6,LOW); // Turns ON Relays 6 SKIMMER*
* digitalWrite(RELAY7,LOW); // Turns ON Relays 7*
* digitalWrite(RELAY8,LOW); // Turns ON Relays 8 *
* {*
* if (digitalRead(pushButton) == HIGH) {*
* digitalWrite(ledPin, HIGH);*
* digitalWrite(RELAY5, HIGH);*
* digitalWrite(RELAY6, HIGH);*
* delay(5000);*
* Serial.println("Feed Mode");*
* }*
* else {*
* digitalWrite(ledPin, LOW);*
* digitalWrite(RELAY5,LOW);*
* digitalWrite(RELAY6,LOW);*
* }*
//-------------------------------------Temp Sensor-----------------------------------
// ask the devices to measure the temperature
* sensorW.requestTemperatures();*
* // if an alarm condition exists as a result of the most recent*
* // requestTemperatures() request, it exists until the next time*
* // requestTemperatures() is called AND there isn't an alarm condition*
* // on the device*
* if (sensorW.hasAlarm())*
* {*
* digitalWrite(ledTemp, HIGH);*
* digitalWrite(RELAY4, HIGH);*
* Serial.println("Temp High.");*
* }*
* // call alarm handler function defined by sensors.setAlarmHandler*
* // for ea :Pch device reporting an alarm*
* sensorW.processAlarms();*
* if (!sensorW.hasAlarm())*
* {*
* digitalWrite(ledTemp, LOW);*
* digitalWrite(RELAY4, LOW);*
* // just print out the current temperature*
* printCurrentTemp(insideThermometer);*
* }*
* }*
}