コード例 #1
0
ファイル: jm2.c プロジェクト: jpvlsmv/Wixel-Servo-Lib
void main(void) {
	uint16 	speed = param_speed;
	uint8	port = param_port, 
			pin=param_pin;
	uint8 	ServoPos = 120;
	uint8 	dir=1;
	
	systemInit();
	usbInit();
	InitServos();
	
	EA=1; // Global interrupt enabled

	SetPin(0, port, pin);
	SetPin(1, 0, 1);
	SetPin(2, 0, 3);

	while (1) {
		delayMs(speed);
		usbComService();
		
		if (dir==1) {
			++ServoPos;
		}
		else {
			--ServoPos;
		}
		if (ServoPos > 253 || ServoPos < 2) {
			dir ^=1;
		}
		SetPos(0,ServoPos);
		SetPos(1,128);
		SetPos(2,64);
	}
}
コード例 #2
0
ファイル: example.c プロジェクト: andrmalta/ROPIC
void main(void) {

    TRISB = 0;
    TRISC = 1;
    TRISD = 0;
    PORTD = 0;

    SetClockBase(CLOCK_20MHz);
    SetPulseWidth(1000, 2000);
    SetServoScale(0, 180);
    posMin = GetMinPosition();
    posMax = GetMaxPosition();

    InitServos(4, (char) &PORTB);

    MoveAllServos(180);
    Delay10KTCYx(150);
    MoveServoAsync(6, 5);
    Delay10KTCYx(150);
    MoveServoAsync(6, 5);

}
コード例 #3
0
ファイル: ServoLib.c プロジェクト: LjungErik/VisualProgrammer
/* ----------------------------------------------------- */
void TestServo(void)
{
	WriteLine("Initializing the servos...");
	InitServos();
	WriteLine("Powering on the servos...");
	Power_On_Servos();
	WriteLine("Loading the start positions...");
	LoadStartPosition();

	_delay_ms(2000);

	MoveServo(1, 700);
	_delay_ms(2000);
	MoveServo(1, 1500);
	_delay_ms(2000);
	MoveServo(2, 700);
	_delay_ms(2000);
	MoveServo(2, 1500);
	_delay_ms(2000);
	MoveServo(3, 700);
	_delay_ms(2000);
	MoveServo(3, 1500);
	_delay_ms(2000);
	MoveServo(4, 700);
	_delay_ms(2000);
	MoveServo(4, 1500);
	_delay_ms(2000);
	MoveServo(5, 700);
	_delay_ms(2000);
	MoveServo(5, 1500);
	_delay_ms(2000);
	MoveServo(6, 700);
	_delay_ms(2000);
	MoveServo(6, 1500);
	_delay_ms(2000);

	Power_Off_Servos();
}
コード例 #4
0
void ServoDriverLininoSetServos(UINT32 servoc, UINT32 *servov)
{
	if(!isInit)
	{
		InitServos();
		isInit=TRUE;
	}

	UINT s=0;
	BOOL servoChanged = FALSE;
	static UINT count;
  	UINT update = (count++ % 50);
	for(s=0; s < MAX_SERVOS; s++)
	{
		if(s < servoc )
		{
			// update channel if  position changed or 1s interval if servo is not disabled
			if((oldChannels[s] != servov[s]) || ((update == s) && servov[s]))
			{
				SetServo(s, servov[s]);
				oldChannels[s] = servov[s];
				servoChanged = TRUE;
			}
		}
		else
		{
			if(oldChannels[s] != 0)
			{
				SetServo(s, 0);
				oldChannels[s] = 0;
				servoChanged = TRUE;
			}
		}
	}
	if(servoChanged)
		PrintServoStates();
}
コード例 #5
0
ファイル: main.cpp プロジェクト: pbreed/SBCAR
/*-------------------------------------------------------------------
 * UserMain
 *-----------------------------------------------------------------*/
void UserMain(void *pd)
{
	SimpleUart(0,115200);
	assign_stdio(0);

	iprintf("Before init stack\r\n");
    
	InitializeStack();

    {
        WORD ncounts = 0;


        while ( ( !bEtherLink ) && ( ncounts < 2*TICKS_PER_SECOND ) )
        {
            ncounts++;
            OSTimeDly( 1 );
        }
    }

    EnableAutoUpdate();
	EnableTaskMonitor(); 


    OSChangePrio( MAIN_PRIO ); // set standard UserMain task priority

	//BcastSysLogPrintf("Application built on %s on %s\r\nWait...", __TIME__, __DATE__ );

	pUserUdpProcessFunction=MyUDPProcessFunction;

//	UdpCheck();
	
   
	OSSemInit(&DataSem,0);


	   									 

	LoadSensorConfig();
	   // BcastSysLogPrintf("1");
	
	InitLog();

	ImuInit(IMU_PRIO,&DataSem);
	

	InitIDSM2SubSystem(RC_PRIO,&DataSem); 

	
	InitGpsSubSystem(GPS_PRIO,&DataSem);

	
	InitServos();


    SetServo(0,0);
	SetServo(1,0);
	SetServo(2,0);
	SetServo(3,0);

	WORD LastGps=GPS_Result.ReadingNum;
	WORD LastRc =DSM2_Result.ReadingNum;
	WORD LastImu =IMU_Result.ReadingNum;
	DWORD LSecs=Secs;

	static short mmx;
	static short mmy;
	static short nmx;
	static short nmy;
	static short mgz;
    static short ngz;

	DWORD ZeroTime=Secs+5;
	long GZSum=0;
	int  GZCnt=0;
	float fmh=0.0;

	while(ZeroTime > Secs)
	{
		OSSemPend(&DataSem,20);
		if(LastImu !=IMU_Result.ReadingNum)
			{
			GZSum+=IMU_Result.gz;
			GZCnt++;
			LastImu =IMU_Result.ReadingNum; 

			if (IMU_Result.mx !=0 ) 
				fmh=CalcMagHeading(IMU_Result.mx,IMU_Result.my);
				

            }


	}
	
	short gzoff=(GZSum/GZCnt);
	float fIheading=fmh;


	while(1)
	 {

	OSSemPend(&DataSem,20);
	if (LastGps!=GPS_Result.ReadingNum ) 
	{
		LastGps=GPS_Result.ReadingNum;
	    LogSmGps(GPS_Result);                                                                                                                                                                                                               
	}
	
	if (LastRc !=DSM2_Result.ReadingNum)
	{
	  WORD w=DSM2_Result.val[1];
	  float f=DSM_Con(w);
	  SetServo(STEER_CH,f);
	  w=DSM2_Result.val[0];
	  f=DSM_Con(w);
	  SetServo(THROTTLE_CH,f);
      LastRc =DSM2_Result.ReadingNum;
	//  LogRC(DSM2_Result);

	}
	
	if(LSecs!=Secs) 
		{
		// BcastSysLogPrintf("Tick %d Iat:%ld lon:%ld SAT:%d\r\n",Secs,GPS_Result.LAT,GPS_Result.LON,GPS_Result.numSV); 
		//SysLogPrintf(ipa_syslog_addr,514,
		 LogMaxMin(mgz,mmx,mmy,ngz,nmx,nmy);
		 //static char tbuf[256];
		// siprintf(tbuf,"TCN=%ld\r\n",sim.timer[0].tcn);  
		// writestring(LOG_UART,tbuf);
		 mgz=IMU_Result.mz;
		 mmx=IMU_Result.mx;
		 mmy=IMU_Result.my;
		 ngz=IMU_Result.mz;
		 nmx=IMU_Result.mx;
		 nmy=IMU_Result.my;
		 LSecs=Secs;
		}
 

	if(LastImu !=IMU_Result.ReadingNum)
	{
	   if(IMU_Result.gz<ngz) ngz=IMU_Result.gz;
	   if(IMU_Result.gz>mgz) mgz=IMU_Result.gz;
	   
	    fIheading+=(fGZHeadingScale_deg*(IMU_Result.gz-gzoff));

		if(fIheading > 180.0 ) fIheading-=360.0;
		if(fIheading <-180.0 ) fIheading+=360.0;



		if (IMU_Result.mx !=0 ) 
		{
		if(IMU_Result.mx<nmx) nmx=IMU_Result.mx;
		if(IMU_Result.mx>mmx) mmx=IMU_Result.mx;

		if(IMU_Result.my<nmy) nmy=IMU_Result.my;
		if(IMU_Result.my>mmy) mmy=IMU_Result.my;

		volatile ImuRegisters il;
		 OSLock();
		il.ax=IMU_Result.ax;
		il.ay=IMU_Result.ay;
		il.az=IMU_Result.az;
		il.gx=IMU_Result.gx;
		il.gy=IMU_Result.gy;
		il.gz=IMU_Result.gz;
		il.mx=IMU_Result.mx;
		il.my=IMU_Result.my;
		il.mz=IMU_Result.mz;
		il.t =IMU_Result.t ;
		il.ReadingNum=IMU_Result.ReadingNum;
		OSUnlock();              
		fmh=CalcMagHeading(IMU_Result.mx,IMU_Result.my);
		CorrectHeading(fIheading,fmh,0.005);//20 times per second correct in 10 seconds so 0.005
		il.fIhead=fIheading;
	    il.fMhead=fmh;
	    il.GHeading= GPS_Result.Heading;
		il.odo=sim.timer[0].tcn;

         LogImu(il);
		}
		LastImu =IMU_Result.ReadingNum; 

	}

 }//While

}
コード例 #6
0
ファイル: main.c プロジェクト: StephenCEI/2011
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);
		}*/				
	}
}
コード例 #7
0
//****************************************************************************
//                            MAIN FUNCTION
//****************************************************************************
void main()
{
    long lRetVal = 0;
    char data[BUF_SIZE];
    char sent_data[BUF_SIZE];
    unsigned char highByte, lowByte;
    int i;

    unsigned long tempStartTimeStamp, tempStopTimeStamp;

    memset(sent_data, 0, 10);
    // Board Initialization
    BoardInit();

    // Configure the pinmux settings for the peripherals exercised
    PinMuxConfig();

    // Initialize the PWM outputs on the board
    InitServos();

    // Initialize the sensor ADC
    InitSensorADC();

    // Configuring UART
    InitTerm();

    // Display banner
    DisplayBanner(APPLICATION_NAME);

    // Connect to WIFI using default info
    //WlanConnect(NULL, NULL, NULL);
    WlanConnect("Nagui's Network", "SL_SEC_TYPE_WPA", "19520605");

    // Setup the TCP Server Socket
    BsdTcpServerSetup(PORT_NUM);

    // Recieve Data
    while (lRetVal >= 0)
    {
    	lRetVal = BsdTcpServerReceive(data);

		//SysTickPeriodSet(800000000);				// test
		//SysTickEnable();						// test
    	Timer_IF_Init(PRCM_TIMERA0, TIMERA0_BASE, TIMER_CFG_PERIODIC, TIMER_A, 0);
    	Timer_IF_Start(TIMERA0_BASE, TIMER_A, MILLISECONDS_TO_TICKS(2000));
		//tempStartTimeStamp = SysTickValueGet();		// test
    	tempStartTimeStamp = Timer_IF_GetCount(TIMERA0_BASE, TIMER_A);

    	for (i = 0; i<NUM_SERVOS; i++)
    	{
    		MoveServo((unsigned char)data[i], (enum Servo_Joint_Type)i);
    		UART_PRINT("%d", (unsigned int) data[i]);
    	}

    	for (i = 0; i< NUM_SENSORS; i++)
    	{
        	//UnsignedShort_to_UnsignedChar(GetSensorReading((enum Fingertip_Sensor_Type)i), &highByte, &lowByte);
    		UnsignedShort_to_UnsignedChar(GetSensorReading(SENSOR_FINGER_INDEX), &highByte, &lowByte);
        	sent_data[i*2] = (char)highByte;
        	sent_data[i*2+1] = (char)lowByte;
    	}
    	//tempStopTimeStamp = SysTickValueGet();					// test
    	tempStopTimeStamp = Timer_IF_GetCount(TIMERA0_BASE, TIMER_A);
    	lRetVal = BsdTcpServerSend(sent_data, 10);
    	UART_PRINT("timestamp start: %lu\n\r", tempStartTimeStamp);	//test
    	UART_PRINT("timestamp stop: %lu\n\r", tempStopTimeStamp);	//test
    	UART_PRINT("Sent 10 bytes to client.\n\r");

    }
    UART_PRINT("Exiting Application ...\n\r");

    // power of the Network processor
    lRetVal = sl_Stop(SL_STOP_TIMEOUT);

}