Code: Select all
ReefAngel.PWM.SetChannel( 0, now()%3600<15?:100:0);
Code: Select all
ReefAngel.PWM.SetChannel( 0, now()%3600<15?:100:0);
Code: Select all
// Basic 4 Realy board connection
// Each relay is turned on for 2 seconds and then off.
// You can here them click as there state changes from off to on and on to
// off.
// You will also see the corresponding Red LED on the 4 Relay board
// light up when the relay is on.
// define names for the 4 Digital pins On the Arduino 7,8,9,10
// These data pins link to 4 Relay board pins IN1, IN2, IN3, IN4
#define RELAY1 7
#define RELAY2 8
#define RELAY3 9
#define RELAY4 10
void setup()
{
// Initialise the Arduino data pins for OUTPUT
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
}
void loop()
{
digitalWrite(RELAY1,LOW); // Turns ON Relays 1
delay(2000); // Wait 2 seconds
digitalWrite(RELAY1,HIGH); // Turns Relay Off
digitalWrite(RELAY2,LOW); // Turns ON Relays 2
delay(2000); // Wait 2 seconds
digitalWrite(RELAY2,HIGH); // Turns Relay Off
digitalWrite(RELAY3,LOW); // Turns ON Relays 3
delay(2000); // Wait 2 seconds
digitalWrite(RELAY3,HIGH); // Turns Relay Off
digitalWrite(RELAY4,LOW); // Turns ON Relays 4
delay(2000); // Wait 2 seconds
digitalWrite(RELAY4,HIGH); // Turns Relay Off
}
Code: Select all
#include <Wire.h>
#include <avr/wdt.h>
byte PWMports[] ={
3,5,6,9,10,11};
byte ChannelValue[] = {
0,0,0,0,0,0};
byte cmdnum=255;
byte datanum=255;
void setup()
{
Serial.begin(57600);
Wire.begin(8);
Wire.onReceive(receiveEvent);
randomSeed(digitalRead(0));
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
wdt_enable(WDTO_1S);
}
void loop()
{
wdt_reset();
//Serial.println(ChannelValue[0],DEC);
if (cmdnum!=255)
{
ProcessCMD(cmdnum,datanum);
cmdnum=255;
datanum=255;
}
}
void receiveEvent(int howMany) {
wdt_reset();
if (howMany==5)
{
byte cmd1, cmd2, cmd3, cmd4, cmd5;
cmd1=Wire.read();
cmd2=Wire.read();
cmd3=Wire.read();
cmd4=Wire.read();
cmd5=Wire.read();
if (cmd1=='$' && cmd2=='$' && cmd3=='$')
{
cmdnum=cmd4;
datanum=cmd5;
//Serial.println(cmd4,DEC);
//Serial.println(cmd5,DEC);
}
}
else
{
for (int a=0;a<howMany;a++)
{
Wire.read();
}
}
}
void ProcessCMD(byte cmd, byte data)
{
wdt_reset();
// Individual Channel
if (cmd>=0 && cmd<=5)
{
ChannelValue[cmd]=data;
digitalWrite(PWMports[cmd],data);
}
//Clouds
if (cmd==6)
{
//Serial.println(data,DEC);
for (int b=0;b<7;b++)
{
if (b<6)
{
for (int a=ChannelValue[b];a>0;a--)
{
analogWrite(PWMports[b],a);
wdt_reset();
delay(data);
}
}
if (b>0)
{
for (int a=0;a<ChannelValue[b-1];a++)
{
analogWrite(PWMports[b-1],a);
wdt_reset();
delay(data);
}
}
}
}
//Thnderstorm
if (cmd==7)
{
wdt_reset();
for(int a=0;a<6;a++)
{
analogWrite(PWMports[a],255);
}
delay(30);
for(int a=0;a<6;a++)
{
analogWrite(PWMports[a],0);
}
delay(10);
analogWrite(PWMports[0],255);
delay(100);
analogWrite(PWMports[4],0);
analogWrite(PWMports[3],0);
delay(10);
analogWrite(PWMports[0],0);
analogWrite(PWMports[3],ChannelValue[3]);
analogWrite(PWMports[1],0);
delay(60);
analogWrite(PWMports[3],0);
delay(90);
analogWrite(PWMports[4],ChannelValue[4]);
analogWrite(PWMports[1],ChannelValue[1]);
analogWrite(PWMports[2],0);
wdt_reset();
delay(100);
analogWrite(PWMports[2],255);
analogWrite(PWMports[5],255);
analogWrite(PWMports[4],0);
delay(30);
analogWrite(PWMports[5],0);
analogWrite(PWMports[0],255);
wdt_reset();
delay(300);
analogWrite(PWMports[4],ChannelValue[4]);
for(int a=0;a<6;a++)
{
analogWrite(PWMports[a],ChannelValue[a]);
}
}
//Thnderstorm Random
if (cmd==8)
{
for(int a=0;a<10;a++)
{
analogWrite(PWMports[random(6)],random(256));
analogWrite(PWMports[random(6)],0);
analogWrite(PWMports[random(6)],255);
wdt_reset();
delay(random(200));
}
delay(30);
for(int a=0;a<6;a++)
{
analogWrite(PWMports[a],ChannelValue[a]);
}
}
}
Minor typo. Try this:rimai wrote:Code: Select all
ReefAngel.PWM.SetChannel( 0, now()%3600<15?:100:0);
Code: Select all
ReefAngel.PWM.SetChannel( 0, now()%3600<15?100:0);
No I use a NPN transistor TIP-122rimai wrote:I'm also interested on seeing how you are powering the motors. Did you use a mosfet transistor?
Code: Select all
#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_NokiaLCD.h>
#include <RA_ATO.h>
#include <RA_Joystick.h>
#include <LED.h>
#include <RA_TempSensor.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <InternalEEPROM.h>
#include <RA_Colors.h>
#include <RA_CustomColors.h>
#include <Salinity.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <ReefAngel.h>
////// Place global variable code below here
////// Place global variable code above here
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
ReefAngel.AddStandardMenu(); // Add Standard Menu
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port1Bit | Port2Bit | Port3Bit | Port4Bit | Port5Bit | Port6Bit | Port7Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = 0;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = 0;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 869 );
// Ports that are always on
ReefAngel.Relay.On( Port1 );
ReefAngel.Relay.On( Port2 );
ReefAngel.Relay.On( Port3 );
ReefAngel.Relay.On( Port4 );
ReefAngel.Relay.On( Port5 );
ReefAngel.Relay.On( Port6 );
ReefAngel.Relay.On( Port7 );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.DosingPumpRepeat( Port8,0,60,60 );
ReefAngel.PWM.SetChannel( 0, now()%3600<15?80:0);
ReefAngel.PWM.SetChannel( 1, now()%3600<25?50:0);
ReefAngel.PWM.SetChannel( 2, now()%3600<35?95:0);
ReefAngel.PWM.SetChannel( 3, now()%3600<10?100:0);
////// Place your custom code below here
////// Place your custom code above here
// This should always be the last line
ReefAngel.ShowInterface();
}
void DrawCustomMain()
{
int x,y;
char text[10];
// Dimming Expansion
x = 15;
y = 2;
for ( int a=0;a<6;a++ )
{
if ( a>2 ) x = 75;
if ( a==3 ) y = 2;
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x,y,"Ch :" );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+12,y,a );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+24,y,ReefAngel.PWM.GetChannelValue(a) );
y += 10;
}
pingSerial();
// Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 43, ReefAngel.Params,
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 43, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
pingSerial();
// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 84, TempRelay );
pingSerial();
// Date and Time
ReefAngel.LCD.DrawDate( 6, 122 );
pingSerial();
}
void DrawCustomGraph()
{
}
thank you I'll try to make my own main screen and menu.rimai wrote:I'm assuming you are talking about changing the main screen, right?
http://forum.reefangel.com/viewtopic.php?f=14&t=109