版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
机器人育才是机器人育才计划的成果先进技术与市蛇口育才教育合作开展的中小学教育创新项目——“少年科学家成长计划”的一部分。机器人育才计划的重要内容之一就是开发一套行之有效、适合中小学机器人、和通用技术的课程和机器人育才。本是机器人育才的第三册,目标是让学生在第一二册学习完成让机器人具有根据房间颜色识别房间的功能;最后将具有乐曲功能的机器人与具有简单巡迹功能的机器人整合,增加颜点识别功能,完成巡线音乐百灵本基于欧美最流行的微控制器BASICStamp2,采用BASIC程序设计语中小学生机器人仍然采用的图形编程方式的教学模式,在提高中小学生动手学生的想象力和心引向更高点!本适合小学五年级以上学生和其他机器人者使用。本课程教学数:40学时 第1章机器人的语言——电子声 压电扬声 任务2:动作音 步骤5:铃 技能归 科学问 练 项目拓 第2章机器人识别颜 任务 认识颜色传感器通 任务 任务3巡线音乐百灵鸟机器人的制作和编 技能归 科学问 练 项目拓 第3章颜色分拣机器人的制作和编 任务1硬件搭建和传感器的安装连 任务2完成任务的策略和软件编 任务3更好的搬运策略和软件编 技能归 科学问 练 项目拓 第4章:机器人状态显示—LED数字显 七段显示 任务1:建立电路测试七段显示 任务2:控制七段显示 任务3:显示数 技能归 科学问 练 项目拓 第5 LCD显示模 任务 认识LCD显示模 任务 技能归 科学问 练 项目拓 1铃声、ATM(自动取款机)提醒你拿取、在商店商品条形码时的提示声音、计算器输入错误时发出等等,当然还有你每天生活中电这些声音都是由微控制器通过快速的传送不同时间间隔的高低信号到不同类型的扬声器而产生的电子铃声。高低信号的转换速率称为频率,它决定了电子铃声的音调。高低信号重复一次为一个周期,你常会看到一秒重复多少个周期被解HertzHz2kHz,2000次。1-1。1-1zo121-21-2吉他弦的造成空气中的压力改变这样的改变被耳朵侦测为音调改变的组件,当高低信号传到扬声器的正极时,压电组件就会,就像吉他一样造成FREQOUT指令用来传送高低信号到扬声器发出声音。它的用法在第二册中已经介绍过了。第二册中我们用它来发出不同频率的高低电信号驱动红外发射对应频率的红外线。现在复下。FREQOUTPin,Duration,Freq1{,PinDurationFREQOUT指令信号必须持续几毫秒。Freq1参数设定信号的频率,Freq2P9,2kHz1.5FREQOUT9,1500,2kHz1.5Debugterminal检视此扬声器何时响、何时停止。Debugterminal“Tonesending''SendatonetothepiezospeakerusingtheFREQOUT'{$STAMPBS2}'{$PBASICDEBUG"Tonesending...",CRFREQOUT9,1500,2000DEBUG"Tonedone."TestPiezoWithFreqout.bs2DurationFreq1Freq11500、2000、250030002:FreqoutFreq22个2种技巧。FREQOUTDurationfrequency则决Freq1参数来决定的。ActionTones.bs2pause、durationfrequency不同的结合'ActionTones.bs2'Demonstratehowdifferentcombinationsofpause,duration,and'canbeusedtomakesound'{$STAMPBS2}'{$PBASICdurationVARWordfrequencyVARDEBUG"Alarm...",CRPAUSE100FREQOUTPAUSEFREQOUTPAUSEFREQOUTPAUSEFREQOUTPAUSEDEBUG"Robotreply...",CRPAUSE100FREQOUT9,30,PAUSEDEBUG"Hyperspace...",CRPAUSE100FORduration=15TO1STEPFORfrequency=2000TO2500STEP20FREQOUT9,duration,frequencyDEBUG"Done",CRActionTones.bs2“Alarm1.5kHz持续0.5“Hyperspace”不使用延迟,而是包含多种的频率与持续时间。根据使用NEXTFOR…NEXT循环中被执行,就称为嵌套循环。以下是嵌套的FOR…NEXT循环如何运作。15durationFOR…NEXT循环的数值减少1,frequency循环。FORduration=15TOFORfrequency=2000TO2500STEP20FREQOUT9,duration,frequency换你试试看–音效ActionTones.bs2,而得到不同的音效。以下是对于“Hyperspace”的一种修正方式:DEBUG"Hyperspacejump...",CRFORduration=15TO1STEP3FORfrequency=2000TO2500STEP15FREQOUT9,duration,frequencyFORduration=1TO36STEPFORfrequency=2500TO2000STEP15FREQOUT9,duration,frequency可以同时传出两种频率,在音响装置中这称为"混音"。还记得任务#1中FREQOUT指令的语法:FREQOUTPin,Duration,Freq1{,kHz在一起:FREQOUT9,1000,2000,DTMF(DualToneMultiFrequency)。PBASIC中也有这样一个指令,称为DTMFOUT,拨打所发出就是一个例子。你可以在BASICStampManualDTMFOUT混音2次的渐强与渐弱(2Hz,依此类推。压电扬声器造成空气中压力的变化称为声波当两声波形成建设性时,造成会增强;若形成破坏性,造成则会减小。DebugTerminal''Demonstratesomeofthethingsthathappenwhenyoumixtwo'{$STAMPBS2}'{$PBASICDEBUG"Frequency=2000",CRFREQOUT9,4000,2000DEBUG"Frequency=3000",CRFREQOUT9,4000,3000DEBUG"Frequency=2000+3000",CRFREQOUT9,4000,2000,3000DEBUG"Frequency=2000+2001",CRFREQOUT9,4000,2000,2001DEBUG"Frequency=2000+2002",CRFREQOUT9,4000,2000,2002DEBUG"Frequency=2000+2003",CRFREQOUT9,4000,2000,2003DEBUG"Frequency=2000+2005",CRFREQOUT9,4000,2000,2005DEBUG"Frequency=2000+2010",CRFREQOUT9,4000,2000,2010DEBUG"Done",CRMixingTones.bs2此程序是被写来展示一些在你使用FREQOUTFreq2MixingTones.bs22001图1-3为钢琴的25个琴键,还有每个琴键被敲击时对应弦的频率,每白键5个黑键,同1组中8度音,由7个白键和5个黑键组成。每128度音,则频率变成2倍。举例来说,C7C62,C8C728音频率会变成一半,举例而言,A6A7的一半。如果你曾听到歌手练习”DOReMiFaSolLaTiDo,这位歌手正在或降键。举例来说,在C和D中间的黑键可称为C升(C#)D降(Db)。至于图1-3)2(2/12)=1760X1.224=FREQOUTBASICStamp的程序让压电扬声器演奏音样,frequencydurationpauseDoReMiFaSolLaTiDo.bs2'DoReMiFaSolLaTiDo.bs2'Sendanoctaveofhalfsecondtonesusingapiezoelectric'{$STAMPBS2}'{$PBASIC'SolfegeTone''''''''0.5810KΩ(褐-黑-橘)8220Ω(红-红-褐)8121-351175*2D7,D调。BASICStampmodule的EEPROM(电子式可清除只读器。虽然可以使用WRITE完成,但较佳的方式为使用DATA,使用的语{Symbol}DATA{Word}DataItem{,{Word}DataItem,…以下为示范如何使用DATA音符所对应的文字NotesDATA可以使用READ指令这些文字。字母’C’被置于位置Notes+0,第二个字母’C’被置于位置Notes+1,然后字母’G’被置于位置Notes+2,依此类推。举例而言,若想最后一个字母’G’进入叫做no etter的byteREADNotes+6, 你也可以使用DATA成组的数字。BASICStamp使用的frequency和duration的数值在时必须以word数据型态的变量,因为这些值常会超255DATA数据型态。FrequenciesDATAWord2093,Word2093,Word3136,WordWord3520,Word3520,Word因为每一个值需要2字节,使用read指令这些值与文字不同。第2093Frequencies02093Frequencies+2。第3136Frequencies+4,3136Frequencies+6。NotesDATA数据型态中,FrequenciesDATA数据型态里的值与音符相对FOR…NEXTNotesDATAnoetter的变量中,FrequenciesDATAnoteFreq的变量中。FORindex=0toREADNotes+index, READFrequencies+(index*2),WordnoteFreqDEBUGno etter,"",DECnoteFreq,CRnetter音符文字是可以的,noteFreq下一个范例程序使用DATA音符与持续时间,而且使用FREQOUT指令演奏每一个频率维持特定的时间。将演出儿歌”TwinkleTwinkleLittleStar”此范例将展现如何使用DATA,以及如何使用READ指令从中读TwinkleTwinkleLittle√使用DebugTerminal而显示这三个DATA数据型态,确认它们如预''ythefirstsevennotesfromTwinkleTwinkleLittle'{$STAMPBS2}'{$PBASICNotesDATAFrequenciesDATAWord2093,Word2093,Word3136,WordWord3520,Word3520,WordDurationsDATAWord500,Word500,Word500,WordWord500,Word500,WordindexVAR etterVARBytenoteFreqVARWordnoteDurationVARWordDEBUG"NoteDurationFrequency",CR, ----",CRFORindex=0TOREADNotes+index,no DEBUG"",no READDurations+(index*2),WordnoteDurationDEBUG"",DEC4noteDurationREADFrequencies+(index*2),WordnoteFreqDEBUG"",DEC4noteFreq,CRFREQOUT9,noteDuration,noteFreq换你试试看–增加并演奏音twin-klelit-tlestarHowIwon-derwhatyouare”音调为F、F、EEDDCFOR…NEXT01306。TwinkleTwinkle.bs2duration四分音符、八分音符、十六分音符和三十二分音符作记号,如同它们的名称,半音符的持续时间为全音符的一半,四分音符则为全音符的四分之一,以此类推。那么全音符持续多长呢?这必须依据所演奏的曲子。有些曲子可能以全音符为42利用byte取代DATA数据型态中的word,可以让你在写程序时两倍的易阅读。此任务一开始会介绍一个音乐信息并与音调、持续时间、休止的概以下为使用DATA数据型态音符和持续时间的范例演奏时将组合出这首JacquesLOOKUPLOOKDOWN指令会用来将文字配对至对应的频率。 DATA"C","D","E","C","C","D","E","C","E","F","G","E","F","G","Q"DurationsDATA4,4,4,4,4,4,4,4,4,4,2,4,4,2WholeNoteCONDATANotesData数据型态中的第一个续时间的:.1–whole.2–half.4–quarter.8–eighth.16–sixteenth.32–thirty-second所有的值从DurationDATA数据型态中出后,会被用来分割WholeNoteDurationFREQOUT完一次循环就会检查n etter是否已经取到"Q"。“B''ythefirstfewnotesfromFrereJacques.'{$STAMPBS2}'{$PBASICDEBUG"ProgramNotesDATA"C","D","E","C","C","D","E","C","E","F","G","E","F","G","Q"DurationsDATA4,4,4,4,4,4,4,4,4,4,2,4,4,2WholeNoteCONindexVARByteoffsetVARNibnoetterVARBytenoteFreqVARWordnoteDurationVARDOUNTIL etter=READNotes+index, LOOKDOWNno etter,["A","b","B","C","d","D","e","E","F","g","G","a","P","Q"],offsetLOOKUPoffset,[1760,1865,1976,2093,2217,2349,2489,2794,2960,3136,3322,0,0],READDurations+index,noteDurationnoteDuration=WholeNote/noteDurationFREQOUT9,noteDuration,noteFreqindex=index+1NotesAndDurations.bs2Notes与DurationDATA数据型态一个范例中已经讨论过。这些数据型态与WholeNote常数结合用来 程序中有5个变量的申明。虽然FOR…NEXT循环不再用来数据,但仍旧有一个变量index来记录要从DATA的Notes与Durations中哪个数据。offset变量在LOOKDOWN与LOOKUP指令中用来选择特定的值noetter变量由READ指令所的文字,LOOKUP与LOOKDOWN指令则转换这些文字成为数。用在用READ指令从DurationDATA值会在noteDuration变量,FREQOUTDuration。NotesDATADOUNTILnoetter=READ指令从NotesDATA中文字,然后存进no etter变量中。 etter变量用在LOOKDOWN指令中,设置offset变量的值。记住,当到“b”时,offset了1;到“B”时,offset了2;再到“C”时,offset了3,依此类推。offset的值在LOOKUP指令中决定了noteFreq变量的值该是多少。若offset是1,noteFreq就会是1865;若offset是2,noteFreq就会是1976;若offset是3,noteFreq就会是2093,依此类推。READNotes+index, LOOKDOWNno etter,["A","b","B","C","d","D","e","E","F","g","G","a","P","Q"],offsetLOOKUPoffset,[1760,1865,1976,2093,2217,2349,2489,2794,2960,3136,3322,0,0],音符的频率完成了,但持续时间仍须你决定。READindex变量,DurationDATAnoteDuration中。READDurations+index,音符所持续的时间会相等于WholeNote常数除以noteDuration。若2000÷8=250毫秒。noteDuration=WholeNote/noteDurationnoteFreqFREQOUTFREQOUT9,noteDuration,第一件事就是使用index变量下一段音符。index=index+1WholeNoteNotesAndDurations.bs2NotesAndDurationsYourTurn.bs2WholeNote的值。1500、1750、2000、2250当你只是要记调与持续时间那么输入音乐数据是非常容易的以下是贝8个音NotesDATA"G","G","G","e","P","F","F","F","D","Q"DurationsDATA8,8,8,2,8,8,8,8,2WholeNoteCON√你修改的Notes、DurationsDATA、WholeNotetempo例子中,01代表加入附点:DotsDATA0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,BeatsPerMinCONDATA数据型态将在换你试试看OctavesDATA数据型态演奏超过一个八度音OctavesDATA6,7,6,6,6,6,6,6,6,7,6,6,6,1-4ForHe’saJollyGoodFellow的前八个音调。所有的音√计算音符持续时间,看你是否能听出附点(一又二分之一)''ythebeginningofForHe'saJollyGood'{$STAMPBS2}'{$PBASICDEBUG"ProgramNotesDATA"C","E","E","E","D","E","F","E","E","D","D",OctavesDATA7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,DurationsDATA4,2,4,4,4,4,2,2,4,2,4,4,4,4,2,DotsDATA0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,BeatsPerMinCONindexVARByteoffsetVARNibnoetterVARBytenoteFreqVARWordnoteDurationVARWordnoteOctaveVARNibnoteDotVARBitwholeNoteVARwholeNote=60000/BeatsPerMin*4DOUNTILno etter="Q"READNotes+index,noLOOKDOWNnoetter,["C","d","D","e","E","F","g","G","a","b","B","P","Q"],LOOKUPoffset,[4186,4435,4699,4978,5274,5588,5920,6645,7040,7459,7902,0,0],READOctaves+index,noteOctavenoteOctave=8-noteOctavenoteFreq=noteFreq/(DCDREADDurations+index,noteDurationnoteDuration=WholeNote/noteDurationREADDots+index,IFnoteDot=1THENnoteDuration=noteDuration*3/2FREQOUT9,noteDuration,noteFreqindex=index+MusicWithMoreFeatures.bs2OctavesDurationsDotsDATA个C不包含“Q)BeatsPerMin常数设定曲子的节奏。NotesDATA"C","E","E","E","D","E","F","E","E","D","D",OctavesDATA7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,DurationsDATA4,2,4,4,4,4,2,2,4,2,4,4,4,4,2,DotsDATA0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,BeatsPerMinCON在先前的范例中,WholeNoteWholeNote就能决定其它音符的持续时间,和先前的程序一样。index、offset、noetter、noteDuration变量的用法也如同先前程序。noteFreq变量的处理方式有些不同,因为它被调整为依据音调处在第几个八度音。noteOctave、noteDotwholeNoteVARWordindexVARByteoffsetVARNib etterVARBytenoteFreqVARWordnoteDurationVARWordnoteOctaveVARNibnoteDotVARBitwholeNoteBeatPerMinBeatPerMin600004,所得的值就是全wholeNote=60000/BeatsPerMin*Stamp60000beatsPerMin4。括号可用来结合运算。如果想让beatsPerMin4,你可以如此:wholeNote60000(beatsPerMin*4)DOUNTILnoetter=READNotes+index, LOOKDOWN etter,["C","d","D","e","E","F","g","G","A","b","B","P","Q"],现在音域可以是混合的,其中部分的程序会知道音调频率已经改变。LOOKUP指令中的值都来自第八个八度音中的频率,如果你想要演奏第八个八度音,124除得到第六个八LOOKUPoffset,[4186,4435,4699,4978,5274,5588,5920,6645,7040,7459,7902,0,0],noteFreqREADOctaves5READOctaves+index,20=1,21=2,22=4,or23=858的noteOctave8noteOctavenoteOctave8就得到53。noteOctave=8-现在,noteOctave2PBASIC2的DCD运算。DCD01、DCD12、DCD2是4、DCD38DCDnoteOctavenoteFreq1、2、48除,结果就会让noteFreq被设定到正确的音域。你可以在换你试试看的单元中使用DebugTerminal仔细观察如何运作。noteFreq=noteFreq/(DCD现在无论是哪一个音符都可以加上附点,也就是将持续时间延长1.5倍。使用READ指令存在EEPROM中的DotDATA数据型态的值当noteDot变量是1,IF…THEN32。READDurations+index,noteDurationnoteDuration=WholeNote/noteDurationREADDots+index,IFnoteDot=1THENnoteDuration=noteDuration*3/5,4,3,2,1,0,1,2,3,1.5***/。FREQOUT9,noteDuration,noteFreqindex=index+1MusicWithMoreFeatures.bs2下所示的“TakeMeOuttotheBallGame”演奏的音调大都在第六个八度音√另存档名为dataNotesDATA"C","C","A","G","E","G","D","P","C","C","A","G",OctavesDATA6,7,6,6,6,6,6,6,6,7,6,6,6,DurationsDATA2,4,4,4,4,2,2,4,2,4,4,4,4,DotsDATA0,0,0,0,0,1,0,0,0,0,0,0,0,BeatsPerMinCON6OctavesDATA76“TakeMeouttotheBallGame”听起来很奇怪OctaveDATA步骤5:铃很多可以从网页中演奏的音乐。计算机传送音符的数据到的微控制器中.然后当来电时,演奏这些音符,这就是铃声。、以下范例使用RTTTL的格式记录第五交响曲:、这种音乐数据字符串的格式称为RTTTL,为RingToneTextTransferLanguage的缩写。使用RTTTL格式的最大好处是因为它广泛的于因特样的格式并且加载音乐到你的。RTTTL的详细说明也有在网络上上述的第五号交响曲。任务的最后,有个应用程序可RTTTL格式的以下是SELECT…CASE的语法,重新复下SELECT 你可以尝试下面的两个范例程序,观察SELECT…CASE如何运作。SelectCaseWithValues.bs2DebugTerminalDebugTerminalBASICStamp1-5。图1-5BASICBASICStamp,观察接收窗口的输出。DebugTerminal065535Enter1-1DebugTerminal输入的数值大小做出正图表1-1:变量的型态和可以的数值范0to0to0to0to''Enteravalueandseetheminimumvariablesizerequiredtohold'{$STAMPBS2}'{$PBASICvalueVARDEBUG"Enteravaluefrom",CR,"0to65535:"DEBUGINDECvalueSELECTvalueCASE0,DEBUG"Bit",CRPAUSE100CASE2TODEBUG"Nib(Nibble)",CRPAUSE200CASE16TODEBUG"Byte",CRPAUSE300CASE256TO65535DEBUG"Word",CRPAUSE400DEBUGCR,"Enteranothervalue:"SelectCaseWithValues.bs2申明一个字变量输入进DebugTerminal的数字valueVARDEBUGINvalueDEBUGINDECSELECTvalueSELECTvalue01DEBUGPAUSE指令CASE0,DEBUG"BIT",CRPAUSE100value215DEBUGPAUSE指令就CASE2toDEBUG"NIB(Nibble)",CRPAUSE200ENDSELECTSELECT…CASE(输入不同的文字√点选DebugTerminal的窗口,输入文字,然后观察结'Programthatcanidentifysomecharacters:case,digit,'{$STAMPBS2}'{$PBASICcharacterVARDEBUG"Enteracharacter:",CRDEBUGINcharacterSELECTcharacterCASE"A"TODEBUGCR,"Uppercase",CRCASE"a"TO"z"DEBUGCR,"Lowercase",CRCASE"0"TO"9"DEBUGCR,"Digit",CRCASE"!","?",".",DEBUGCR,"Punctuation",CRCASEELSEDEBUGCR,"Characternotknown.",CR,"Tryadifferentone."DEBUGCR,"Enteranothercharacter",CRSelectCaseWithCharacters.bs2的字符都是以byte的格式SELECT叙述选取character变量适用于哪个评SELECTBASICStampEditorSELECTcharacterCASE"A"to"Z"DEBUGCR,"Uppercase",CRCASE"a"to"z"DEBUGCR,"Lowercase",CRCASE"0"to"9"DEBUGCR,"Digit",CRCASE"!","?",".",","DEBUGCR,"Punctuation",CASECASEDEBUGCR,"Characternotknown.",CR,"Tryadifferent换你试试看-SelectingBasedonSelectCaseWithCharacters.bs2SELECT…CASE叙述,在你输^“Specialcharacter”RTTTL铃 以下为RTTTL的,包含的音乐数据在下一个范例程序中要用到。还有5RTTTL_FILEDATA子称为起床号,在中当作集合号,是每天早上的第一件事.你可能已在或电视中听过。RTTTL_FileDATA"Reveille:d=4,o=7,b=140:8g6,8c,16e,16c,8g6,8e,",√使用BASICStampEditor开启你的,或是非常仔细地输入以下√前往换你试试看的单元,尝试其它的曲子(RTTTL_FILEDATA数据型态''yNokiaRTTTLformatringtonesusing'{$STAMPBS2}'{$PBASICDEBUG"Program [I/ODefinitionsSpeakerPinCON9'Piezospeakerconnectedto [VariablescounterVARWord'Generalpurposecounter.charVARByte'Variablestorescharacters.indexVARWord'Indexforpointingatdata. etterVARByte'Storesnotecharacter.noteFreqVARWord'Storesnotefrequency.noteOctaveVARWord'Storesnoteoctave.durationVARWord'Storesnoteduration.tempoVARWord'Storestempo.default_dVARByte'Storesdefaultduration.default_oVARByte'Storesdefaultoctave.default_bVARWord'Storesdefaultbeats/min. [EEPROMDataRTTTL_FileDATA"Reveille:d=4,o=7,b=140:8g6,8c,16e,16c,8g6,8e,",DoneDATANotesDATA"p","a","#","b","c","#","d","#","e","f","#","g",Octave8DATAWord0,Word3520,Word3729,WordWord4186,Word4435,Word4699,WordWord5274,Word5588,Word5920,WordWord [Initializationcounter=0'InitializeGOSUBFindEquals'Findfirst'='infile.GOSUBProcessDuration'Getdefaultduration.GOSUBFindEquals'Findnext'='.GOSUBProcessOctave'Getdefaultoctave.GOSUBFindEquals'Findlast'='.GOSUBGetTempo'Getdefault [ProgramCodeDOUNTILchar="q"'Loopuntil'q'inDATA.GOSUBProcessDuration'Getnoteduration.GOSUBProcessNote'Getindexvalueofnote.GOSUBCheckForDot'Ifdot,3/2duration.GOSUBProcessOctave'GetGOSUByNote'Get ynote,LOOP'Endofmainloop.END'Endofprogram.'-----[Subroutine-FindEqualsCharacter]-------------------- 'Gothroughcharactersin'RTTTLfilelookingfor ''='.IncrementREADRTTTL_File+counter,char 'until'='isfound,thencounter=counter+1'return.LOOPUNTILchar="="'-----[Subroutine-ReadTempofromRTTTLHeader]-----------------'EachkeyboardcharacterhasauniquenumbercalledanASCIIvalue.'Thecharacters0,1,2,...9haveASCIIvaluesof48,49,50,...57.'Youcanalwaysconvertfromthecharacterrepresentingadigitto'toitsvaluebysubtracting48fromthevariablestoringthedigit.'YoucanexaminethisbycomparingDEBUGDEC49andDEBUG49.GetTempo:'ParseRTTTLfileforTempo.'Convertcharacterstodefault_b='digitsbysubtracting48 'fromeachcharacter'sASCIIREADRTTTL_File+counter,char'value.I tivelymultiplyIFchar=":"THEN 'eachdigitby10iftheredefault_b=default_b/10 'isanotherdigit,thenaddcounter=counter+1 'themostrecentdigitto 'one'sENDIF'Forexample,thedefault_b=default_b+char-48'"120"is(1X10Xcounter=counter+1'+(2X10)+0.The'1'default_b=default_b*10'isconvertedfirst,thenLOOPUNTILchar=":"'multipliedby10.The'2''isthen '0isconverted/added, [Subroutine-LookupOctaveProcessOctave:'Octavemayormaynotbe'includedinagivennoteREADRTTTL_File+counter,char'becauseanynotethatisSELECTchar'yedinthedefaultCASE"5"TO"8"'octavedoesnotspecifynoteOctave=char-"0"'theoctave.Ifacharcounter=counter+1'from'5'to'8'thenuseCASEELSE'it,elseusedefault_o.noteOctave=default_o'CharactersareconvertedENDSELECT'todigitsbysubtractingIFdefault_o=0THEN''0',whichisthesameasdefault_o=noteOctave'subtracting48.ThefirstENDIF'timethissubroutineis'called,default_oisRETURN'If0,thenset'-----[Subroutine-FindIndexofNote]---------------------------READRTTTL_File+counter,charSELECTcharCASEindex=counter=counter+1CASE"a"TO"g"FORindex=1TOREADNotes+index,no IF etter=charTHENcounter=counter+READRTTTL_File+counter,SELECTCASEindex=index+1counter=counter+1'Setindexvalueforlookup'ofnotefrequencybasedon'notecharacter.If'p','indexis0.If'a'to'g','readcharactervaluesin'DATAtableandfindmatch.'Recordindexvaluewhen'matchisfound.Ifnext'charisasharp(#),add'1totheindexvalueto'increasetheindex(and'frequency)by1notch.'Aswithothersubroutines,'incrementcounterfor'characterthatis'-----[Subroutine-DetermineNoteDuration]-----------------------READRTTTL_File+counter,charSELECTcharCASE"1","2","3","4",duration=char-counter=counter+READRTTTL_File+counter,charSELECTcharCASE"6",duration=duration*10+char-'Checktoseeifcharacters'form1,2,4,8,16or32.'Ifyes,thenconvertfrom'ASCIIcharactertoavalue'bysubtracting48.Inthe'caseof16or32,multiply'by10andaddthenext'digittotheonescounter=counter+1CASEduration=default_dIFdefault_d<>0duration=60000/default_b/duration*3default_d=duration'Ifnoduration,use'usedefault.'Ifdefault_dnotdefined'(ifdefault_d=0),then'setdefault_d=tothe'durationfromthed=#.'-----[Subroutine-CheckFor'.'Indicating1.5Duration]--------CheckForDot:'Checkfordot'multiplydurationbyREADRTTTL_File+counter,char'Ifdotfound,multiplybySELECTchar'3/2andincrementcounter,CASE"."'else,donothingandduration=duration*3/2'return.counter=counter+1'-----[Subroutine-FindCommaandyNote/Duration]------------yNote:'Findlastcommain'currentnoteentry.READRTTTL_File+counter,char'fetchthenotefrequencySELECTchar'fromdata,andyit,orCASE","'pauseiffrequency=0.counter=counter+1READOctave8+(index*2),WordnoteFreqnoteOctave=8-noteOctavenoteFreq=noteFreq/(DCDnoteOctave)IFnoteFreq=0THENPAUSEdurationFREQOUTSpeakerPin,duration,MicroMusicWithRtttl.bs2码。其实,比起写程序的观念,里面的文字有的乐趣。以下为此应用范例中的,现在你应该很熟悉了:.DATA.READ.IF…ELSE…ENDIF.DO…LOOPWHILEGOSUB,labels,RETURN.FOR…NEXT.LOOKUPLOOKDOWN.FREQOUTPAUSE.MicroMusicWithRTTTL.bs2RTTTL_FILEDATA取代成以下的5RTTTL_FileDATARTTTL_FileDATA√执行MicroMusicWithRTTTL.bs2测试每一个RTTTLRTTTL_FileDATA"TwinkleTwinkle:d=4,o=7,b=120:c,c,g,g,a,a,2g,f,",RTTTL_FileDATA"FrereJacques:d=4,o=7,b=125:c,d,e,c,c,d,e,c,e,f",RTTTL_FileDATA"Beethoven5:d=8,o=7,b=125:g,g,g,2d#,p,f,f,f,2d"RTTTL_FileDATA"ForHe'sAJollyGoodFellow:d=4,o=7,b=320:c,2e,e,e,",RTTTL_FileDATA"TakeMeOutToTheBallgame:d=4,o=7,b=225:2c6,c,a6,",BASICStamp与压电扬声器制造声音和音调。FREQOUTBASICStampFREQOUT过程太繁杂,可用更好的方式存取音乐数据。DATA数据型态和自定义的标示,可以不加前缀的byte值和前面加上前缀的Word值。READ指令用于还原于DATA数据型态的值,指令中的address参数用于分辨DATA数据型symbolNOTESDURATIONS音乐数据可以于一个格式内,让他们转变成乐谱的形式.我们可以使用LOOKUP与LOOKDOWN指令把乐谱型的数据转换放入Frequency使用数算把SELECT…CASE用于评估变量属于哪一种情形,特别适用在变量是文字和数大程序用于转换描述铃声的文字字符串(称为RTTTL),该程序使用了所评估RTTTL中的文字属于何种变量。FREQOUT15,1000,30002,B6DATAREAD你能设置的DATA数据型态吗?如果可以,又该如何告诉READ指令在一个或多个DATA数据型态中数据呢?SELECT…CASE500MusicWithMoreFeatures.bs2使得每次演奏附点音符时,DebugTerminal0.23kHz0.12章第2册中学习到的QTI传感器只能识别黑色或者白色,也就是说,无论机器QTI雨后美丽的彩虹告诉我们白色的光是是说白光中包含着各种颜色的色光,如红
2-1(Red有红色可以通过,蓝色和绿色都被,这样就可以得到红色光的光强;同理,33R、G和B对应的R、GB②设置定时器为一个固定时间(10ms计算这段时间内颜色传感器的输出脉冲数,计算出一个比例因子,通过这个比例255R、GB 认识颜色传感器通2-210S2、S3,就可以选择检测不同的原色;不同的原色光强对应不同频率的输出,方OUTS0S1LEDLED2-2概括起来,S0、S1的信号组合用于选择输出比例因子或电源关断模式;S2、S3用于选择颜色滤波器的类型;OUT是频率输出引脚,GND是的接地引脚,Vdd为提供工作电压。表2-1是S0、S1及S2、S3的可用组合。表2- S0、S1、S2、S3的组合选000001011010无1111 DM-S283021101铜螺柱M3*204个,铜螺钉 4M3*10612-32-42-2BS2机器人控制器(教学板USB例程ColorSensorTest.bs2是颜色传感器的测试程序。将程序输入BASICStampEditor,USB2-4 '{$STAMPBS2}'{$PBASIC2.5}' [ProgramDescription'ThisprogramisusedtogetandoutputcolordatafromtheTCS230-'colorsensordaughterboardwhenconnectedtoaBS2viatheDB- [I/ODefinitions'Changethe"BS2"pindesignatorsas' DB-'--- 2'C3'D4'E5'F [Constants'Definecountperiodsforeachcolor.Adjusttheseforreadingsjustunder'255forawhitesheetofpaper.'Redreading'Greenreading'Bluereading 'Redcolor'Greencolor'Bluecolor [Initialization 'umoutput 'Turnon [ProgramCode 'Getthecolordata,andoutputtoDEBUG. "R",DEC3RED "G",DEC3GREEN "B",DEC3BLUE [Subroutines'Color:Readallthreecolor 'Addresstheredoutput. OUT,pRED,RED 'Readtheredcomponent. 'Addresstheblueoutput. OUT,pBLUE,BLUE 'Readthebluecomponent. 'Addressthegreenoutput. OUT,pGREEN,GREEN'Readthegreen本测试程序所使用白平衡方法为任务1中介绍的第法。设计原理是分'Redreading'Greenreading'Bluereading255,255。2-5颜色传感器的白平衡测试(正对白色纸张255,255。比如,255,pRed,255,pRed,让红255pRed2-62-6图2- 白平衡时的输出将三个参数调整好后运试程序就可以测量实际的颜色程序的具体工作首先定义三个变量,用来测得的颜色分量。 'Redcolorreading. 'Greencolorreading. 'Bluecolorreading.LED'output'" 'Getthecolordata,andoutputtoDEBUG. "R",DEC3RED "G",DEC3GREEN "B",DEC3BLUE COUNT 'Addresstheredoutput. OUT,pRED,RED 'Readtheredcomponent. 'Addresstheblueoutput. OUT,pBLUE,BLUE 'Readthebluecomponent. 'Addressthegreenoutput. OUT,pGREEN,GREEN'ReadthegreenCOUNTPin,Duration,Variable定,计数的结果在Variable中。4.16Variable是一个计数结果的变量,通常是Word类型32机器人检测墙壁或者地面的颜色,根据检测到颜色不同的音乐(可以设想为不间的主人喜欢不同的音乐,机器人能够投其所好。DM-S283021QTI1(4压电扬声器1101M3*204M3*1062112-72-8口位于下方,这样便于走线。颜色传感器同微控制器的连接仍旧采用任务22-84QTIP8P11,这样就可以直接采用前面编写的程序。最后将压电扬声器安装到机器人控制器的面包板上,将压电扬声器的P62-92-913332-324QTI33LineFollowerWithMusic.BS22-7''不同的铃'{$STAMPBS2}'{$PBASIC [I/ODefinitions'Changethe"BS2"pindesignatorsas''----DB-----------0 1 2 3 4 5 [Constants'Definecountperiodsforeachcolor.'255forawhitesheetofpaper. 'Redreading default'Greenreading9'Bluereading [VariablesRoadMarkVARBit VARBytedurationVARNibfrequencyVAR VAR 'qtiblack/white'Redcolor'Greencolor'Bluecolor'
[Main 'MainGOSUBCheck_Qtis 'GetQTIstatesSELECTqtis 'Controlservospeeds/directionsCASE 'RotatePULSOUT13,PULSOUT12,CASE 'PivotPULSOUT13,PULSOUT12,CASE 'StraightPULSOUT13,PULSOUT12,CASE 'StraightPULSOUT13,PULSOUT12,CASE 'StraightPULSOUT13,PULSOUT12,CASE 'PivotPULSOUT13,PULSOUT12,CASE 'RotatePULSOUT13,PULSOUT12,CASE '
IFRoadMark=0THEN 'ThisisthecrosspointGOSUBTurn_Right_90GOSUBColor_And_ 'CheckcolorandGOSUBU_TurnCASE PULSOUT13,PULSOUT12,650PAUSE[Subroutines'Check_Qtis:ReadallfourqtiDIRC= 'P11..P8->PAUSE 'Delay=230DIRC= 'P11..P8->PAUSE 'Delay=230'PULSOUTUnusedPin, 'Delays=208+qtis=INC 'StoreQTIoutputsinINC [Subroutines'Color:Readallthreecolor [Initialization 'umoutput'"onOUTC=%1111 'SetOUTCbitsto1PAUSE1000 'Addresstheredoutput. OUT,pRED,RED 'Readtheredcomponent. 'Addresstheblueoutput. OUT,pBLUE,BLUE 'Readthebluecomponent. 'Addressthegreenoutput. OUT,pGREEN,GREEN'ReadthegreenIFRED>150ANDBLUE<50ANDGREEN<50 'RedFORcounter=1TO5FREQOUT15,500,1500PAUSE500 RED>100ANDGREEN>100ANDBLUE<60THEN'YellowFORcounter=1TOFREQOUT15,30,2000ELSEIFRED<30ANDGREEN<30ANDBLUE>30FORduration=15TOFORfrequency=2000TO2500STEP20FREQOUT15,duration,frequencyPAUSE1000 'umoutput 'TurnoffLED. [Subroutines'U_Turn:robotmakesaUFORcounter=1TO40PULSOUT12,850PULSOUTPAUSE20FORcounter=1TO40PULSOUT12,750PULSOUTPAUSE20需要掌握的技能,包括颜色传感器的接口定义、同微控制器的连接方法、白3面巡游、辨识房间颜色和不同音乐的机器人是未来进行复杂机器人开发所必COUNT6P2-743章智能搬运教育机器赛的一个标准比赛项目,其比赛任务是将不同将物体放置的位置精度和完成任务时间来计算并决定,优先考虑完成任务的度得分一样时,才比较他们完成任务的时间,时间越短的靠前。3-1HHGIBCDFAOEJS3-1搬运到对应的三个颜色中心区域内,最后回到出发区。场地的标准尺寸可以到上查询。40mm11套搬运手爪而组成,按照前4QTI3-2所示的方3-22机器人解决所有颜色块组合的搬运分拣任务,不需要在抽签后调整和程序。计算和步骤描述出来,这就是算法设计的过程。1、循线到C(通过计算走的步数和QTI传感器的状态判断是否到达C点2、到达C到O点,再到A3步;到A3步;,掉头经GO点,再到A3如果是黑色,循线到H点,右转然后循线到I点,,掉头,循线回到O点,再到A3步;如果是蓝色,循线到H点,右转然后循线到I点再到J点,,掉头经IOA3步;3、颜色传感器检测AOHO点,再到E4步;O135G点,倒退,掉头,循线回到OE4步;如果是黄色,直接循线到到F点,,掉头循线回到O点,再到4,如果是黑色,掉头循线回到O点,左转45度然后循线到I点,掉头,循线回到O点,再到E4步;,如果是蓝色,检查C循线到J点,,掉头,原路循线回到O点,再到E点,继续4步;到E4步;4、颜色传感器检测EOHO点,再如果是白色掉头循线回到O点右转45度然后循线到G点,掉头,循线回到O点,再到出发区,结束。如果是蓝色,直接循线到J点,,掉头循线回到O点,再到出发如果是黑色掉头循线回到O点右转135度然后循线到I点掉头,循线回到O如果是黄色,掉头循线回到O点,再循线到F点,,掉头,原路T90190T45145T30130T1201120T1351135的运动脉冲数;Laf:AF,CH,EG运动脉冲数,直接从存放点推色块到目标点,4是将原来的音乐语句改成颜色变量的赋值语句 [Initialization 'umoutput 'TurnonOUTC= 'SetOUTCbitsto 'Addresstheredoutput. OUT,pRED,RED 'Readtheredcomponent. 'Addresstheblueoutput. OUT,pBLUE,BLUE 'Readthebluecomponent. 'Addressthegreenoutput. OUT,pGREEN,GREEN'ReadthegreenIFRED>150ANDBLUE<50ANDGREEN<50 RED>100ANDGREEN>100ANDBLUE<60ELSEIFRED<30ANDGREEN<30ANDBLUE>30 ELSEIFRED<30ANDGREEN<30ANDBLUE<30 ELSEIFRED>50ANDGREEN>50ANDBLUE>50 'umoutput '" 'Turnoff44类。通过合理QTI3-1所示。3-1QTIQTI黑色标志点如OSOSAFF点,CHH点,DI方向的I点,EJ方向的J点等。点JIH方向的I点和HGHI方向的H点和I 1环是灰色的细线,QTI传感器能够检测到这些细线,并通过设计合适的程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024沙盘制作合同
- 2024机器设备修理合同范文
- 2024建筑工程施工扩大劳务分包合同
- 2024影视剧聘用未成年演员合同
- 《微喜帖用户指南》课件
- 深圳大学《中国法律思想史》2023-2024学年第一学期期末试卷
- 深圳大学《药理学实验》2022-2023学年第一学期期末试卷
- 泵站管理员合同(2篇)
- 副高职称评审述职报告(13篇)
- 核电站拆迁协议书(2篇)
- 应力的概念讲解
- JF-2023-合同中小学校校外供餐合同示范文本
- 入团答辩-演讲模板
- 聂树斌案-演讲模板
- 只争朝夕不负韶华岗位竞聘述职报告
- 配料个人述职报告
- 农场工作制度与农民岗位职责
- 2024年山东公务员考试行测真题及解析【完美打印版】
- 茶百道选址策略分析报告
- 田赛裁判法与规则2
- 社区心肺复苏术普及
评论
0/150
提交评论