Program na attiny symulujący zapalającą się świetkówkę
Moderatorzy: moderatorzy2014, moderatorzy
Program na attiny symulujący zapalającą się świetkówkę
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
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
Re: Program na attiny symulujący zapalającą się świetkówkę
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
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();
}
...i tak nie skończysz na jednym ani na dwóch
Re: Program na attiny symulujący zapalającą się świetkówkę
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ś.
Wysoki na pinie to włącz LED, niski na pinie to zgaś.
Pzdr. -----MIŚ-----
Re: Program na attiny symulujący zapalającą się świetkówkę
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.
...i tak nie skończysz na jednym ani na dwóch
Re: Program na attiny symulujący zapalającą się świetkówkę
A diodę masz do masy czy do plusa ? W każdym bądź razie powinna być odwrotnie niż masz teraz
A jak chcesz zmienić w sofcie to zmień
digitalWrite(DATA_PIN, on);
na
digitalWrite(DATA_PIN, !on);
A jak chcesz zmienić w sofcie to zmień
digitalWrite(DATA_PIN, on);
na
digitalWrite(DATA_PIN, !on);
Pzdr. -----MIŚ-----
- StaryDzolero
- Posty: 77
- Rejestracja: czwartek 06 sie 2015, 09:44
- Lokalizacja: Poznań
Re: Program na attiny symulujący zapalającą się świetkówkę
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);
}
Hexa Tarot 690__| Lisam LS210
Pioneer 1400____| Hubsan Q4
Hubsan h107d___| QAV250
Eachine QX90____| s500
i się rozrasta :)
Pioneer 1400____| Hubsan Q4
Hubsan h107d___| QAV250
Eachine QX90____| s500
i się rozrasta :)
Re: Program na attiny symulujący zapalającą się świetkówkę
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.
...i tak nie skończysz na jednym ani na dwóch
Re: Program na attiny symulujący zapalającą się świetkówkę
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.mikun pisze: zmieniłem w ostatniej linijce kodu z true na false
Pzdr. -----MIŚ-----