简单一点的说:PC控制SMC盒子,盒子里面用Debian系统,系统控制SMC串行端口,端口控制51单片机,单片机控制车体,OK!!!

  详细一点,往下来看:

  1,先往SMC盒子安装Debian系统,详细请参考:lintel 的在SMC无线硬盘盒(MGB100)上运行Debian

  2,焊接盒子的串行接口线,请参考: lintel的SMC无线硬盘盒(MGB100) 研究之四 JTAG 地址:

  只需要焊接1 3 6号脚就可以,我焊接的一般就不上图了(如果经常用串行接口的话,可以去掉一个USB中间两根线,改接这两根RX ,TX ,嘿嘿,反正两个USB呢,也用不着那么多,个人观点哦,根据自己实际情况定。)

  3,焊接受控制电路板。以下以51单片机为例(有串口了,其他还不好说吗!),我的如下:

  特别注意的,如果有51单片机编程器的话就不用焊RS232了,这个盒子串口是TTL电平,51也是,绝配!记得RX--TX TX--RX哦。

  当然没有编程器,那就多费点劲,想偷懒,就找个老式的COM口数据线,嘿嘿,那个一般都是RS232,具体接法百度吧!

  4,51单片机再接个L298N,接法如下,详情百度,多如牛毛。

  硬件一切就绪,接下来,软件

  1,先说一下SMC盒子串口的控制,用minicom控制,具体如下

  debian安装OK后

  apt-get install minicom

  一路Y,安装完成。

  minicom -s

  配置串口,出现配置菜单:选serial port setup

  进入串口配置

  输入A配置串口驱动为/dev/ttyS0

  输入E配置速率为9600 8N1

  输入F将 Hardware Flow Control 设 为 NO

  回车 退出

  由于我们使用minicom作为超级终端控制路由器等设备, 而不是控制modem, 所以需要修改Modem and dialing, 将Init

  string, Reset string, Hang-up string设置为空。 设置完成后选择Save setup as

  dfl将当前设置保存为默认设置。

  在配置菜单 选Save setup as df1保存(一定要记得这一步)

  选Exit退出

  下次在输入minicon 即可直接进入,按CTRL+A 再按shift+E 调出回显,OK完成。

  2,要远程控制,动态域名即可。

  3,单片机程序

  //Code by myasus 仅希望抛砖引玉

  //QQ:31495962

  #include< P>

  #include < P>

  sfr DC=0x90; //P1是电机接口,P1.0--A P1.1--BP 1.2--ENAB P1.3--ENCD P1.4--C P1.5--D A--GO B--BACK C--LEFT D--RIGHT

  //-------------------------取数据----------------------//

  char getData(void)

  {

  char c;

  while (!RI);

  c=SBUF;

  RI=0;

  return (c);

  }

  //------------------------串口定义-----------------------//

  void Init_Timer1_COM(void)

  {

  SCON=0x52;

  TMOD=0x20;//定时器1定时方式2

  TL1=0xfd;//baudRate:9600

  TH1=0xfd;

  TR1=1;//timer1 reset

  }

  //-----------------------主程序--------------------------//

  main()

  {

  char c;

  Init_Timer1_COM();

  while(1)

  {

  c=getData();

  switch (c)

  {

  case ‘w’:

  printf("GO n”); DC=0x05;

  break;

  case ‘s’:

  printf("BACK n”); DC=0x06;

  break;

  case ‘a’:

  printf("LEFT n”); DC=0x1d;

  break;

  case ‘d’:

  printf("RIGHT n”); DC=0x2d;

  break;

  case ‘z’:

  printf("LEFT BACK n”); DC=0x1e;

  break;

  case ‘c’:

  printf("RIGHT BACK n”); DC=0x2e;

  break;

  default:

  printf("You are wrong! n”); DC=0x00;

  break;

  }

  }

  }