Subversion Repositories HomeAutomation

Rev

Rev 332 | Rev 335 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 332 Rev 334
Line 32... Line 32...
32
#define TRUE 1
32
#define TRUE 1
33
#define FALSE 0
33
#define FALSE 0
34
 
34
 
35
uint8_t currentView = MAIN_VIEW, msg_received = FALSE, encoderPosition, rot = FALSE;
35
uint8_t currentView = MAIN_VIEW, msg_received = FALSE, encoderPosition, rot = FALSE;
36
Can_Message_t rxMsg;
36
Can_Message_t rxMsg;
37
uint8_t temperatureData[8], //servoPosition[4], relayStatus[4], dimmerStatus[4],
37
uint8_t temperatureData[8], servoPosition[4], //relayStatus[4], dimmerStatus[4],
38
            temperatureLength=8;//, servoLength=0, relayLength=0;
38
            temperatureLength = 8, servoLength = 0; //, relayLength=0; //TODO mer generaliserat
39
uint32_t rot_timeStamp;
39
uint32_t rot_timeStamp;
-
 
40
char buf[10];
40
 
41
 
41
ISR( PCINT2_vect ){
42
ISR( PCINT2_vect ){
42
 
43
 
43
    rot_timeStamp = bios->timebase_get();
44
    rot_timeStamp = bios->timebase_get();
44
    rot = TRUE;
45
    rot = TRUE;
45
    /* stäng av interrupt på pinnarna */
46
    /* stäng av interrupt på pinnarna */
46
    PCICR &= ~(1<<PCIE2);
47
    PCICR &= ~(1<<PCIE2);
47
}
48
}
48
 
49
 
49
void can_receive(Can_Message_t *msg){
50
void can_receive(Can_Message_t *msg){
50
    uint8_t temp;
51
    uint8_t temp, m;
51
    /* Check for incoming messages from IR-receiver node */
52
    /* Check for incoming messages from IR-receiver node */
52
    if( CLASS_SNS == ((msg->Id & CLASS_MASK) >> CLASS_MASK_BITS) ){
53
    if( CLASS_SNS == ((msg->Id & CLASS_MASK) >> CLASS_MASK_BITS) ){
53
        /* FIXME detta är väldigt fult och borde fixas
54
        /* FIXME detta är väldigt fult och borde fixas
54
         * knapp 4 på fjärren bläddrar åt vänster
55
         * knapp 4 på fjärren bläddrar åt vänster
55
         * knapp 6 åt höger
56
         * knapp 6 åt höger
Line 68... Line 69...
68
        /* Other sensor messages should be placed here */
69
        /* Other sensor messages should be placed here */
69
 
70
 
70
        /* DS18S20 sensors */
71
        /* DS18S20 sensors */
71
        if( SNS_TEMP_DS18S20 == (msg->Id & SNS_TYPE_MASK)>>SNS_TYPE_BITS ){
72
        if( SNS_TEMP_DS18S20 == (msg->Id & SNS_TYPE_MASK)>>SNS_TYPE_BITS ){
72
            temp = (msg->Id & SNS_ID_MASK)>>SNS_ID_BITS;
73
            temp = (msg->Id & SNS_ID_MASK)>>SNS_ID_BITS;
73
            temperatureData[ temp ] = msg->Data.bytes[0];
74
            temperatureData[ (temp-1)*2 ] = msg->Data.bytes[0];
74
            temperatureData[ temp+1 ] = msg->Data.bytes[1];
75
            temperatureData[ (temp-1)*2+1 ] = msg->Data.bytes[1];
75
//          if(temp == 1){
-
 
76
//              lcd_puts("ute ");
-
 
77
//          }
-
 
78
        }
76
        }
-
 
77
 
-
 
78
        /* Servo controllers */
-
 
79
        if( SNS_ACT_STATUS_SERVO == (msg->Id & TYPE_MASK)>>TYPE_MASK_BITS ){ // TODO annan struktur på statusmeddelanden från servo
-
 
80
            temp = msg->DataLength - 3;
-
 
81
            for(m=0;m<temp;m++){
-
 
82
                servoPosition[ m ] = msg->Data.bytes[m+3];
-
 
83
            }
-
 
84
            servoLength = temp;
79
    }
85
        }
-
 
86
 
80
}
87
    }
-
 
88
}
81
 
89
 
82
 
90
 
83
/*-----------------------------------------------------------------------------
91
/*-----------------------------------------------------------------------------
84
 * Main Program
92
 * Main Program
85
 *---------------------------------------------------------------------------*/
93
 *---------------------------------------------------------------------------*/
86
int main(void) {
94
int main(void) {
87
 
95
 
88
    char buffer[ BUFFER_SIZE ];
96
    char buffer[ BUFFER_SIZE ];
89
//  uint8_t a=0, b=0;
-
 
90
/*  uint8_t m, temperatureData[8], servoPosition[4], relayStatus[4], dimmerStatus[4],
-
 
91
            temperatureLength, servoLength, relayLength;
-
 
92
*/
-
 
93
    /*
97
    /*
94
     * Initialize rotaryencoders and buttons
98
     * Initialize rotaryencoders and buttons
95
     */
99
     */
96
    /* Set as input and enable pull-up */
100
    /* Set as input and enable pull-up */
97
    DDRD &= ~( (1<<DDD6)|(1<<DDD7) );
101
    DDRD &= ~( (1<<DDD6)|(1<<DDD7) );
Line 104... Line 108...
104
    sei();
108
    sei();
105
    bios->can_callback = &can_receive;
109
    bios->can_callback = &can_receive;
106
 
110
 
107
    lcd_init( LCD_DISP_ON );
111
    lcd_init( LCD_DISP_ON );
108
    lcd_clrscr();
112
    lcd_clrscr();
109
//    lcd_puts("CAN LCD\n");
-
 
110
 
113
 
111
    lcd_clrscr();
114
    lcd_clrscr();
112
    printLCDview( MAIN_VIEW );
115
    printLCDview( MAIN_VIEW );
113
 
116
 
114
    /* main loop */
117
    /* main loop */
Line 117... Line 120...
117
        if(msg_received){
120
        if(msg_received){
118
                /* Print views skeleton and if existing its data */
121
                /* Print views skeleton and if existing its data */
119
                printLCDview( currentView );
122
            printLCDview( currentView );
120
                if(currentView == TEMPSENS_VIEW){
123
            if(currentView == TEMPSENS_VIEW){
121
                    printLCDviewData( TEMPSENS_VIEW, temperatureData, temperatureLength);
124
                printLCDviewData( TEMPSENS_VIEW, temperatureData, temperatureLength);
122
            //    }else if(currentView == SERVO_VIEW){
125
            }else if(currentView == SERVO_VIEW){
123
            //        printLCDviewData( SERVO_VIEW, servoPosition, servoLength);
126
                printLCDviewData( SERVO_VIEW, servoPosition, servoLength);
124
                }
127
            }
125
                msg_received = FALSE;
128
            msg_received = FALSE;
126
            }
129
        }
127
 
130
 
128
        // TODO använd rotary encoders för att växla view
131
        // TODO använd rotary encoders för att växla view