• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterowanie strobo
#1
Witam wszystkich użytkowników,

mam problem ze sterowaniem  on/off funkcji stroboskopowej.

Kod:
#define RED 0x0
#define BLUE 0x1

// Variable to track which LED is on
byte whichLED = RED;

// Where are the LEDs connected?
const int LED_Red = 7;
const int LED_Blue = 11;
const int switch = 4;

// State variables for the LEDs
byte Red_State = LOW;
byte Blue_State = LOW;
byte switch_state = LOW;

// Some delay values to change flashing behavior
unsigned long switchDelay = 250;
unsigned long strobeDelay = 50;

// Seed the initial wait for the strobe effect
unsigned long strobeWait = strobeDelay;

// Variable to see when we should swtich LEDs
unsigned long waitUntilSwitch = switchDelay;  // seed initial wait

void setup() {
  pinMode(LED_Red, OUTPUT);
  pinMode(LED_Blue, OUTPUT);
   pinMode(switch, INPUT);
}

void loop()

{ switch_state = digitalRead(switch);
    if (switch_state == HIGH)
{
   digitalWrite(LED_Red, Red_State);     // each iteration of loop() will set the IO pins,
   digitalWrite(LED_Blue, Blue_State);    // even if they don't change, that's okay

   // Toggle back and forth between the two LEDs
   if ((long)(millis() - waitUntilSwitch)>=0) {
       // time is up!
       Red_State = LOW;
       Blue_State = LOW;
       whichLED = !whichLED;  // toggle LED to strobe
       waitUntilSwitch += switchDelay;
   }

   // Create the stobing effect
   if ((long)(millis() - strobeWait)>=0) {
       if (whichLED == RED)
           Red_State = !Red_State;
       if (whichLED == BLUE)
           Blue_State = !Blue_State;
       strobeWait += strobeDelay;
   }
else
Red_State = LOW;
Blue_State = LOW;


}
}
niestety po przestawieniu wyłącznika w pozycję off jedna z diod zostaje w pozycji świecącej (jest to losowe zdarzenie, zależne w którym momencie funkcja została przerwana).

Pytanie:
- jak prawidłowo przerwać funkcję aby obie diody gasły?
 
Odpowiedź
#2
Po pierwsze ja nie masz rezystora podciagajocego to zmieni to" pinMode(switch, INPUT);" na" pinMode(switch, INPUT_PULLUP); " i zamieni " if (switch_state == HIGH)" na " if (switch_state == LOW)" i sprubuj teraz
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
(18-08-2017, 18:49)adix napisał(a): Po pierwsze ja nie masz rezystora podciagajocego to  zmieni to"  pinMode(switch, INPUT);" na"  pinMode(switch, INPUT_PULLUP); "  i zamieni " if (switch_state == HIGH)" na " if (switch_state == LOW)" i sprubuj teraz

Mam rezystor 10k podpięty do linii 5V (5V-->10kOhm--->switch). Po zmianie konfiguracji hardware'u nic się nie zmieniło. Zauważyłem, że jeśli na końcu kodu mam:
Kod:
else
Red_State = LOW;
Blue_State = LOW;
to niebieski led świeci się nieprzerwanie bez względu na stan switcha. Bez tych trzech linijek przerywam kod w trakcie jego trwania i jedna z diod zostaje w stanie HIGH (chyba, że trafię akurat w przełączenie między diodami to obie są LOW).
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości