QQ登录

只需一步,快速开始

创客帮-青少年创客创意社区

快捷导航
开启左侧

Scratch和硬件的结合初步研究

[复制链接]
老哈 发表于 2014-11-22 21:55:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
        Scratch软件,是一款非常适合小学生的编程教学软件,他图文化的界面,拖拽式的编程风格,极大的降低了学生的编程难度,让编程不再纠结与语法的错误上面,而是专注于问题解决的逻辑思维方面。Scratch不仅能开放一些小游戏,做些剧本,而且能和硬件结合,做出非常有意思的东西。
由于Scratch在国内刚开始起步相对应的scratch的传感板很难买到,但是scratch官方公布了所有的通讯协议与标准,我们可以使用目前也是比较流行并且开源的arduino板子来自己制作一块我们自己的传感板。
    Arduino板是需要自己编程的,所以我们可以去他的官方网站下载,下载下来后,应该是一个压缩包文件,将文件解压缩后,会产生一个arduino的目录,里面就是arduino的IDE编程的软件,本软件是纯绿色软件,直接就可以使用的。
运行里面的arduino.exe程序,在arduino IDE中把以下程序复制进去
int val0;//定义一个电阻D使用的变量。
int val1;//定义一个电阻C使用的变量。
int val2;//定义一个电阻B使用的变量。
int val3;//定义一个按钮使用的变量。
int val4;//定义一个电阻A使用的变量。
int val5;//定义一个光线使用的变量。
int val6;//定义一个声音使用的变量。
int val7;//定义一个滑竿使用的变量。
void setup() //arduino程序的必要函数,一个arduino程序必须有setup()与LOOP()
              //setip()函数是一些关于一些设置的,loop()函数是循环执行的程序。
{
  Serial.begin(38400);//设置串口通讯速率
}
void loop() //同上的注释,也是arduino的必要函数,本函数主要是进行循环执行。
{
  val0=100;  //对电阻D变量赋值,先暂时赋值为100吧,大家可以自己调整这个数字,看看scratch中接收的数据变化
  sendSensorValues(); //这个是自定义的一个函数,这个函数主要是通过串口发送数据给scratch。
  delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
}
void sendSensorValues()  //自定义函数,本函数主用是用于发送8个数据值给scratch。
{
   ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
   ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
   ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
   ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
   ScratchBoardSensorReport(3,val3);//3编号的通道传递一个参数val3,3编号通道是按钮的数据。
   ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
   ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
   ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
   ScratchBoardSensorReport(7,val7);//7编号的通道传递一个参数val7,7编号通道是滑竿的数据。
}
void ScratchBoardSensorReport(int sensor, int value)
{                                          
  Serial.write( B10000000                 
                | ((sensor & B1111)<<3)   
                | ((value>>7) & B111));   
  Serial.write( value & B1111111);         
}
//自定义函数,本函数主要对数据进行编码,并通过串口发送给scratch。每次发送2个字节。上面程序中一共调用9次,则一共发送18个字节。
//本函数需要2个参数,第一个参数是通道编号,第二个参数是该通道上传感器的数值,现在我们没有接传感器,所以我们可以用变量直接赋值模拟一下。
//先编码高字节,(sensor & B1111)<<3的意思将编号为sensor值的通道进行和二进制数1111与操作,然后左移动3位,这个操作就是将通道编号放到
//高字节的第2-5位上,不够位数的自动补0操作。(value>>7) & B111)的意思是将变量数值右移7位后与二进制111进行与操作,则刚好将value的值
//放到高字节的第6-8位。加上最前面的B10000000的与操作,那么高字节的第1位就是为1,这样刚好组成一个高字节的编码要求了。
//编码低字节,跟B1111111与操作,刚好第1位置为0,后面不变。这样刚好符合低字节的编码要求。
我们让Arudino板就一直执行这个程序,这样Arudino就具备了和Scratch通讯的条件,至于怎么和Scratch通讯,下次在详细的说明。


[/td][/tr]
[/table]
好心情
您需要登录后才可以回帖 登录 | 注册

本版积分规则

客服热线
400-1234-888 周一至周日:09:00 - 21:00
公司地址:襄阳市樊城区长虹路现代城5号楼188

创客帮MAKER.BAND青少年创客创意社区是一个融教育、科技、体育资讯为一体的综合服务平台,专注于教育创新、专注于科技体育、专注于教育资讯。

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表