Hi, i have small problem dimming led strip while counting millis. If i dim the led strip with delay(), it dims perfectly with no visible flashing. When dimmed while counting millis (i need arduino to check for button states) it flashes really fast and the flashing is visible. Is there anything i could do, to make it behave like when using delay()?
Here's the code for delay: (just the code in loop, other is code from experiment with millis)
// Declare the pins for the buttons and resistors
int leftBlinkerButton = 5;
int rightBlinkerButton = 6;
int brakeLightButton = 7;
int leftBlinkerTransistor = 2;
int rightBlinkerTransistor = 3;
int brakeTransistor = 4;
int blinkerOn = 300;
int blinkerOff = 500;
int brakeOn = 200;
int brakeHighOff = 0;
int brakeOff = 20;
int brakeLowOn = 10;
long leftBlinkerLast = 0;
long rightBlinkerLast = 0;
long brakeLast = 0;
unsigned long currentMillis = millis();
boolean leftBlinkerState;
boolean rightBlinkerState;
boolean brakeState;
void setup() {
Serial.begin(9600);
pinMode(leftBlinkerButton, INPUT_PULLUP);
pinMode(rightBlinkerButton, INPUT_PULLUP);
pinMode(brakeLightButton, INPUT_PULLUP);
pinMode(leftBlinkerTransistor, OUTPUT);
pinMode(rightBlinkerTransistor, OUTPUT);
pinMode(brakeTransistor, OUTPUT);
}
void loop() {
currentMillis = millis();
int brzdaValue = digitalRead(brakeLightButton);
if (brzdaValue == LOW){
digitalWrite(brakeTransistor, HIGH);
Serial.println("Brake ON");
}
else {
digitalWrite(brakeTransistor, LOW);
delay(10);
digitalWrite(brakeTransistor, HIGH);
delay(1);
Serial.println("Brake OFF");
}
}
void LeftBlinker(){
int buttonValueL = digitalRead(leftBlinkerButton);
if (buttonValueL == LOW){
if (currentMillis - leftBlinkerLast > (leftBlinkerState ? blinkerOn : blinkerOff)) {
digitalWrite(leftBlinkerTransistor, leftBlinkerState = !leftBlinkerState);
leftBlinkerLast = currentMillis;
Serial.println("Left Blink");
}
} else {
digitalWrite(leftBlinkerTransistor, LOW);
}
}
void RightBlinker(){
int buttonValueR = digitalRead(rightBlinkerButton);
if (buttonValueR == LOW){
if (currentMillis - rightBlinkerLast > (rightBlinkerState ? blinkerOn : blinkerOff)) {
digitalWrite(rightBlinkerTransistor, rightBlinkerState = !rightBlinkerState);
rightBlinkerLast = currentMillis;
Serial.println("Right Blink");
}
} else {
digitalWrite(rightBlinkerTransistor, LOW);
}
}
void Brake(){
int brzdaValue = digitalRead(brakeLightButton);
if (brzdaValue == LOW){
if (currentMillis - brakeLast > (brakeState)) {
digitalWrite(brakeTransistor, HIGH);
brakeLast = currentMillis;
Serial.println("Brake ON");
}
} else {
if (currentMillis - brakeLast > (brakeState ? brakeLowOn : brakeOff)) {
digitalWrite(brakeTransistor, brakeState = !brakeState);
brakeLast = currentMillis;
Serial.println("Brake OFF");
}
}
}
heres for millis:
// Declare the pins for the buttons and resistors
int leftBlinkerButton = 5;
int rightBlinkerButton = 6;
int brakeLightButton = 7;
int leftBlinkerTransistor = 2;
int rightBlinkerTransistor = 3;
int brakeTransistor = 4;
int blinkerOn = 300;
int blinkerOff = 500;
int brakeOn = 200;
int brakeHighOff = 0;
int brakeOff = 20;
int brakeLowOn = 10;
long leftBlinkerLast = 0;
long rightBlinkerLast = 0;
long brakeLast = 0;
unsigned long currentMillis = millis();
boolean leftBlinkerState;
boolean rightBlinkerState;
boolean brakeState;
void setup() {
Serial.begin(9600);
pinMode(leftBlinkerButton, INPUT_PULLUP);
pinMode(rightBlinkerButton, INPUT_PULLUP);
pinMode(brakeLightButton, INPUT_PULLUP);
pinMode(leftBlinkerTransistor, OUTPUT);
pinMode(rightBlinkerTransistor, OUTPUT);
pinMode(brakeTransistor, OUTPUT);
}
void loop() {
currentMillis = micros();
LeftBlinker();
RightBlinker();
Brake();
}
void LeftBlinker(){
int buttonValueL = digitalRead(leftBlinkerButton);
if (buttonValueL == LOW){
if (currentMillis - leftBlinkerLast > (leftBlinkerState ? blinkerOn : blinkerOff)) {
digitalWrite(leftBlinkerTransistor, leftBlinkerState = !leftBlinkerState);
leftBlinkerLast = currentMillis;
Serial.println("Left Blink");
}
} else {
digitalWrite(leftBlinkerTransistor, LOW);
}
}
void RightBlinker(){
int buttonValueR = digitalRead(rightBlinkerButton);
if (buttonValueR == LOW){
if (currentMillis - rightBlinkerLast > (rightBlinkerState ? blinkerOn : blinkerOff)) {
digitalWrite(rightBlinkerTransistor, rightBlinkerState = !rightBlinkerState);
rightBlinkerLast = currentMillis;
Serial.println("Right Blink");
}
} else {
digitalWrite(rightBlinkerTransistor, LOW);
}
}
void Brake(){
int brzdaValue = digitalRead(brakeLightButton);
if (brzdaValue == LOW){
if (currentMillis - brakeLast > (brakeState)) {
digitalWrite(brakeTransistor, HIGH);
brakeLast = currentMillis;
Serial.println("Brake ON");
}
} else {
if (currentMillis - brakeLast > (brakeState ? brakeLowOn : brakeOff)) {
digitalWrite(brakeTransistor, brakeState = !brakeState);
brakeLast = currentMillis;
Serial.println("Brake OFF");
}
}
}
Many thanks for help:)