int main(void) { DDRD = 0b01110000; DDRA = 0b00000001; //wdt_reset(); //wdt_disable(); char replyDat[2]; i2c_init(); USART roverPort; USART devicePort; CommInterface inf; CommPacket commPkt; char commData[20]; char commRet; Timer accelTimer; Timer dataTimer; int sensorError; //PORTA = 1; //_delay_ms(250); //PORTA = 0; //_delay_ms(250); USART_InitPortStructs(); setDeviceCamera(); USART_Open(&roverPort, 0, USART_BAUD_38400, 20, 32, true); CommInterfaceInit(&inf, &roverPort); USART_Open(&devicePort, 1, USART_BAUD_9600, 20, 5, false); setDeviceServo(); sensorError = InitAccelerometer(&inf); sensorError = InitBarometer(&inf); InitServos(&devicePort); InitCamera(&devicePort); InitTimers(); //StartTimer(&accelTimer); //StartTimer(&dataTimer); setDeviceServo(); PORTA |= 1; PanTiltSetPosition(TILT_SERVO, TILT_CENTER); PanTiltSetPosition(PAN_SERVO, PAN_CENTER); char pingRespond = 0xAA; commPkt.data = commData; CommPacket pkt; char textBuffer[40]; char length; unsigned char aclBuf[6]; //ServiceBarometer(3); //Enable Watchdog //wdt_enable(0b111); while(1) { while(CommRXPacketsAvailable(&inf)) { commRet = CommGetPacket(&inf, &commPkt, 20); if (!commRet) // didn't get packet returned, even though it said we had one. give up for now break; if (commPkt.length==0) { // bad 0-length packet, skip to the next one continue; } // must at least have a length of 1, check the first byte to see what device this is targeted at if (commPkt.data[0]==SYS_PANTILT) { PORTA &= ~1; setDeviceServo(); PanTiltHandlePacket(&commPkt); PORTA = sensorError; } else if (commPkt.data[0]==SYS_CAMERA) { PORTA &= ~1; setDeviceCamera(); CameraHandlePacket(&commPkt); PORTA = sensorError; } else if (commPkt.data[0]==SYS_BAROMETER) { PORTA &= ~1; BarometerHandlePacket(&commPkt); PORTA = sensorError; } else if (commPkt.data[0]==SYS_ACCEL) { PORTA &= ~1; AccelHandlePacket(&commPkt); PORTA = sensorError; } else if (commPkt.data[0]==SYS_PING) { pkt.target = 1; pkt.length = 1; pkt.data = &pingRespond; CommSendPacket(&inf,&pkt); } } /* if (GetSpanUs(&dataTimer) > FROM_uS(1000000)) { USART_WriteByte(&roverPort,0xFE); USART_WriteByte(&roverPort,temperatureData>>8); USART_WriteByte(&roverPort,temperatureData&0xFF); USART_WriteByte(&roverPort,barometerData>>16); USART_WriteByte(&roverPort,(barometerData>>8)&0xFF); USART_WriteByte(&roverPort,barometerData&0xFF); AccelGetAverage(aclBuf); length = sprintf(textBuffer,"X: %d \tY: %d \n\r",(aclBuf[0]<<8)|aclBuf[1], (aclBuf[2]<<8)|aclBuf[3]); USART_Write(&roverPort,textBuffer,length); StartTimer(&dataTimer); } */ /* if (GetSpanUs(&accelTimer) > 39) { sensorError |= AccelAddDataToBuffer(); StartTimer(&accelTimer); } if (BarometerGetState() == 1) { sensorError |= ServiceBarometer(3); }*/ } }
void main(void) { int8 i; DisableInterrupts; InitPorts(); InitADC(); OpenUSART(USART_TX_INT_OFF&USART_RX_INT_OFF&USART_ASYNCH_MODE& USART_EIGHT_BIT&USART_CONT_RX&USART_BRGH_HIGH, _B38400); OpenTimer0(TIMER_INT_OFF&T0_8BIT&T0_SOURCE_INT&T0_PS_1_16); OpenTimer1(T1_8BIT_RW&TIMER_INT_OFF&T1_PS_1_8&T1_SYNC_EXT_ON&T1_SOURCE_CCP&T1_SOURCE_INT); OpenCapture1(CAPTURE_INT_ON & C1_EVERY_FALL_EDGE); // capture mode every falling edge CCP1CONbits.CCP1M0 = NegativePPM; OpenTimer2(TIMER_INT_ON&T2_PS_1_16&T2_POST_1_16); PR2 = TMR2_5MS; // set compare reg to 9ms INTCONbits.TMR0IE = false; // setup flags register for ( i = 0; i<16; i++ ) Flags[i] = false; _NoSignal = true; InitArrays(); ReadParametersEE(); ConfigParam = 0; ALL_LEDS_OFF; Beeper_OFF; LedBlue_ON; INTCONbits.PEIE = true; // enable peripheral interrupts EnableInterrupts; LedRed_ON; // red LED on Delay1mS(100); IsLISLactive(); #ifdef ICD2_DEBUG _UseLISL = 1; // because debugger uses RB7 (=LISL-CS) :-( #endif NewK1 = NewK2 = NewK3 = NewK4 =NewK5 = NewK6 = NewK7 = 0xFFFF; PauseTime = 0; InitBarometer(); InitDirection(); Delay1mS(COMPASS_TIME); // send hello text to serial COM Delay1mS(100); ShowSetup(true); Delay1mS(BARO_PRESS_TIME); while(1) { // turn red LED on of signal missing or invalid, green if OK // Yellow led to indicate linear sensor functioning. if( _NoSignal || !Switch ) { LedRed_ON; LedGreen_OFF; if ( _UseLISL ) LedYellow_ON; } else { LedGreen_ON; LedRed_OFF; LedYellow_OFF; } ProcessComCommand(); } } // main