Пример #1
0
/*
!!!! This function is designed for the controller !!!!!

Purpose: To send the commands to each floor node as needed
*/
void Floor(unsigned char floor, unsigned char sub_comp, unsigned char instruction)
{
	unsigned char data[DATA_LENGTH];
	
	if(sub_comp == CALL_SWITCH1)
	{
	    // Send led light so the user knows the car is coming
		data[0] = floor;
		data[1] = CALL_LED1;
		data[2] = ON;
		SCIprintf("%d%d%d", data[0], data[1], data[2]);
		(void)CANSend(floor, 0x00, 0x00, DATA_LENGTH, data);
		
		switch(floor)
			{
			    case F1:
			        LCDprintf("\nGo To: 1 \r",0);
			        break;
			    case F2:
			        LCDprintf("\nGo To: 2 \r",0);
			        break;
			    case F3:
			        LCDprintf("\nGo To: 3 \r",0);
			        break;
			}
        data[0] = PID;
        data[1] = SET_POINT;
        data[2] = floor;
        SCIprintf("%d%d%d", data[0], data[1], data[2]);
        (void)CANSend(PID, 0x00, 0x00, DATA_LENGTH, data);
			
	}
	else if(sub_comp == CALL_SWITCH2)
	{
        data[0] = floor;
		data[1] = CALL_LED2;
		data[2] = ON;
		SCIprintf("%d%d%d", data[0], data[1], data[2]);
		(void)CANSend(floor, 0x00, 0x00, DATA_LENGTH, data);
		
		switch(floor)
			{
			    case F1:
			        LCDprintf("\nGo To: 1 \r",0);
			        //dest_floor = F1;
			        break;
			    case F2:
			        LCDprintf("\nGo To: 2 \r",0);
			        break;
			    case F3:
			        LCDprintf("\nGo To: 3 \r",0);
			        break;
			}
        data[0] = PID;
        data[1] = SET_POINT;
        data[2] = floor;
        SCIprintf("%d%d%d", data[0], data[1], data[2]);
        (void)CANSend(PID, 0x00, 0x00, DATA_LENGTH, data);	    
	}
}
Пример #2
0
/*
!!!! This function is designed for the controller !!!!!

Purpose: Send out instructions from the elevator car node
  Input: Requests from the car node
*/
void Car(unsigned char sub_comp, unsigned char instruction)
{
	static unsigned char data[DATA_LENGTH];
	
	switch(sub_comp)
	{
		// Floor button
		case FLOOR_BUTTON:
			// From the elevator car node to the disance sensor
			/*data[0] = PID;
			data[1] = SET_POINT;
			data[2] = instruction;
			SCIprintf("%d%d%d", data[0], data[1], data[2]);
			(void)CANSend(PID, 0x00, 0x00, DATA_LENGTH, data);*/
			
			// From the car back to the car
			data[0] = CAR;
			data[1] = BUTTON_INDICATOR_ON;
			data[2] = instruction;
			SCIprintf("%d%d%d", data[0], data[1], data[2]);
			(void)CANSend(CAR, 0x00, 0x00, DATA_LENGTH, data);
			
    		switch(instruction)
			{
			    case 3:
			        LCDprintf("\nGo To: 1 \r",0);
			        break;
			    case 4:
			        LCDprintf("\nGo To: 2 \r",0);
			        break;
			    case 5:
			        LCDprintf("\nGo To: 3 \r",0);
			        break;
			}
			break;
	    case 1:
	        data[0] = CAR;
			data[1] = 1;
			data[2] = instruction;
			SCIprintf("%d%d%d", data[0], data[1], data[2]);
			(void)CANSend(CAR, 0x00, 0x00, DATA_LENGTH, data);		
			break;
			
		// E-Stop
		case E_STOP:
			break;
	}
}
Пример #3
0
void CANGetData(st_cmd_t* Rx){
	can_get_status(Rx);
	CANGIE|=(1<<ENIT);
	if(can_Status==CAN_Pending){
		can_Status=CAN_Send;
		CANSend();
	}
}
Пример #4
0
void CANSendData(void){
	if(can_queue_head!=can_queue_tail){
		if(can_rx!=0){
			CANGIE&=~(1<<ENRX);
			can_rx->cmd=CMD_ABORT;
			can_cmd(can_rx);
			while(can_get_status(can_rx)==CAN_STATUS_NOT_COMPLETED);
		}
		if(CANGIE&(1<<ENIT)){
			can_Status=CAN_Send;
			CANSend();
		}else{
			can_Status=CAN_Pending;
		}	
	}else if(can_rx!=0){
		can_rx->cmd=CMD_RX_DATA;
		can_cmd(can_rx);
		CANGIE|=(1<<ENRX);
	}
}
Пример #5
0
void main(void) 
{
  /* put your own code here */
  
  SET_TCNT_PRESCALE( TCNT_PRESCALE_8);
	TSCR1 = TSCR1_INIT;
  
	seg_init();
	CANinit(THE_FLOOR);
	SET_BITS(LED_DDR, LED1_MASK|LED2_MASK);

	node_id = PORTB & 3; //get hardware specified node id
	
	while (!(CANCTL0&0x10));

	CANRFLG = 0xC3;
	CANRIER = 0x01;

	InitializeQueue(&rec);	// Create the Recieve Queue
	
	
	
     clear_seg();

	EnableInterrupts;

  for(;;) 
  {

	if(IsQueueEmpty(rec) != 0)
	{		
		DeQueue(&rec);
		Parse_Floor();
	}
  
  // button 1 press
    if((PTJ & (SWITCH1_MASK |SWITCH2_MASK) )== SWITCH1_MASK) 
    {
        if(THE_FLOOR == F1 || THE_FLOOR == F2)
        {
            if (last != SWITCH1_MASK) 
            {   // check if button already pressed 

            	data[0] = THE_FLOOR;
            	data[1] = CALL_SWITCH1;
            	data[2] = UP;
            	
            	(void)CANSend(CONTROLLER, 0x00, 0x00, DATA_LENGTH, data); 
            	last =  SWITCH1_MASK;        
            }  
        }
        else if(THE_FLOOR == F3)
        {
            if (last != SWITCH1_MASK) 
            {   // check if button already pressed 

                data[0] = THE_FLOOR;
                data[1] = CALL_SWITCH1;
                data[2] = DOWN;

                (void)CANSend(CONTROLLER, 0x00, 0x00, DATA_LENGTH, data); 
                last =  SWITCH1_MASK;        
            }  
        }

    }                
  
  //button 2 press
    else if((PTJ & (SWITCH1_MASK |SWITCH2_MASK) )== SWITCH2_MASK)
    {
        if(THE_FLOOR == F2)
        {
            if (last != SWITCH2_MASK) 
            { // check if button already pressed    
                data[0] = THE_FLOOR;
                data[1] = CALL_SWITCH2;
                data[2] = DOWN;

                CANSend(CONTROLLER, 0x00, 0x00, DATA_LENGTH, data); 
                last =  SWITCH2_MASK;
            } 
        }
 
    }
  
  else
  last = 0;
  
  
  // Updates the LED
  FORCE_BITS(PTS,0b00001100 , led) ;


  

  } /* loop forever */
  /* please make sure that you never leave main */
}
Пример #6
0
/*
!!!! This function is designed for the controller !!!!!

Purpose: Send out instructions from the PID
  Input: sub_comp - should always be REC_POINT
         instruction - should be the floor level
*/
void Feedback(unsigned char sub_comp, unsigned char instruction)
{
	static unsigned char data[DATA_LENGTH];
	
	if(sub_comp == REC_POINT)		// Check to make sure that processing is correct
	{
		// Distribute the floor indicator to each node
		
			data[0] = CAR;
			data[1] = FLOOR_INDICATOR;
			data[2] = instruction;
			SCIprintf("%d%d%d", data[0], data[1], data[2]);
			(void)CANSend(CAR, 0x00, 0x00, DATA_LENGTH, data);
			
			msDELAY(100);
			
			data[0] = F1;
			data[1] = FLOOR_INDICATOR;
			data[2] = instruction;
			SCIprintf("%d%d%d", data[0], data[1], data[2]);
			(void)CANSend(F1, 0x00, 0x00, DATA_LENGTH, data);
			
			msDELAY(100);
			
			data[0] = F2;
			data[1] = FLOOR_INDICATOR;
			data[2] = instruction;
			SCIprintf("%d%d%d", data[0], data[1], data[2]);
			(void)CANSend(F2, 0x00, 0x00, DATA_LENGTH, data);
			
			msDELAY(100);
			
			data[0] = F3;
			data[1] = FLOOR_INDICATOR;
			data[2] = instruction;
			SCIprintf("%d%d%d", data[0], data[1], data[2]);
			(void)CANSend(F3, 0x00, 0x00, DATA_LENGTH, data);
			
			msDELAY(100);
			
			//Shut off the call led
			data[0] = instruction;
			data[1] = CALL_LED1;
			data[2] = OFF;
			SCIprintf("%d%d%d", data[0], data[1], data[2]);
			(void)CANSend(instruction, 0x00, 0x00, DATA_LENGTH, data);
			
			msDELAY(100);
			
		    data[0] = instruction;
			data[1] = CALL_LED2;
			data[2] = OFF;
			SCIprintf("%d%d%d", data[0], data[1], data[2]);
			(void)CANSend(instruction, 0x00, 0x00, DATA_LENGTH, data);
			
			msDELAY(100);
			
			// Shut off elevator car led
			data[0] = CAR;
			data[1] = BUTTON_INDICATOR_OFF;
			data[2] = instruction;
			SCIprintf("%d%d%d", data[0], data[1], data[2]);
			(void)CANSend(CAR, 0x00, 0x00, DATA_LENGTH, data);
			
			msDELAY(100);
			
			// turn on the car door led
		/*	data[0] = CAR;
			data[1] = DOOR;
			data[2] = OPEN;
			SCIprintf("%d%d%d", data[0], data[1], data[2]);
			(void)CANSend(CAR, 0x00, 0x00, DATA_LENGTH, data); */
			

	}
}