Ejemplo n.º 1
0
	GLuint Positions(std::vector<T>& dest) const
	{
		unsigned k = 0, n = _vertex_count();
		dest.resize(n * 3);


		Vec3f pos(_point - _u - _v);
		Vec3f ustep(_u * (2.0 / _udiv));
		Vec3f vstep(_v * (2.0 / _vdiv));

		unsigned leap = _udiv+1;

		for(unsigned j=0; j!=(_vdiv+1); ++j)
		{
			Vec3f tmp = pos;
			for(unsigned i=0; i!=leap; ++i)
			{
				dest[k++] = T(tmp.x());
				dest[k++] = T(tmp.y());
				dest[k++] = T(tmp.z());
				tmp += ustep;
			}
			pos += vstep;
		}
		assert(k == dest.size());
		return 3;
	}
Ejemplo n.º 2
0
int main(){
    //set up port pins 
    DDRB |= 0b00101000;
    DDRD |= 0b01101000;
    DDRC = 0;
    PORTB = 0xFF;
    PORTC = 0xFF;
    PORTD = 0xFF;
    //PWM timer configs
    TCCR0A = 0b10100011;     //fastPWM;  p.103 in datasheet
    TCCR2A = 0b10100011;     //fastPWM;  p.153
    TCCR0B = 2;              //F_CPU/8;  p.105  (7.84 kHz)
    TCCR2B = 2;              //F_CPU/8;  p.157
    OCR0A = 128;             //gently lock stepper rotation 
    //startup blinkenled
    for (int i=0; i<8; i++){
	PORTB |= (1<<5);
	delay(800);
	PORTB &= ~(1<<5);
	delay(800);
    }
    delay(8000);

    //read in DIPswitch; set up TIMER1 per external calculation 
    switch (PINC & 0b00000111){
	case 0:
	    dly=3333;             //8s revolution
	    TCCR1B |= (1);        //F_CPU/1; page 133; 
	    blink (0);
	    break;
	case 1:
	    dly=6666;             //16s revolution
	    TCCR1B |= (1);        //F_CPU/1
	    blink (1);
	    break;
	case 2:
	    dly=1667;             //32s revolution
	    TCCR1B |= (2);     //F_CPU/8
	    blink (2);
	    break;
	case 3:
	    dly=3333;             //64s revolution
	    TCCR1B |= (2);     //F_CPU/8
	    blink (3);
	    break;
	case 4:
	    dly=3906;             //10min revolution
	    TCCR1B |= (3);     //F_CPU/64
	    blink (4);
	    break;
	case 5:
	    dly=23437;            //1hr revolution
	    TCCR1B |= (3);     //F_CPU/64
	    blink (5);
	    break;
	case 6:
	    dly=2929;             //2hr revolution
	    TCCR1B |= (5);        //F_CPU/1024
	    blink (6);
	    break;
	case 7:
	    dly=5859;            //4hr revolution
	    TCCR1B |= (5);        //F_CPU/1024
	    blink (7);
	    break;
	default:
	    die (1);
    }

    while(PIND & 1<<1){           //allow user to pre-position camera
	if(!(PIND & 1<<2)){
	   ustep(1);
	} else if(!(PIND & 1)){
	   ustep(2);
	}
	delay(mdelay);
    }
    //button has been pressed; initiate pictionation 

    blink(10);

    TCNT1 = 0;

    while(1){
	if (TCNT1 >= dly){die (2);}   //catch possible timer underrun
	while(TCNT1 < dly){}          //poll timer 
	TCNT1 = 0;          
	ustep(2);
    }
}//main