Fyra kanal 'Fake TV' med Arduino eller Attiny (3 / 4 steg)
Steg 3: Falska TV-Attiny kod
Koden för Attiny85 är följande:
Obs: instructables är känt att skruva upp koden med den "mindre än-tecken" (och tydligen gjorde här också) jag lägga koden i codebender:
/ * Fyra PWM utgångar * /
http://www.technoblogy.com/show?LE0
ATtiny85 utgångar
kod anpassad för falska TV
CONST int rött = 0;
CONST int grön = 1;
CONST int blå = 2;
CONST int BluePin = 4;
CONST int vit = 3;
int randpwm = 0;
flyktiga uint8_t-Port [] = {
& OCR0A, OCR0B, OCR1A, & & OCR1B};
void setup() {
pinMode (röd, OUTPUT);
pinMode (gröna, OUTPUT);
pinMode (BluePin, OUTPUT);
pinMode (White, OUTPUT);
digitalWrite(3,HIGH);
Konfigurera counter/timer0 för snabb PWM på PB0 och PB1
TCCR0A = 3 << COM0A0 | 3 << COM0B0 | 3 << WGM00;
TCCR0B = 0 << WGM02 | 3 << CS00; Valfritt. redan
Konfigurera counter/timer1 för snabb PWM på PB4
TCCR1 = 1 << CTC1 | 1 << PWM1A | 3 << COM1A0 | 7 << CS10;
GTCCR = 1 << PWM1B | 3 << COM1B0;
Avbrott på OC1A match och bräddavlopp
TIMSK = TIMSK | 1 << OCIE1A | 1 << TOIE1;
}
ISR(TIMER1_OVF_vect) {
bitClear (PORTB, vit);
}
Anger färg röd = 0 grön = 1 blå = 2 vit = 3
till angivna intensitet 0 (off) till 255 (max)
void SetColour (int färg, int intensitet) {
* Port [färg] = 255 - intensitet;
}
void loop()
{
för (int jag = 0; jag < 10; i ++) //play scen 1 flera gånger
{
scene1();
}
om (random(2) == 1) //Possibly ring scen 2
{
scene2();
}
om (random(2) == 1) //Possibly ring scen 3
{
scene3();
}
om (random(2) == 1) //Possibly ring scen 4
{
scene4();
}
om (random(4) == 1) //Possibly göra ett reklamavbrott
{
Commercial();
}
}
Dessa är de viktigaste scen algoritmerna
void scene1()
Förändringar slumpmässigt ljus nivåer och dröjer-gånger
av alla färger att simulera "normal" TV action
{
randpwm = random(20,255);
SetColour(Red,randpwm);
randpwm = random(20,255);
SetColour(Green,randpwm);
randpwm=random(10,225);
SetColour (blå, randpwm);
randpwm=random(10,175);
SetColour(White,randpwm);
Delay(Random(500,2000));
}
void scene2()
Ökar intensiteten i wht, blu (fade-in)
{
Delay(1000);
för (int jag = 2; jag < 255; i ++)
{
analogWrite(blu,i);
analogWrite(wht,i);
SetColour(Blue,i);
SetColour(White,i);
Delay(20);
}
}
void scene3()
Flimrar wht, blu för en flickeriing scen effekt
{
Serial.println ("scen 3");
booleska sw = hög;
för (int jag = 0; jag < 30; i ++)
{
digitalWrite(3,sw);
digitalWrite(BluePin,sw);
digitalWrite(White,sw);
SW =! sw;
Delay(Random(50,300));
}
}
void scene4()
Förändringar röd/grn ljusnivåer endast
wht/blu är avstängda
{
Använd inte wht/blu
digitalWrite(White,LOW);
digitalWrite(BluePin,LOW);
för (int jag = 0; jag < 12, i ++)
{
randpwm = random(20,255);
SetColour(Red,randpwm);
randpwm = random(20,255);
SetColour(Green,randpwm);
Delay(Random(200,2000));
}
}
void commercial()
Simulerar en switch till eller från ett reklamavbrott
{
SetColour(Red,2);
SetColour(Green,2);
SetColour(Blue,0);
SetColour(White,0);
Delay(Random(1000,2500));
}