Hi Guys,
I'm trying my first real project on an arduino micro (did only some breadboard experiments before).
The purpose of this project are 2 seperate thing. First, I need to Led lights to dim according to a 0-12V (0-5V true a voltage divider) input signal. second is switching the main AC power of a router connected to two relais. There is a switch, the main purpose is that a short press toggles the router on and off and a long press switches the led off when a input signal is present and on when there is no input.
This is my code for now
/*
PWM dims a 2 leds according an 0 to 12V input
*/
int switchIn = 3;
int ledOut1 = 6;
int ledOut2 = 11;
int routerSwitchOut = 9;
int statusLed = 12;
boolean switchLedState = false; //led switched
boolean routerState = false;
int ledOut = 0;
boolean switchActive = false; //previous run switch pressed
unsigned long switchStart = millis();
unsigned long statusLedTime = millis();
void setup()
{
Serial.begin(9600);
Serial.println("Setup running");
pinMode(switchIn, INPUT);
pinMode(ledOut1, OUTPUT);
pinMode(ledOut2, OUTPUT);
pinMode(routerSwitchOut, OUTPUT);
pinMode(statusLed, OUTPUT);
statusLedTime = millis();
}
void loop()
{
unsigned long currentTime = millis();
int val = analogRead(A4); //check input voltage
//set switch state
if(digitalRead(switchIn) == LOW){
if(switchActive == true && currentTime - switchStart < 2000){
if(routerState == false){
routerState = true;
} else {
routerState = false;
}
}
switchActive = false;
} else {
Serial.println("switch high");
if(switchActive == false){
switchStart = currentTime;
switchActive = true;
} else if(switchActive == true && currentTime - switchStart > 2000) {
switchLedState = true;
}
Serial.println(switchActive);
}
//switch led
if(val == 0){
if(switchLedState == true){
ledOut = 255;
} else {
ledOut = 0;
}
} else {
if(switchLedState == false){
ledOut = val / 4;
} else {
ledOut = 0;
}
}
//status led blink
if(currentTime - statusLedTime >= 1000){
Serial.println("blink time expired");
statusLedTime = currentTime;
if(digitalRead(statusLed) == HIGH){
digitalWrite(statusLed, LOW);
} else {
digitalWrite(statusLed, HIGH);
}
}
//write data to outputs
analogWrite(ledOut1, ledOut);
analogWrite(ledOut2, ledOut);
if(routerState == true){
digitalWrite(routerSwitchOut, HIGH);
} else {
digitalWrite(routerSwitchOut, LOW);
}
}
The problem is that the relays are working fine as long as the arduino is connected to the PC. Once I disconect and everything is power over a 12V adapter, the relays are switching like at least 10 times per second and stop doing this as long as the button is pressed. I can't find any circuit problems and the switching is done by the adruino if I may believe my scope.
Can someone please help me searching for a way to debug? Because it is only occuring while there is no USB connected, I am unable to use the serial monitor.
Thanks for the support
Laurens