void over_game(void) { if (game.state != game.last_state) { // if we are entering the state, do intitialization stuff game.last_state = game.state; game.hit_flag = 0; game.level_ticks = 0; game.level_limit = MAX_LEVEL; game.level = 0; game.decay_ticks = 0; game.decay_limit = MAX_DECAY; timer_lower(game.level_timer); timer_lower(game.decay_timer); update_bar_pix(0, &start_color, &end_color); if (game.score > game.high) { game.high = game.score; } write_display(game.high_display, game.high, 0); write_display(game.score_display, game.score, 0); blink_display(game.score_display, 1); } //run state logic if (game.lose_flag) { if (timer_flag(game.level_timer)) { timer_lower(game.level_timer); game.lose_ticks++; if (game.lose_ticks == MAX_LOSE) { trigger_audio(LOSE); game.lose_flag = 0; } } } if (pin_read(game.coin_op)) { game.coin_flag = 1; trigger_audio(START); } if (game.hit_flag && game.coin_flag) { game.state = rest_game; game.hit_flag = 0; game.coin_flag = 0; } if (game.state != game.last_state) { // if we are leaving the state, do clean up stuff game.level = 1; game.life = MAX_LIFE; game.score = 0; game.lose_flag = 0; game.lose_ticks = 0; blink_display(game.score_display, 0); write_display(game.score_display, game.score, 0); } }
int16_t main(void) { init_clock(); init_timer(); init_ui(); init_pin(); init_spi(); init_oc(); init_md(); // Current measurement pin pin_analogIn(&A[0]); // SPI pin setup ENC_MISO = &D[1]; ENC_MOSI = &D[0]; ENC_SCK = &D[2]; ENC_NCS = &D[3]; pin_digitalOut(ENC_NCS); pin_set(ENC_NCS); // Open SPI in mode 1 spi_open(&spi1, ENC_MISO, ENC_MOSI, ENC_SCK, 2e6, 1); // Motor setup md_velocity(&md1, 0, 0); // Get initial angle offset uint8_t unset = 1; while (unset) { ANG_OFFSET = enc_readReg((WORD) REG_ANG_ADDR); unset = parity(ANG_OFFSET.w); } ANG_OFFSET.w &= ENC_MASK; // USB setup InitUSB(); while (USB_USWSTAT!=CONFIG_STATE) { ServiceUSB(); } // Timers timer_setFreq(&timer2, READ_FREQ); timer_setFreq(&timer3, CTRL_FREQ); timer_start(&timer2); timer_start(&timer3); // Main loop while (1) { ServiceUSB(); if (timer_flag(&timer2)) { timer_lower(&timer2); get_readings(); } if (timer_flag(&timer3)) { timer_lower(&timer3); set_velocity(); } } }
int main(void) { setup(); pwm_set_duty(0); pwm_set_direction(0); printf("%s\r\n", "STARTING LOOP"); float encoder_master_count = 0; uint16_t current_ticks = 0; uint16_t previous_ticks = spi_read_ticks(); float target_degs = 10; float motor_current = 0; // current through motor in amperes float pid_command = 0; float theor_torque; bitset(&IEC0, 2); bitset(&IEC0, 6); while (1) { if (timer_flag(&timer2)) { // Blink green light to show normal operation. timer_lower(&timer2); led_toggle(&led2); } if (timer_flag(&timer3)) { timer_lower(&timer3); led_toggle(&led3); theor_torque = spring_model(degs); // Outputs theoretical torque predicted by spring model cur_control.set_point = fabsf(theor_torque); cur_control.neg_set_point = read_sign(theor_torque); read_motor_current(&motor); cur_control.position = convert_motor_torque(motor.current); pid_command = PID_control(&cur_control); pwm_duty = pid_to_pwm(pid_command, cur_control.neg_set_point); } if (!sw_read(&sw2)) { // If switch 2 is pressed, the UART output terminal is cleared. printf("%s", clear); } ServiceUSB(); current_ticks = spi_read_ticks(); encoder_master_count = encoder_counter(current_ticks, previous_ticks, encoder_master_count); degs = count_to_deg(encoder_master_count); previous_ticks = current_ticks; pin_toggle(DEBUGD1); // Heartbeat signal } }
int16_t main(void) { int led2_on; int led3_on; led2_on = 0; led3_on = 1; init_clock(); init_ui(); init_timer(); led_on(&led1); timer_setPeriod(&timer2, 0.1); timer_start(&timer2); while (1) { if (timer_flag(&timer2)) { timer_lower(&timer2); led_toggle(&led1); } if(!sw_read(&sw2)){ timer_setPeriod(&timer2, 0.5); timer_start(&timer2); led2_on = 1; led3_on = 0; } else if(!sw_read(&sw3)){ timer_setPeriod(&timer2, 0.1); timer_start(&timer2); led2_on = 0; led3_on = 1; } led_write(&led2, led2_on); led_write(&led3, led3_on); } }
int16_t main(void) { InitUSB(); // initialize the USB registers and serial interface engine initChip(); initMotor(); led_on(&led1); timer_setPeriod(LED_TIMER, 0.5); //start internal clock with defined period timer_start(LED_TIMER); pin_write(IN1, 1); pin_write(IN2, 0); pin_write(D2, 65536*2/5); while (USB_USWSTAT!=CONFIG_STATE) { // while the peripheral is not configured... ServiceUSB(); // ...service USB requests } while (1) { ServiceUSB(); // service any pending USB requests //LED1 TOGGLE TO CONFIRM RUNNING CODE if (timer_flag(LED_TIMER)) { timer_lower(LED_TIMER); led_toggle(&led1); pin_write(D2, VAL1); } } }
int16_t main(void) { //initialize all system clocks init_clock(); //initialize serial communications init_uart(); //initialize pin driving library (to be able to use the &D[x] defs) init_pin(); //initialize the UI library init_ui(); //initialize the timer module init_timer(); //initialize the OC module (used by the servo driving code) init_oc(); imu_init() //Set servo control pins as output pin_digitalOut(PAN_PIN); pin_digitalOut(TILT_PIN); pin_digitalOut(SONIC_OUT_PIN); pin_digitalIn(SONIC_IN_PIN); //Set LED off led_off(LED); //Configure blinking rate for LED when connected timer_setPeriod(LED_TIM, 0.2); timer_start(LED_TIM); //Configure timer for reciever timeout timer_setPeriod(DIST_TIM, 0.05); //configure PWM on sonic output pin oc_pwm(PWM_OC, SONIC_OUT_PIN, NULL, SONIC_FREQ, 0x0000); //According to HobbyKing documentation: range .8 through 2.2 msec //Set servo control pins as OC outputs on their respective timers oc_servo(SERVO1_OC, PAN_PIN, SERVO1_TIM, SERVO_PERIOD, SERVO_MIN, SERVO_MAX, pan_set_val); oc_servo(SERVO2_OC, TILT_PIN, SERVO2_TIM, SERVO_PERIOD, SERVO_MIN, SERVO_MAX, tilt_set_val); InitUSB(); // initialize the USB registers and serial interface engine while (USB_USWSTAT!=CONFIG_STATE) { // while the peripheral is not configured... ServiceUSB(); // ...service USB requests led_on(LED); //There's no point in driving the servos when there's no one connected yet. } while (1) { ServiceUSB(); // service any pending USB requests //blink the LED if (timer_flag(LED_TIM)) { timer_lower(LED_TIM); led_toggle(LED); } //Update the servo control values. x_gout = gyro_read(OUT_X_L); } }
int16_t main(void) { init(); REV = 0; REQUESTED_DIRECTION = 0; SENSED_DIRECTION = 0; DUTY = 0; led_on(&led2); timer_setPeriod(HB_TIMER, 0.5); timer_start(HB_TIMER); printf("Good morning!\n"); oc_pwm(&oc3,D2n,PWM_TIMER,FREQ,DUTY); while (USB_USWSTAT!=CONFIG_STATE) { // while the peripheral is not configured... ServiceUSB(); // ...service USB requests } while (1) { ServiceUSB(); SetMotorVelocity(DUTY,REQUESTED_DIRECTION); get_direction(); get_feedback(); if (timer_flag(HB_TIMER)) { timer_lower(HB_TIMER); led_toggle(&led1); } } }
int16_t main(void) { // printf("Starting Rocket Controller...\r\n"); init_clock(); init_ui(); init_pin(); init_timer(); init_i2c(); setup(); init_servo_driver(&sd1, &i2c3, 16000., 0x0); init_servo(&servo4, &sd1, 0); InitUSB(); U1IE = 0xFF; //setting up ISR for USB requests U1EIE = 0xFF; IFS5bits.USB1IF = 0; //flag IEC5bits.USB1IE = 1; //enable // uint32_t pid_command; servo_set(&servo4, 1500, 0); while (1) { if (timer_flag(&timer1)) { // Blink green light to show normal operation. timer_lower(&timer1); led_toggle(&led2); // servo_set(&servo4, 1500, 0); } } }
int16_t main(void) { init_clock(); init_ui(); init_pin(); init_spi(); init_timer(); init_oc(); init_md(); led_off(&led2); led_off(&led3); ENC_MISO = &D[1]; ENC_MOSI = &D[0]; ENC_SCK = &D[2]; ENC_NCS = &D[3]; read_angle.w=0x3FFF; Pscale.w=1; Iscale.w=0; direction.w=1; speed.w=0; angle_now.i=180; angle_prev.i=180; angle.w=10; uint8_t loop = 0; pin_digitalOut(ENC_NCS); pin_set(ENC_NCS); spi_open(&spi1, ENC_MISO, ENC_MOSI, ENC_SCK, 2e8,1); timer_setPeriod(&timer1, 0.05); timer_start(&timer1); InitUSB(); // initialize the USB registers and serial interface engine while (USB_USWSTAT!=CONFIG_STATE) { // while the peripheral is not configured... ServiceUSB(); // ...service USB requests } while(1){ ServiceUSB(); if (timer_flag(&timer1)) { timer_lower(&timer1); angle_prev=angle_now; angle_prev_con=angle; // service any pending USB requests angle_now = enc_readReg(read_angle); angle_now = mask_angle(angle_now); angle=convert_Angle(angle_prev,angle_now,&loop); spring_simple(angle); } } }
void rest_game(void) { if (game.state != game.last_state) { // if we are entering the state, do intitialization stuff game.last_state = game.state; game.level_ticks = 0; game.hit_flag = 0; } //run state logic life_percent = (float)game.life/MAX_LIFE-((float)game.decay_ticks/game.decay_limit)/100.0; update_bar_pix(life_percent, &start_color, &end_color); if (timer_flag(game.decay_timer)) { timer_lower(game.decay_timer); game.decay_ticks++; if (game.decay_ticks == game.decay_limit) { game.life--; game.decay_ticks = 0; } } if (timer_flag(game.level_timer)) { timer_lower(game.level_timer); game.level_ticks++; if (game.level_ticks == game.level_limit) { game.state = level_game; } } if (game.hit_flag) { game.score += 25; game.hit_flag = 0; game.life += 10; if (game.life > MAX_LIFE) { game.life = MAX_LIFE; } write_display(game.score_display, game.score, 0); } // Check for state transitions if (!game.life) { game.state = over_game; game.lose_flag = 1; } }
int16_t main(void) { //initialize modules init_clock(); init_timer(); init_uart(); timer_setPeriod(&timer1,1e-2);//100 Hz timer_lower(&timer1); timer_start(&timer1); printf("Begin"); while (1) { if (timer_flag(&timer1)){ printf("GO"); timer_lower(&timer1); } } }
void wait_period(float period){ timer_setPeriod(&timer2, period); timer_start(&timer2); while(1){ if (timer_flag(&timer2)) { timer_lower(&timer2); break; } } }
int main(void) { setup(); printf("%s\r\n", "STARTING LOOP"); float encoder_master_count = 0; float previous_degs = 0; float current_degs = 0; uint16_t current_ticks = 0; uint16_t previous_ticks = spi_read_ticks(); while (1) { if (timer_flag(&timer2)) { // Blink green light to show normal operation. timer_lower(&timer2); led_toggle(&led2); printf("ddegs %3f, dd %d\r\n", delta_degs, drive_direction); } if (timer_flag(&timer3)) { timer_lower(&timer3); delta_degs = current_degs - previous_degs; current_duty_cycle = damper(delta_degs); previous_degs = current_degs; } if (!sw_read(&sw2)) { // If switch 2 is pressed, the UART output terminal is cleared. printf("%s", clear); } ServiceUSB(); current_ticks = spi_read_ticks(); encoder_master_count = encoder_counter(current_ticks, previous_ticks, encoder_master_count); current_degs = count_to_deg(encoder_master_count); previous_ticks = current_ticks; } }
int16_t main(void) { init_clock(); init_ui(); init_timer(); led_on(&led1); led_on(&led3); timer_setPeriod(&timer2, 0.5); timer_start(&timer2); while (1) { if (timer_flag(&timer2)) { timer_lower(&timer2); led_toggle(&led1); led_toggle(&led2); <<<<<<< HEAD }
int16_t main(void) { init_clock(); init_ui(); init_timer(); led_on(&led1); timer_setPeriod(&timer2, 1.0); timer_start(&timer2); while (1) { if (timer_flag(&timer2)) { timer_lower(&timer2); led_toggle(&led1); led_toggle(&led2); } led_write(&led3, !sw_read(&sw3)); } }
int16_t main(void) { init_clock(); init_uart(); init_ui(); init_timer(); init_oc(); led_on(&led2); timer_setPeriod(&timer2, 0.5); timer_start(&timer2); val1 = 0; val2 = 0; interval = 0.02; min_width = 5.5E-4; max_width = 2.3E-3; pos = 0; //16 bit int with binary point in front of the MSB oc_servo(&oc1,&D[0],&timer1, interval,min_width, max_width, pos); oc_servo(&oc2,&D[2],&timer3, interval,min_width, max_width, pos); printf("Good morning\n"); InitUSB(); // initialize the USB registers and serial interface engine while (USB_USWSTAT!=CONFIG_STATE) { // while the peripheral is not configured... ServiceUSB(); // ...service USB requests } while (1) { ServiceUSB(); //write the values to the servos (move the servos to the requested position) pin_write(&D[0],val1); pin_write(&D[2],val2); if (timer_flag(&timer2)) { //show a heartbeat and a status message timer_lower(&timer2); led_toggle(&led1); printf("val1 = %u, val2 = %u\n", val1, val2); } } }
int16_t main(void) { init_clock(); init_ui(); init_timer(); init_pin(); init_oc(); init_md(); led_on(&led2); led_on(&led3); timer_setPeriod(&timer1, 0.5); timer_start(&timer1); while (1) { if (timer_flag(&timer1)) { timer_lower(&timer1); if (speed > 24000) { up=0; } if (speed < 12000) { up=1; } if (up) { speed=speed+300; } if (!up) { speed=speed-300; } // direction = !direction; md_speed(&mdp, speed); md_direction(&mdp, direction); } } }
/* void ping() { pin_write(pingPin, HALF_INT); timer_after(&timer4, 500e-6, 1, send); } */ void motorControl(dist) { while (stepCount != dist){ if (motorOn == 1){ stepCount += step; motorOn = 0; pin_write(stepPin, 0); } else if (motorOn == 0){ motorOn = 1; if (stepCount > dist){ step = -1; dir = 0; } else if (stepCount < dist){ step = 1; dir = 1; } pin_write(dirPin, dir); pin_write(stepPin, 1); } timer_start(&timer1); led_toggle(&led1); while (1) { count = timer_read(&timer1); led_toggle(&led2); if (count > period){ break; } } timer_stop(&timer1); timer_lower(&timer1); } }
int16_t main(void) { init_pin(); init_clock(); init_uart(); init_ui(); init_timer(); init_oc(); //setup the signal input pin pin_digitalIn(&D[4]); val1 = 0; val2 = 0; pos = 0; //16 bit int with binary point in front of the MSB led_on(&led2); timer_setPeriod(&timer2, PULSE_FREQUENCY); //how often we send a pulse timer_start(&timer2); timer_setPeriod(&timer3, 0.5); //heartbeat timer_start(&timer3); oc_servo(&oc1,&D[0],&timer4, INTERVAL,MIN_WIDTH, MAX_WIDTH, pos); oc_servo(&oc2,&D[2],&timer5, INTERVAL,MIN_WIDTH, MAX_WIDTH, pos); oc_pwm(&oc3,&D[3],NULL,FREQ,ZERO_DUTY); printf("Good morning\n"); InitUSB(); // initialize the USB registers and serial interface engine while (USB_USWSTAT!=CONFIG_STATE) { // while the peripheral is not configured... ServiceUSB(); // ...service USB requests } while (1) { ServiceUSB(); pin_write(&D[0],val1); pin_write(&D[2],val2); //adapted from Patrick and Charlie's approach if (!send_pulse && timer_read(&timer2) < PULSE_WIDTH){ send_pulse = 1; pin_write(&D[3],HALF_DUTY); get_distance = 1; } else if (send_pulse && timer_read(&timer2) >= PULSE_WIDTH) { send_pulse = 0; pin_write(&D[3],ZERO_DUTY); } if (timer_read(&timer2) >= ECHO_TIME) { if (pin_read(&D[4]) && get_distance) { printf("%d\n", timer_read(&timer2)); get_distance = 0; } } if (timer_flag(&timer3)) { //show a heartbeat and a status message timer_lower(&timer3); led_toggle(&led1); } } }
int16_t main(void) { init_clock(); init_timer(); init_pin(); init_oc(); init_ui(); InitUSB(); // initialize the USB registers and serial interface engine while (USB_USWSTAT!=CONFIG_STATE) { // while the peripheral is not configured... ServiceUSB(); // ...service USB requests } // Configure Interrupts on the pic IEC1bits.CNIE = 1; CNEN1bits.CN2IE = 1; IFS1bits.CNIF = 0; IEC0bits.OC1IE = 1; IFS0bits.OC1IF = 0; timer_enableInterrupt(&timer1); timer_lower(&timer1); timer_enableInterrupt(&timer2); timer_lower(&timer2); timer_enableInterrupt(&timer4); timer_lower(&timer4); timer_enableInterrupt(&timer5); timer_lower(&timer5); // Configure Pins inPin0 = &A[0]; pin_analogIn(inPin0); inPin1 = &A[1]; pin_analogIn(inPin1); inPin2 = &A[2]; pin_analogIn(inPin2); inPin3 = &A[3]; pin_analogIn(inPin3); inPin4 = &A[4]; pin_analogIn(inPin4); irPin = &A[5]; pin_analogIn(irPin); outPin = &D[6]; pin_digitalOut(outPin); oc_pwm(&oc1, outPin, NULL, 10, (uint16_t)(0)); // write to D2 with a 10Hz PWM signal pin_write(outPin, 10000); //duty doesn't matter, really. redPin = &D[7]; pin_digitalOut(redPin); oc_pwm(&oc2, redPin, NULL, 100, (uint16_t)(0)); greenPin = &D[10]; pin_digitalOut(greenPin); oc_pwm(&oc3, greenPin, NULL, 100, (uint16_t)(0)); bluePin = &D[8]; pin_digitalOut(bluePin); oc_pwm(&oc4, bluePin, NULL, 100, (uint16_t)(0)); pingPin = &D[4]; pin_digitalOut(pingPin); oc_pwm(&oc5, pingPin, &timer3, 40000, 0); receivePin = &D[12]; pin_digitalIn(receivePin); // Motor controller pins dirPin = &D[0]; pin_digitalOut(dirPin); nSleepPin = &D[3]; pin_digitalOut(nSleepPin); pin_write(nSleepPin, 1); stepPin = &D[2]; pin_digitalOut(stepPin); testPin = &D[13]; pin_digitalOut(testPin); timer_setFreq(&timer1, 100); while (1) { ServiceUSB(); // service any pending USB requests irVoltage = pin_read(irPin); if (irVoltage < 40000){ dist = 32768; } if (irVoltage >= 40000){ dist = 32900; } if (dist != stepCount) { changeFlag += 1; } else { changeFlag = 0; } if (changeFlag >= 3){ changeFlag = 0; motorControl(dist); } if (touching0 == 10){ greenTarget = 40000; redTarget = 60000; blueTarget = 0; if (currentPetal == 0){ greenTarget = 0; redTarget = 0; blueTarget = 0; } currentPetal == 0; } if (touching1 == 11){ greenTarget = 20000; redTarget = 20000; blueTarget = 20000; if (currentPetal == 1){ greenTarget = 0; redTarget = 0; blueTarget = 0; } currentPetal == 1; } if (touching2 == 12){ greenTarget = 0; redTarget = 60000; blueTarget = 40000; if (currentPetal == 2){ greenTarget = 0; redTarget = 0; blueTarget = 0; } currentPetal == 2; } if (touching3 == 13){ greenTarget = 0; redTarget = 60000; blueTarget = 0; if (currentPetal == 3){ greenTarget = 0; redTarget = 0; blueTarget = 0; } currentPetal == 3; } if (touching4 == 14){ greenTarget = 60000; redTarget = 0; blueTarget = 0; if (currentPetal == 4){ greenTarget = 0; redTarget = 0; blueTarget = 0; } currentPetal == 4; } if (greenDuty < greenTarget) { greenChange = 1; } else if (greenDuty > greenTarget) { greenChange = -1; } else { greenChange = 0; onTarget += 1; } if (redDuty < redTarget) { redChange = 1; } else if (redDuty > redTarget) { redChange = -1; } else { redChange = 0; onTarget += 1; } if (blueDuty < blueTarget) { blueChange = 1; } else if (blueDuty > blueTarget) { blueChange = -1; } else { blueChange = 0; onTarget += 1; } greenDuty += greenChange; redDuty += redChange; blueDuty += blueChange; pin_write(greenPin, greenDuty); pin_write(redPin, redDuty); pin_write(bluePin, blueDuty); /* // fade on when touched if (touching0 == 10){ if (greenOn == 0){ greenChange = 1; } if (greenOn == 1){ greenChange = -1; } redChange = -1; blueChange = -1; } if (touching1 == 11){ if (redOn == 1){ redChange = -1; } if (redOn == 0){ redChange = 1; } blueChange = -1; greenChange = -1; } if (touching2 == 12){ if (blueOn == 1){ blueChange = -1; } if (blueOn == 0){ blueChange = 1; } greenChange = -1; redChange = -1; } greenDuty = greenDuty + greenChange; if (greenDuty == MAX_INT){ greenDuty = MAX_INT -1; greenOn = 1; greenChange = 0; } if (greenDuty == 0){ greenDuty = 1; greenOn = 0; greenChange = 0; } redDuty = redDuty + redChange; if (redDuty == MAX_INT){ redDuty = MAX_INT - 1; redOn = 1; redChange = 0; } if (redDuty == 0){ redDuty = 1; redOn = 0; redChange = 0; } blueDuty = blueDuty + blueChange; if (blueDuty == MAX_INT){ blueDuty = MAX_INT - 1; blueOn = 1; blueChange = 0; } if (blueDuty == 0){ blueDuty = 1; blueOn = 0; blueChange = 0; } pin_write(greenPin, greenDuty); pin_write(redPin, redDuty); pin_write(bluePin, blueDuty); */ /* if (iteration > 10000) { ping(); iteration = 0; } iteration += 1; */ } }