// FOR ARDUINO NANO
#define PIN_OUTPUT 3 // Pin for Output Signal
#define LED_CONTROL 5 // Pin for LED, to show info what controller is doing
#define PIN_BUTTON 2 //Button for simple controlling
/*
PWM-Pins on Arduino Nano:
3,9,10,11 with 490 Hz
5,6 with 980 Hz
Change PWM frequency: https://www.etechnophiles.com/how-to-change-the-pwm-frequency-of-arduino-nano/
*/
// FOR DIGISPARK
//#define PIN_OUTPUT 3 // Pin for Output Signal
//#define LED_CONTROL 0 // Pin for LED, to show info what controller is doing
//#define PIN_BUTTON 2 //Button for simple controlling
/*
Digispark: https://digistump.com/wiki/digispark/tutorials/connecting
*/
void setup() {
delay(2000);
// Set PinModes
// PWM FREQUENCY FOR ARDUINO NANO ONLY!!!!!
// PWM FREQUENCY FOR PIN 3 & 11
// TCCR2B = TCCR2B & B11111000 | B00000001; // for PWM frequency of 31372.55 Hz
// TCCR2B = TCCR2B & B11111000 | B00000010; // for PWM frequency of 3921.16 Hz
// TCCR2B = TCCR2B & B11111000 | B00000011; // for PWM frequency of 980.39 Hz
// TCCR2B = TCCR2B & B11111000 | B00000100; // for PWM frequency of 490.20 Hz (The DEFAULT)
// TCCR2B = TCCR2B & B11111000 | B00000101; // for PWM frequency of 245.10 Hz
// TCCR2B = TCCR2B & B11111000 | B00000110; // for PWM frequency of 122.55 Hz
// TCCR2B = TCCR2B & B11111000 | B00000111; // for PWM frequency of 30.64 Hz
// PWM FREQUENCY FOR PIN 5 & 6
// TCCR0B = TCCR0B & B11111000 | B00000001; // for PWM frequency of 62500.00 Hz
// TCCR0B = TCCR0B & B11111000 | B00000010; // for PWM frequency of 7812.50 Hz
// TCCR0B = TCCR0B & B11111000 | B00000011; // for PWM frequency of 976.56 Hz (The DEFAULT)
// TCCR0B = TCCR0B & B11111000 | B00000100; // for PWM frequency of 244.14 Hz
// TCCR0B = TCCR0B & B11111000 | B00000101; // for PWM frequency of 61.04 Hz
// PWM FREQUENCY FOR PIN 9 & 10
// TCCR1B = TCCR1B & B11111000 | B00000001; // for PWM frequency of 31372.55 Hz
// TCCR1B = TCCR1B & B11111000 | B00000010; // for PWM frequency of 3921.16 Hz
// TCCR1B = TCCR1B & B11111000 | B00000011; // for PWM frequency of 490.20 Hz (The DEFAULT)
// TCCR1B = TCCR1B & B11111000 | B00000100; // for PWM frequency of 122.55 Hz
// TCCR1B = TCCR1B & B11111000 | B00000101; // for PWM frequency of 30.64 Hz
// DIGISPARK DEFAULT PWM FREQUENXY IS
// PIN0 504
// PIN1 504
// PIN4 1007 (USB), can NOT be used
pinMode(PIN_OUTPUT, OUTPUT);
pinMode(LED_CONTROL, OUTPUT);
pinMode(PIN_BUTTON, INPUT);
// Check Button is not pressed
while (digitalRead(PIN_BUTTON) != LOW) {
blink_control(2, 250);
delay(250);
}
delay(500);
blink_control(2, 1000);
delay(2000);
// Set pin states
digitalWrite(PIN_OUTPUT, LOW);
digitalWrite(LED_CONTROL, LOW);
// Initialize Mode START
blink_control(3, 300);
delay(1000);
// Test output function
doSomething();
// Initialize Mode END
delay(500);
digitalWrite(LED_CONTROL, HIGH);
delay(1000);
digitalWrite(LED_CONTROL, LOW);
delay(200);
}
uint8_t modulator = 10; // 1 out of '15' will trigger
uint16_t timer = 200; // delay for random generator
// mean trigger time = "modulator * timer / 1000"
void loop() {
if ((random(modulator) + 1) % modulator == 0) {
doSomething();
} else {
delay(timer);
}
while(digitalRead(PIN_BUTTON) == HIGH) {
doSomething();
}
}
/* CUSTOM FUNCTIONS */
void doSomething() {
// blink_control(1, 300);
stroboPop();
}
void stroboPop() {
uint16_t stroboFlashCount = random(7,13);
uint16_t lowHz = uint16_t(1000/15); // 66 ms | 15 Hz
uint16_t highHz = uint16_t(1000/25); // 40 ms | 25 Hz
uint16_t dtime = random(highHz, lowHz); // Random dtime between 15 & 25 Hz
for(uint8_t n = 0; n < stroboFlashCount; n++) {
digitalWrite(PIN_OUTPUT, HIGH);
delay(uint16_t(dtime*0.1));
digitalWrite(PIN_OUTPUT, LOW);
delay(uint16_t(dtime*0.9));
}
}
void carHorn() {
}
void blink_control(uint8_t count, uint16_t dtime) {
for (uint8_t n = 0; n < count; n++) {
digitalWrite(LED_CONTROL, HIGH);
delay(dtime / 2);
digitalWrite(LED_CONTROL, LOW);
delay(dtime / 2);
}
}