乐高打印机(附代码)

在某些课程中,或是自我兴趣的引导下,有些同学可能会需要用到ROBOTC语言进行编程,本着造福后辈的理念,下面给出我写的一份较为简单的乐高打印机ROBOTC代码。

乐高打印机本身可自己搭建,或寻找网上的图纸。

具体可参考网站 https://github.com/H-Hurrik/Easy_LEGO_Printer

#pragma config(Motor,  motorA,          x_motor,     tmotorEV3_Large, PIDControl, encoder)
#pragma config(Motor,  motorB,          y_motor,     tmotorEV3_Large, PIDControl, encoder)
#pragma config(Motor,  motorC,          z_motor,    tmotorEV3_Medium, PIDControl, encoder)

//This method changes hexadecimal to bianry string
void HexToBin(unsigned char* hexStr, unsigned char* binStr, int lenHex)
{
    memset(binStr, '0', lenHex * 8);
    unsigned char hexChar[2];
    for(int i=0;i<lenHex;i++)
    {
        hexChar[0]=(hexStr[i] & 0xF0) >> 4;
        hexChar[1]=hexStr[i] & 0x0F;
        for(int j=0;j<2;j++)
        {
            for(int k=0;k<4;k++)
            {
                if(hexChar[j] & (0x08 >> k))
                {
                    binStr[8*i+4*j+k]='1';
                }
            }           
        }
    }
}   

task main()
{
	unsigned char bin[257];
	int i;
	unsigned char bits[32]=
	{
	0x00,0x00,0x00,0x40,0x00,0x40,0x7E,0x40,0x08,0x7C,0x08,0x88,0x09,0x48,0x28,0x48,
    0x2E,0x48,0x28,0x50,0x28,0x50,0x28,0x20,0x2E,0x50,0x70,0x88,0x01,0x04,0x00,0x00,
	};
    //This represents a Chinese character "政". Of course you can use 
    //font extraction software to get the codes of the words you like
	HexToBin(bits, bin, 32);
	
    //A 16*16 font printer
    while(true)
    {
        for(i=0;i<256;i++)  //The binary string contains 256 chars.
        {
            if(i%16==0&&i!=0)   
            //When a line ends, moving the paper and 
            //moving the typewriter back to the first column.
            {
                resetMotorEncoder(y_motor);
                //Every time reset the motor, or it moves in a chaos.
                setMotorTarget(y_motor, 10, 50);
                //To turn 10 degrees with the speed of 50.
                waitUntilMotorStop(y_motor);
                //When y_motor stops, the program moves on.
                resetMotorEncoder(x_motor);
                setMotorTarget(x_motor, 15*16, -50);
                waitUntilMotorStop(x_motor);
            }
            if(bin[i]=='1')
            //This means the typewriter should type a single point.
            {
                resetMotorEncoder(z_motor);
                setMotorTarget(z_motor, 90, 50);
                waitUntilMotorStop(z_motor);
                resetMotorEncoder(z_motor);
                setMotorTarget(z_motor, 90, -50);
                waitUntilMotorStop(z_motor);
                sleep(200);
                //Sleep for a while for a better typing effects.
            }
            resetMotorEncoder(x_motor);
            setMotorTarget(x_motor, 15, 50);
            waitUntilMotorStop(x_motor);
        }
        if(i==256)
        {
            break;
        }
        //When the binary string ends, then should break the big while
    }
}

觉得对你有帮助的话就点个赞噢👍

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要编写一个 Python 乐高 EV3 解魔方机器人的代码,需要用到 EV3 Python 库和 Rubik 库。以下是一个简单的示例代码: ```python from rubik.cube import Cube from rubik.solve import CFOPSolver from ev3dev2.motor import LargeMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, OUTPUT_D from ev3dev2.sensor.lego import TouchSensor from ev3dev2.sound import Sound # 创建 EV3 对象 sound = Sound() motor_up = LargeMotor(OUTPUT_A) motor_down = LargeMotor(OUTPUT_B) motor_left = LargeMotor(OUTPUT_C) motor_right = LargeMotor(OUTPUT_D) touch_sensor = TouchSensor() # 创建魔方对象 cube = Cube() # 打乱魔方 cube.randomize() # 创建 CFOP 求解器对象 solver = CFOPSolver() # 求解魔方 solution = solver.solve(cube) # 启动魔方机器人 sound.beep() # 发出蜂鸣声,提示用户准备好了 for step in solution: # 操作机器人 if step == 'U': motor_up.on_for_degrees(50, 90) elif step == 'D': motor_down.on_for_degrees(50, 90) elif step == 'L': motor_left.on_for_degrees(50, 90) elif step == 'R': motor_right.on_for_degrees(50, 90) # 等待用户按下触摸传感器,开始下一步操作 while not touch_sensor.is_pressed: pass while touch_sensor.is_pressed: pass ``` 在这个示例代码中,我们使用 EV3 Python 库控制 EV3 机器人,使用 Rubik 库求解魔方。在每个步骤中,我们根据求解器返回的解法步骤控制 EV3 机器人的电机来操作魔方。每个步骤结束后,我们等待用户按下触摸传感器,然后再进行下一步操作。 需要注意的是,这个示例代码只是一个简单的示例,实际上编写一个完整的乐高 EV3 解魔方机器人需要考虑很多细节和异常情况,比如如何处理电机停止时的位置、如何处理触摸传感器的误触等等。编写一个稳定可靠的乐高 EV3 解魔方机器人需要一定的技术和经验,并需要进行多次实验和测试来验证其正确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值