LED posūkių tarpinis progamos variantas

Tobulinant  LED posūkių programą pamaniau būtų neblogai išsisaugoti tarpinį variantą. Tarpiniu variantu vadinu todėl, jog dabar programoje prikūriau įvairių funkcijų LED šviesos diodų uždegimui (dar mąstau apie kelias papildomas), o pačių posūkių valdymo funkcijos kaip dar ir neparašiau, na bet jau su turimomis funkcijomis tai nebus padaryti sunku. O kol kas pati programa:


Programos kodas:
/*
* WS2812B.c
*
* Created: 2017.09.30 17:25:58
* Author : Saulius Stasys
*/

// laiko intervalų nustatymai
#define F_CPU 8000000

#define LED 10 //LED skaičius

#define T0 0.35// laiko intervalas 1
#define T1 0.9//laiko0 intervalas 2

#define slide 30 // laiko intervalas šliaužimui

//išeinantys signalai
#define OUTPORT PORTB //LED valdymo portas
#define OUTDR DDRB

#define OUTDDR PB3 //Kairės pusės LED valdymo kontaktas
#define OUTDDR1 PB4 //Dešinės pusės LED valdymo kontaktas

//Įeinantys signalai
#define INDDR DDRB //Valdymo registras
#define INPIN PINB

#define INLIDDR DDB0 //Ilgų kontaktas
#define INLDDR DDB1 //Kairio posūkio kontaktas
#define INRDDR DDB2 //Dešinio posūkio

#include <util/delay.h>
#include <avr/io.h>
#include <avr/eeprom.h>

//signalų generavimo funkcija
void rgb(uint8_t r,uint8_t z, uint8_t m, uint8_t as )
{
//zalia spalva
//8bit
uint8_t ch;
for (uint8_t h=0;h<3;h++) { if(h==0) ch=z; if(h==1) ch=r; if(h==2) ch=m; //8bit if (ch-128>0)
{
ch-=128;
OUTPORT=1<<as;
_delay_us(T1);
OUTPORT=0<<as;
_delay_us(T0);
}
else
{
OUTPORT=1<<as;
_delay_us(T0);
OUTPORT=0<<as;
_delay_us(T1);
}

//7bit
if((ch-64<128)&&(ch>63))
{
ch-=64;
OUTPORT=1<<as;
_delay_us(T1);
OUTPORT=0<<as;
_delay_us(T0);
}
else
{
OUTPORT=1<<as;
_delay_us(T0);
OUTPORT=0<<as;
_delay_us(T1);
}

//6bit
if((ch-32<64)&&(ch>31))
{
ch-=32;
OUTPORT=1<<as;
_delay_us(T1);
OUTPORT=0<<as;
_delay_us(T0);
}
else
{
OUTPORT=1<<as;
_delay_us(T0);
OUTPORT=0<<as;
_delay_us(T1);
}

//5bit
if((ch-16<32)&&(ch>15))
{
ch-=16;
OUTPORT=1<<as;
_delay_us(T1);
OUTPORT=0<<as;
_delay_us(T0);
}
else
{
OUTPORT=1<<as;
_delay_us(T0);
OUTPORT=0<<as;
_delay_us(T1);
}

//4bit
if((ch-8<16)&&(ch>7))
{
ch-=8;
OUTPORT=1<<as;
_delay_us(T1);
OUTPORT=0<<as;
_delay_us(T0);
}
else
{
OUTPORT=1<<as;
_delay_us(T0);
OUTPORT=0<<as;
_delay_us(T1);
}

//3bit
if((ch-4<8)&&(ch>3))
{
ch-=4;
OUTPORT=1<<as;
_delay_us(T1);
OUTPORT=0<<as;
_delay_us(T0);
}
else
{
OUTPORT=1<<as;
_delay_us(T0);
OUTPORT=0<<as;
_delay_us(T1);
}

//2bit
if((ch-2<4)&&(ch>1))
{
ch-=2;
OUTPORT=1<<as;
_delay_us(T1);
OUTPORT=0<<as;
_delay_us(T0);
}
else
{
OUTPORT=1<<as;
_delay_us(T0);
OUTPORT=0<<as;
_delay_us(T1);
}

//1bit
if(ch==1)
{
ch-=1;
OUTPORT=1<<as;
_delay_us(T1);
OUTPORT=0<<as;
_delay_us(T0);
}
else
{
OUTPORT=1<<as;
_delay_us(T0);
OUTPORT=0<<as;
_delay_us(T1);
}
}

}

void fixrgb(uint8_t r,uint8_t z, uint8_t m, uint8_t sk, uint8_t as)
{
for (uint8_t i=0;i<sk;i++)rgb(r,z,m,as);
_delay_us(200);
}

void fromto(uint8_t r,uint8_t z, uint8_t m, uint8_t sk, uint8_t sk2, uint8_t as)
{
for (uint8_t i=0;i<sk;i++)rgb(0,0,0,as);
for (uint8_t i=sk;i<sk2;i++)rgb(r,z,m,as);
_delay_us(50);
}

void snake(uint8_t r,uint8_t z, uint8_t m, uint8_t sk, uint8_t as)
{
for (uint8_t i=0;i<sk;i++)
{
for (uint8_t o=0;o<i;o++)rgb(r,z,m,as); _delay_ms(slide); } } void revsnake(uint8_t r,uint8_t z, uint8_t m, uint8_t r1,uint8_t z1, uint8_t m1, uint8_t sk, uint8_t as) { for (uint8_t i=sk;i>0;i–)
{
for (uint8_t o=0;o<i;o++)rgb(r,z,m,as);
for (uint8_t o=0;o<sk-i;o++)rgb(r1,z1,m1,as);
_delay_ms(slide);
}
}

 

void slidebar(uint8_t r,uint8_t z, uint8_t m, uint8_t r1,uint8_t z1, uint8_t m1, uint8_t sk2, uint8_t sk, uint8_t as)
{
for (uint8_t i=0;i<sk;i++)
{
if (i<sk2)for (uint8_t o=0;o<i;o++)rgb(r,z,m,as);
else
{
for (uint8_t o=0;o<i-sk2;o++)rgb(r1,z1,m1,as);
for (uint8_t o=i-sk2;o<i;o++)rgb(r,z,m,as);
}
_delay_ms(slide);
}
for (uint8_t i=sk-sk2;i<sk;i++)
{
for (uint8_t o=0;o<i;o++)rgb(r1,z1,m1,as);
_delay_ms(slide);
}

}

int main(void)
{
_delay_ms(200);
if(INDDR==OUTDR)INDDR=0<<INLIDDR|0<<INLDDR|0<<INRDDR|1<<OUTDDR|1<<OUTDDR1;
else
{
INDDR=0<<INLIDDR|0<<INLDDR|0<<INRDDR;
OUTDR=1<<OUTDDR|1<<OUTDDR1;
}

uint8_t a=0,b=0,c=0,k=0,p=0,kr=0;

p=eeprom_read_byte(0);

while (1)
{

/*
fromto(1,0,0,40,50,OUTDDR);
//_delay_ms(100);
fromto(0,1,0,0,40,OUTDDR);
//_delay_ms(100);*/
/*
fromto(1,0,0,0,3,OUTDDR);
_delay_ms(100);*/

//fromto(0,1,0,0,60,OUTDDR);
//slidebar(0,0,1,1,0,0,50,60,OUTDDR);

snake(25,9,0,10,OUTDDR);
revsnake(25,9,0,25,14,6,10,OUTDDR);

}

}


Leave a Reply

avatar
  Prenumeruoti  
Pranešti apie