Arduino技术问询:如何打印与单词绑定的变量并输出随机对应单词
Arduino随机输出指定单词的解决方案
嘿,作为Arduino初学者,你已经迈出了第一步很棒!不过现在的代码里有两个小问题:一是你把单词对应的变量设成了数字(比如aye = 1),这没法直接输出单词;二是随机数范围random(0,4)会生成0、1、2、3,但你的变量对应1-4,范围不匹配。我给你两种实现思路,优先推荐第一种,更简洁好维护:
推荐方案:用字符串数组存储单词(扩展性强)
这种方式以后要加新单词,直接在数组里加就行,不用改其他逻辑:
// 把要随机输出的单词存在字符串数组里,索引从0开始 String words[] = {"aye", "sup", "boi", "bruv"}; // 自动计算数组里的单词数量,避免手动数错 int totalWords = sizeof(words) / sizeof(words[0]); void setup() { Serial.begin(9600); // 设置随机数种子:用未接线的模拟引脚读取环境噪声,让每次重启的随机序列不一样 randomSeed(analogRead(0)); } void loop() { // 生成0到totalWords-1的随机数,刚好对应数组的索引 int randomIndex = random(totalWords); // 输出对应的单词 Serial.println(words[randomIndex]); // 加个延时,避免输出太快刷屏 delay(1000); }
关键细节解释
- 字符串数组:
String words[] = {...}把所有目标单词集中存储,数组索引从0开始,所以words[0]就是"aye",words[1]是"sup",以此类推。 - 自动计算单词数量:
sizeof(words) / sizeof(words[0])会自动算出数组里的元素个数,以后你要加新单词,直接在数组里追加就行,不用手动修改数字。 - 随机数种子:如果不加
randomSeed(analogRead(0)),Arduino每次重启后会生成一模一样的随机序列,用模拟引脚的噪声做种子能让随机结果更“真随机”。
备选方案:保留你的变量思路(适合理解逻辑)
如果你想坚持用单个变量对应单词的方式,也可以调整代码,但这种方式以后加新单词会很繁琐:
// 把变量设为字符串类型,而不是数字 String aye = "aye"; String sup = "sup"; String boi = "boi"; String bruv = "bruv"; void setup() { Serial.begin(9600); randomSeed(analogRead(0)); } void loop() { // 生成1到4的随机数,对应你设定的变量编号 int randnumber = random(1,5); // 根据随机数匹配对应的单词输出 if(randnumber == 1){ Serial.println(aye); } else if(randnumber == 2){ Serial.println(sup); } else if(randnumber == 3){ Serial.println(boi); } else if(randnumber == 4){ Serial.println(bruv); } delay(1000); }
优先选第一种数组方案哦,代码更简洁,后续维护也更方便~
内容的提问来源于stack exchange,提问作者Jim Hoggey
相关产品推荐
相关产品推荐

