Example #1
0
/*
 *  call-seq:
 *     LCD.new(font, x, y, width, height, color)  # => LCD
 *
 *  Creates LCD object.
 *
 *  Parameters:
 *    +font+    font size.
 *       :small   small font (6x8, default)
 *       :medium  medium font (8x16)
 *    +x+       Window origin (left) X coordinate. (default: 0)
 *    +y+       Window origin (top) Y coordinate. (default: 0)
 *    +width+   Width of window. (default: LCD::WIDTH)
 *    +height+  Height of window. (default: LCD::HEIGHT)
 *    +color+   LCD foreground color.
 *       :black   black (default)
 *       :white   while
 *
 *  Returns LCD object.
 */
static mrb_value
mrb_lcd_init(mrb_state *mrb, mrb_value self)
{
  struct RClass *lcd = mrb_obj_class(mrb, self);
  mrb_value fmap = mrb_const_get(mrb, mrb_obj_value(lcd), mrb_intern_lit(mrb, "FONT"));
  mrb_value cmap = mrb_const_get(mrb, mrb_obj_value(lcd), mrb_intern_lit(mrb, "COLOR"));
  mrb_sym font = mrb_intern_lit(mrb, "small");
  mrb_sym col = mrb_intern_lit(mrb, "black");
  mrb_value fontv;
  mrb_value colv;
  mrb_lcd_t *plcd;

  DATA_TYPE(self) = &mrb_lcd_type;
  plcd = (mrb_lcd_t*)mrb_malloc(mrb, sizeof(mrb_lcd_t));
  DATA_PTR(self) = plcd;
  memset(plcd, 0, sizeof(mrb_lcd_t));
  plcd->width  = EV3_LCD_WIDTH;
  plcd->height = EV3_LCD_HEIGHT;

  mrb_get_args(mrb, "|niiiin", &font, &plcd->left, &plcd->top, &plcd->width, &plcd->height, &col);

  fontv = mrb_hash_get(mrb, fmap, mrb_symbol_value(font));
  if (mrb_nil_p(fontv)) {
    mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid font size :%S", mrb_sym2str(mrb, font));
  }
  plcd->font = mrb_fixnum(fontv);
  if (_font_size[plcd->font].w == 0) {
    /* initialize font size at 1st time */
    ev3_font_get_size(plcd->font, &_font_size[plcd->font].w, &_font_size[plcd->font].h);
  }

  colv = mrb_hash_get(mrb, cmap, mrb_symbol_value(col));
  if (mrb_nil_p(colv)) {
    mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid foreground color :%S", mrb_sym2str(mrb, col));
  }
  plcd->color = mrb_fixnum(colv);

  return self;
}
Example #2
0
void main_task(intptr_t unused) {
    ev3_lcd_set_font(EV3_FONT_MEDIUM);
    ev3_font_get_size(EV3_FONT_MEDIUM, &fontw, &fonth);

    memfile_t memfile;
    ev3_memfile_load("/test.bmp", &memfile);
    image_t image;
    ev3_image_load(&memfile, &image);
    ev3_lcd_draw_image(&image, 0, fonth * 2);

    //ev3_sta_cyc(TEST_EV3_CYC1);
    // Enable TEST_EV3_CYC2 for 5 seconds
    ev3_sta_cyc(TEST_EV3_CYC2);
    tslp_tsk(5000);
    ev3_stp_cyc(TEST_EV3_CYC2);
#if 0
    // Register button handlers
    ev3_button_set_on_clicked(BACK_BUTTON, button_clicked_handler, BACK_BUTTON);
    ev3_button_set_on_clicked(ENTER_BUTTON, button_clicked_handler, ENTER_BUTTON);
    ev3_button_set_on_clicked(LEFT_BUTTON, button_clicked_handler, LEFT_BUTTON);

    // Configure sensors
    ev3_sensor_config(gyro_sensor, GYRO_SENSOR);

    // Configure motors
    ev3_motor_config(left_motor, LARGE_MOTOR);
    ev3_motor_config(right_motor, LARGE_MOTOR);

    // Start task for self-balancing
    act_tsk(BALANCE_TASK);

    // Open Bluetooth file
    bt = ev3_serial_open_file(EV3_SERIAL_BT);
    assert(bt != NULL);

    // Start task for printing message while idle
	act_tsk(IDLE_TASK);

    while(1) {
    	uint8_t c = fgetc(bt);
    	sus_tsk(IDLE_TASK);
    	switch(c) {
    	case 'w':
    		if(motor_control_drive < 0)
    			motor_control_drive = 0;
    		else
    			motor_control_drive += 10;
    		fprintf(bt, "motor_control_drive: %d\n", motor_control_drive);
    		break;

    	case 's':
    		if(motor_control_drive > 0)
    			motor_control_drive = 0;
    		else
    			motor_control_drive -= 10;
    		fprintf(bt, "motor_control_drive: %d\n", motor_control_drive);
    		break;

    	case 'a':
    		if(motor_control_steer < 0)
    			motor_control_steer = 0;
    		else
    			motor_control_steer += 10;
    		fprintf(bt, "motor_control_steer: %d\n", motor_control_steer);
    		break;

    	case 'd':
    		if(motor_control_steer > 0)
    			motor_control_steer = 0;
    		else
    			motor_control_steer -= 10;
    		fprintf(bt, "motor_control_steer: %d\n", motor_control_steer);
    		break;

    	case 'h':
    		fprintf(bt, "==========================\n");
    		fprintf(bt, "Usage:\n");
    		fprintf(bt, "Press 'w' to speed up\n");
    		fprintf(bt, "Press 's' to speed down\n");
    		fprintf(bt, "Press 'a' to turn left\n");
    		fprintf(bt, "Press 'd' to turn right\n");
    		fprintf(bt, "Press 'i' for idle task\n");
    		fprintf(bt, "Press 'h' for this message\n");
    		fprintf(bt, "==========================\n");
    		break;

    	case 'i':
    		fprintf(bt, "Idle task started.\n");
    		rsm_tsk(IDLE_TASK);
    		break;

    	default:
    		fprintf(bt, "Unknown key '%c' pressed.\n", c);
    	}
    }
#endif
}
Example #3
0
static void
mrb_lcd_get_font_size(mrb_state *mrb, mrb_value lcd, mrb_int *fw, mrb_int *fh)
{
  mrb_value font = mrb_cv_get(mrb, lcd, mrb_intern_lit(mrb, "@@font"));
  ev3_font_get_size(mrb_fixnum(font), fw, fh);
}
void set_font(lcdfont_t font) {
	ev3_lcd_set_font(font);
	ev3_font_get_size(font, &FONT_WIDTH, &FONT_HEIGHT);
}