本帖最后由 todd1345 于 2015-11-27 10:14 编辑
光控窗帘设计 28BYJ48为什么不根据脉冲数转相应圈数 而是一直在转?设置N值小一点就转动几十度,大一点就一直转了,为什么? 谢谢!
uchar code FFW[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
uchar code REV[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
int a;
int n;
char m_flag=1; //窗帘状态 0 关 1开
char mm;
sbit MAN_ATUO=P3^5;
sbit open_shart=P3^6;
uint m;
int MANATUO() //为0时 自动 为 1 时手动
{
if(MAN_ATUO==0)
{ { a=!a; }
while(!MAN_ATUO);
}
return a;
}
int openshart() //为 0时 关闭 为1时 打开
{
if(open_shart==0&&MANATUO()==1)
{ { n=!n; }
while(!open_shart);
}
return n;
}
void DelayMS(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
} }
void SETP_MOTOR_FFW(uchar n)
{
uchar i,j;
for(i=0;i<5*n;i++)
{
for(j=0;j<8;j++)
{
P1 = FFW[j];
DelayMS(2);
}}}
void SETP_MOTOR_REV(uchar n)
{
uchar i,j;
for(i=0;i<5*n;i++)
{
for(j=0;j<8;j++)
{
P1 = REV[j];
DelayMS(2);
}}}
//********************************************************************************************
if(MANATUO()==1) // 手动
{
if(openshart()==1 && m_flag==0) //开启信号。并且 窗子是关闭的 则打开。
{
m_flag=1;
SETP_MOTOR_FFW(N);
}
else if (openshart()==0&&m_flag==1)
{
m_flag=0;
SETP_MOTOR_REV(N);
}
}
/*************************************************************************************/
if(MANATUO()==1) // 手动
{
if(openshart()==1 && m_flag==0) //开启信号。并且 窗子是关闭的 则打开。
{
m_flag=1;
SETP_MOTOR_FFW(N);
}
else if (openshart()==0&&m_flag==1)
{
m_flag=0;
SETP_MOTOR_REV(N);
} }
if(MANATUO()==0) //自动
{
if(m_flag==0&&m_flag==1)
{
}
if(signal>=100&&m_flag==1) //自动关闭
{ m_flag=0;
SETP_MOTOR_REV(N);
}
else if(signal<=25&&m_flag==0) //自动打开窗帘
{ m_flag=1;
SETP_MOTOR_FFW(N);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我记得好像一共4098个脉冲 刚好转一圈来着~
一周热门 更多>