Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • leger/avrcte
  • leger/avrcwa
2 results
Show changes
......@@ -28,10 +28,11 @@ void vanne_init()
vanne_internal_status = EV_MID;
}
uint8_t vanne_internal_step_close(uint16_t d)
uint8_t vanne_internal_step_close(uint16_t d, uint8_t force)
{
if(vanne_internal_status == EV_CLOSED)
return 1;
if(!force)
if(vanne_internal_status == EV_CLOSED)
return 1;
if(d<VANNE_ACTION_LIMIT)
return 0;
......@@ -45,8 +46,9 @@ uint8_t vanne_internal_step_close(uint16_t d)
VANNE_CMD_PORT.OUTSET = VANNE_CMD_CLOSE_bm;
for(k=0;k<d;k++)
_delay_ms(1);
if(!(VANNE_SENSOR_PORT.IN & VANNE_SENSOR_CLOSE_bm))
vanne_internal_status = EV_CLOSED;
if(!force)
if(!(VANNE_SENSOR_PORT.IN & VANNE_SENSOR_CLOSE_bm))
vanne_internal_status = EV_CLOSED;
VANNE_CMD_PORT.OUTCLR = VANNE_CMD_CLOSE_bm;
if(vanne_internal_status == EV_CLOSED)
......@@ -54,10 +56,11 @@ uint8_t vanne_internal_step_close(uint16_t d)
return 0;
}
uint8_t vanne_internal_step_open(uint16_t d)
uint8_t vanne_internal_step_open(uint16_t d, uint8_t force)
{
if(vanne_internal_status == EV_OPENED)
return 1;
if(!force)
if(vanne_internal_status == EV_OPENED)
return 1;
if(d<VANNE_ACTION_LIMIT)
return 0;
......@@ -71,8 +74,9 @@ uint8_t vanne_internal_step_open(uint16_t d)
VANNE_CMD_PORT.OUTSET = VANNE_CMD_OPEN_bm;
for(k=0;k<d;k++)
_delay_ms(1);
if(!(VANNE_SENSOR_PORT.IN & VANNE_SENSOR_OPEN_bm))
vanne_internal_status = EV_OPENED;
if(!force)
if(!(VANNE_SENSOR_PORT.IN & VANNE_SENSOR_OPEN_bm))
vanne_internal_status = EV_OPENED;
VANNE_CMD_PORT.OUTCLR = VANNE_CMD_OPEN_bm;
if(vanne_internal_status == EV_OPENED)
......@@ -80,7 +84,7 @@ uint8_t vanne_internal_step_open(uint16_t d)
return 0;
}
uint8_t vanne_step_close(uint16_t d)
uint8_t vanne_step_close(uint16_t d, uint8_t force)
{
uint16_t steps = d/(d/101+1);
uint16_t k;
......@@ -88,16 +92,16 @@ uint8_t vanne_step_close(uint16_t d)
for(k=0;k<d;k+=steps)
{
if(k+steps<=d)
ret = vanne_internal_step_close(steps);
ret = vanne_internal_step_close(steps, force);
else
ret = vanne_internal_step_close(d-k);
ret = vanne_internal_step_close(d-k, force);
if(ret)
return ret;
}
return ret;
}
uint8_t vanne_step_open(uint16_t d)
uint8_t vanne_step_open(uint16_t d, uint8_t force)
{
uint16_t steps = d/(d/101+1);
uint16_t k;
......@@ -105,9 +109,9 @@ uint8_t vanne_step_open(uint16_t d)
for(k=0;k<d;k+=steps)
{
if(k+steps<=d)
ret = vanne_internal_step_open(steps);
ret = vanne_internal_step_open(steps, force);
else
ret = vanne_internal_step_open(d-k);
ret = vanne_internal_step_open(d-k, force);
if(ret)
return ret;
}
......@@ -118,29 +122,54 @@ void vanne_close()
{
uint16_t k;
for(k=0;k<1000;k++)
if(vanne_internal_step_close(10))
if(vanne_internal_step_close(10,0))
break;
vanne_internal_status = EV_CLOSED;
}
void vanne_open()
void vanne_force_close()
{
uint16_t k;
for(k=0;k<1000;k++)
if(vanne_internal_step_open(10))
if(vanne_internal_step_close(10,1))
break;
vanne_internal_status = EV_CLOSED;
}
void vanne_vidange()
void vanne_open()
{
uint16_t k;
vanne_close();
for(k=0;k<1000;k++)
if(vanne_internal_step_open(10))
if(vanne_internal_step_open(10,0))
break;
vanne_internal_status = EV_OPENED;
}
void vanne_vidange()
{
uint16_t kclose;
uint16_t kopen;
vanne_close();
for(kopen=0;kopen<1000;kopen++)
if(vanne_internal_step_open(10,0))
break;
for(kclose=0;kclose<1000;kclose++)
if(vanne_internal_step_close(10,0))
break;
uint8_t kmin;
if(kopen<900)
kmin = kopen/2;
else
{
if(kclose<900)
kmin = kclose/2;
else
kmin = 50;
}
uint16_t k2=0;
for(k2=0;k2<k/2;k2++)
if(vanne_internal_step_open(10))
for(k2=0;k2<kmin;k2++)
if(vanne_internal_step_open(10,1))
break;
}
///[[[end]]]
......
......@@ -44,11 +44,12 @@ typedef enum state_ev
extern volatile ev_state_t vanne_internal_status;
void vanne_init();
uint8_t vanne_internal_step_close(uint16_t d);
uint8_t vanne_internal_step_open(uint16_t d);
uint8_t vanne_step_close(uint16_t d);
uint8_t vanne_step_open(uint16_t d);
uint8_t vanne_internal_step_close(uint16_t d, uint8_t force);
uint8_t vanne_internal_step_open(uint16_t d, uint8_t force);
uint8_t vanne_step_close(uint16_t d, uint8_t force);
uint8_t vanne_step_open(uint16_t d, uint8_t force);
void vanne_close();
void vanne_force_close();
void vanne_open();
void vanne_vidange();
#endif
......