Strona 1 z 1

Program na attiny symulujący zapalającą się świetkówkę

: środa 27 lip 2011, 22:05
autor: mikun
Czy ktoś z kolegów widział/znalazł/wie gdzie mogę znaleźć wsad do attiny który wysteruje tranzystor zapalając diodę LED tak jakby włączała się świetlówka na zwykłym starterze? Chodzi mi o to by mrugała spontanicznie przed zapaleniem jak robi to świetlówka starego typu na bimetalicznym starterze?


Coś na wzór tego na filmie (trzeba przewinąć do 4:50 i poczekać parę sekund :-) ) tyle że 2 razy wolniej

Wyświetlanie na innych stronach niż YT zostało wyłączone trzeba kliknąć na OBEJRZYJ W YOUTUBE


: środa 27 lip 2011, 22:19
autor: ECO400
nie wiem, ale fajna scena :-P
wcześniej nie oglądałem tego filmu

: czwartek 28 lip 2011, 08:26
autor: slawko_k
Na filmie widać jakby 3-4 razy szybko błysnęło i zapala się.
Potrzebujesz coś takiego czy faktycznie losowej spontaniczności świetlówki

: czwartek 28 lip 2011, 10:21
autor: mikun
Potrzebuje coś takiego jak na filmie chyba lepiej się zapala niż stara świetlówka :-) +5 do lansu heh

Re: Program na attiny symulujący zapalającą się świetkówkę

: niedziela 19 lis 2017, 13:54
autor: mikun
Odkopuję temat z przed ponad 6ciu lat, kurka dałbym głowę że pisałem tego posta max 3 lata temu :). Dorwałem kod ale jest na WS2811, kod nie działa z WS2812 mimo iż czytałem że sygnałowo są kompatybilne. Czy ktoś z kolegów obeznanych w programowaniu arduino mógłby mi zmienić kod na zwykłą diodę LED lub na WS2812? Jeśli oczywiście nie ma za dużo grzebania :)



Filmik z działania:






Kod

Kod: Zaznacz cały

#define DATA_PIN 3
#define BUTTON_PIN 4

boolean lightOn = 0;

void setup() { 
  pinMode(DATA_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT);     
}

const int blinkOn[] = {10, 20, 20, 240, 20, 40, 20, 100, 20, 20, 20, 260, 80, 20, 240, 60, 160, 20, 240, 20, 1000, 20, 20, 40, 100, 20, 2740, 340, 860, 20, 1400, 20, 60, 20};

void allOn(boolean on) {
  digitalWrite(DATA_PIN, on);
}  

void updateLeds() {
  allOn(lightOn);
}

boolean myDelay(unsigned int ms) {
  unsigned long startTime = millis();
  unsigned long endTime = startTime+ms; 
  

  while(millis() < endTime) {
    if(!digitalRead(BUTTON_PIN)) {
      return 1;
    }
    // Update colour and intencity of leds
    updateLeds();
    delay(1);
  }
  return 0;
}

void turnOn() {
  // Don't flicker, if the light is already on
  if(lightOn)
    return;
    
  // Start to flicker
  for(int i=0; i<sizeof(blinkOn)/sizeof(int); ++i) {
    lightOn = !(i&1);
    if(myDelay(blinkOn[i])) {
      // Button is no longer pushed
      allOn(false);
      lightOn = false;
      return;
    }
  }

  // Make sure the light is actually on
  allOn(true);
  lightOn = true;
}

void turnOff() {
  lightOn = false;
  allOn(false);
}

void loop() { 
  delay(100);
  if(digitalRead(BUTTON_PIN))
    turnOn();
  else 
    turnOff();
}

Re: Program na attiny symulujący zapalającą się świetkówkę

: niedziela 19 lis 2017, 23:47
autor: miś
Przecież ten kod jest do zwykłej ledy sterowanej z pinu D3 arduino a nie do jakichśtam WS'ów...
Wysoki na pinie to włącz LED, niski na pinie to zgaś.

Re: Program na attiny symulujący zapalającą się świetkówkę

: wtorek 21 lis 2017, 22:58
autor: mikun
Wgrałem kod na digisparka ale dzieje się odwrotnie :) po podaniu zasilania dioda się włącza i świeci. W momencie kiedy podam stan wysoki na port 4 dioda zaczyna symulować świetlówkę po czym gaśnie.

Re: Program na attiny symulujący zapalającą się świetkówkę

: środa 22 lis 2017, 00:53
autor: miś
A diodę masz do masy czy do plusa ? W każdym bądź razie powinna być odwrotnie niż masz teraz :mrgreen:
A jak chcesz zmienić w sofcie to zmień
digitalWrite(DATA_PIN, on);
na
digitalWrite(DATA_PIN, !on);

Re: Program na attiny symulujący zapalającą się świetkówkę

: środa 22 lis 2017, 15:12
autor: StaryDzolero
mikun, nie prościej bez przycisku ? Będziesz miał tak jak opisujesz w pierwszym poście ;P

Kod: Zaznacz cały

#define DATA_PIN 3
boolean lightOn = 0;

void setup() { 
  pinMode(DATA_PIN, OUTPUT);    
}

const int blinkOn[] = {10, 20, 20, 240, 20, 40, 20, 100, 20, 20, 20, 260, 80, 20, 240, 60, 160, 20, 240, 20, 1000, 20, 20, 40, 100, 20, 2740, 340, 860, 20, 1400, 20, 60, 20};

void allOn(boolean on) {
  digitalWrite(DATA_PIN, on);
}  

void updateLeds() {
  allOn(lightOn);
}

boolean myDelay(unsigned int ms) {
  unsigned long startTime = millis();
  unsigned long endTime = startTime+ms; 
  

  while(millis() < endTime) {
    updateLeds();
    delay(1);
  }
  return 0;
}

void turnOn() {
  // Don't flicker, if the light is already on
  if(lightOn) return;
    
  // Start to flicker
  for(int i=0; i<sizeof(blinkOn)/sizeof(int); ++i) {
    lightOn = !(i&1);
    myDelay(blinkOn[i]);
  }

  // Make sure the light is actually on
  allOn(true);
  lightOn = true;
}

void loop() { 
  if(!lightOn) turnOn();
  else allOn(true);
}

Re: Program na attiny symulujący zapalającą się świetkówkę

: środa 22 lis 2017, 22:03
autor: mikun
Dzięki StaryDzolero masz rację bez tego przycisku o wiele lepiej :-) tyle że po mruganiu dioda gasła. Z programowania jestem kiepski wręcz zerowy :-) ale kombinowaniem zmieniłem w ostatniej linijce kodu z true na false i już świeci cały czas. Teraz tylko już dobrać wartości z piątej linijki kodu. Miś i StaryDzolero dziękuję za pomoc.

Re: Program na attiny symulujący zapalającą się świetkówkę

: środa 22 lis 2017, 23:58
autor: miś
mikun pisze: zmieniłem w ostatniej linijce kodu z true na false
A miałeś zmienić tak jak ja Ci proponowałem (z tym !on). Bo teraz na końcu Ci się zaświeca na stałe, ale przy miganiu czasy masz odwrócone, czyli w momencie jak ma być zgaszone to się świeci i na odwrót. Dla tego wygląda to nienaturalnie.