代码知识很少,试图帮助妹妹完成Arduino项目
这个项目涉及到用Arduino Uno板从0-500之间的数字创建一个数字猜测游戏。在猜测一个介于0和500之间的数字之前,代码似乎工作得很好,此时,当输入一个数字时,不会给出响应。我没有尝试过很多,因为我的编码知识几乎为零。该项目正在Tinkercad中运行代码知识很少,试图帮助妹妹完成Arduino项目,arduino,Arduino,这个项目涉及到用Arduino Uno板从0-500之间的数字创建一个数字猜测游戏。在猜测一个介于0和500之间的数字之前,代码似乎工作得很好,此时,当输入一个数字时,不会给出响应。我没有尝试过很多,因为我的编码知识几乎为零。该项目正在Tinkercad中运行 void setup (){ randomSeed(analogRead(A0)); Serial.begin(9600); for(int i=2 ; i<=11 ; i++) { pinMode(i,OUTPUT); } S
void setup (){
randomSeed(analogRead(A0));
Serial.begin(9600);
for(int i=2 ; i<=11 ; i++) {
pinMode(i,OUTPUT);
}
Serial.println("");
Serial.println("Hello, whats your name?");
while(Serial.available()==0){
}
Name=Serial.readString();
Serial.print("Hello,");
Serial.print(Name);
}
void loop(){
Serial.println("");
if (Playtime>=1){
Serial.println("Do you want to play again");
}
else{
Serial.println("Do you want to play a guessing game?");
}
while(Serial.available()==0);
Answer=Serial.readString();
if(Answer=="yes"){
GuessCount=0;
randNumber=random(0,500);
Serial.println("Guess a number between 0 and 500");
while(Serial.available()==0);
Guess=Serial.parseInt();
while(randNumber!=Guess){
if(Guess>randNumber){
GuessCount=GuessCount+1;
for(int i=4;i<14;i++) {
digitalWrite(i,HIGH);
delay(Delay1);
digitalWrite(i,LOW);
delay(Delay2);
void setup (){
randomSeed(analogRead(A0));
Serial.begin(9600);
for(int i=2 ; i<=11 ; i++) {
pinMode(i,OUTPUT);
}
Serial.println("");
Serial.println("Hello, whats your name?");
while(Serial.available()==0){
}
Name=Serial.readString();
Serial.print("Hello,");
Serial.print(Name);
}
void loop(){
Serial.println("");
if (Playtime>=1){
Serial.println("Do you want to play again");
}
else{
Serial.println("Do you want to play a guessing game?");
}
while(Serial.available()==0);
Answer=Serial.readString();
if(Answer=="yes"){
GuessCount=0;
randNumber=random(0,500);
Serial.println("Guess a number between 0 and 500");
while(Serial.available()==0);
Guess=Serial.parseInt();
while(randNumber!=Guess){
if(Guess>randNumber){
GuessCount=GuessCount+1;
for(int i=4;i<14;i++) {
digitalWrite(i,HIGH);
delay(Delay1);
digitalWrite(i,LOW);
delay(Delay2);
所以当串行缓冲区等于零时,它必须读取一个字符串并打印它
它应该等到Serial.available>0,因此当有输入时,它将触发whileloop
第一个for循环也没有任何匹配的初始条件i=2,但没有定义i
读完剩下的,真的没有冒犯的意思!一团糟。多个无效设置已经表明有问题
因此,作为提示,试着编写简短而简单的代码片段。例如,按如下方式启动:
了解如何在串行监视器中写入内容,然后将其显示为响应。
随机化数字并显示它们
给出一个数字答案后,它会检查它是否与随机数字匹配,并显示结果。
从以前的实验中移除未使用的东西。
在Arduino IDE中正确缩进代码CTRL-T
循环就是你的循环。这不需要任何时间。在您的情况下,在等待串行输入时无需其他操作,但很快您将需要计算响应时间,并在等待响应时显示运行时间。阻塞直到响应到达
情况相当糟糕。
编写函数以使代码更易于阅读。
你如何中止那个讨厌的游戏?还是进入欺骗模式?或
一个小小的起点:
// LED pins
const byte UPLed = 2; // indicates guess too low
const byte DNLed = 4; // indicates guess too high
const byte WINLed= 3;
unsigned int games = 0;
unsigned int guess = 0; // 0 : ask for new game
const unsigned int MAX = 500;
unsigned int solution; // 1 ... MAX
void setup () {
Serial.begin(9600);
pinMode(UPLed,OUTPUT);
pinMode(DNLed,OUTPUT);
pinMode(WINLed,OUTPUT);
greeting(); // wait for user to enter their name
randomSeed( millis() ); // time for user response is a good random seed
}
void loop() {
// loop duration is one guess
if (guess == 0) {
startDialog();
solution = random(1, MAX+1);
Serial.setTimeout(10000); // 10 sec per guess, else game lost
digitalWrite(UPLed, LOW);
digitalWrite(DNLed, LOW);
digitalWrite(WINLed, LOW);
}
guess++;
Serial.print("Guess # "); Serial.print(guess); Serial.print(": ");
long try = Serial.parseInt();
if (try == 0) { lostGame(); guess = 0;}
else if (try == solution) {wonGame(); guess = 0;}
else if (try < solution) {
digitalWrite(UPLed, HIGH);
digitalWrite(DNLed, LOW);
} else { // try > solution
digitalWrite(UPLed, LOW);
digitalWrite(DNLed, HIGH);
}
}
void greeting() {
Serial.println();
Serial.print("Hello, whats your name? ");
while(Serial.available()==0){ } // block until Serial receives something
Name=Serial.readString();
Serial.print("Hello,");
Serial.print(Name);
}
问候语只是保持循环可读性的便利功能之一。您还必须提供startDialog LostName、wonGame count games、light WINLed。您好,您发布的代码不完整,很可能是缺少的部分出错……如果第一次猜错了,那么您就有一个完整的循环来锁定代码。如果一开始猜测不正确,while循环中就没有任何东西要求或得到另一个猜测。所以它只是不断地重复while循环,但是猜测永远不会改变。它变成了一个无限循环。研究状态机。您不必在循环函数的一个循环中讲述整个故事。你不需要整个循环,你错过了{}。Jared希望setup函数永远阻塞,直到出现响应,然后对其应用readString。那很好。你的其他评论是有效的。本地函数多个设置和循环函数应引发编译问题。
// LED pins
const byte UPLed = 2; // indicates guess too low
const byte DNLed = 4; // indicates guess too high
const byte WINLed= 3;
unsigned int games = 0;
unsigned int guess = 0; // 0 : ask for new game
const unsigned int MAX = 500;
unsigned int solution; // 1 ... MAX
void setup () {
Serial.begin(9600);
pinMode(UPLed,OUTPUT);
pinMode(DNLed,OUTPUT);
pinMode(WINLed,OUTPUT);
greeting(); // wait for user to enter their name
randomSeed( millis() ); // time for user response is a good random seed
}
void loop() {
// loop duration is one guess
if (guess == 0) {
startDialog();
solution = random(1, MAX+1);
Serial.setTimeout(10000); // 10 sec per guess, else game lost
digitalWrite(UPLed, LOW);
digitalWrite(DNLed, LOW);
digitalWrite(WINLed, LOW);
}
guess++;
Serial.print("Guess # "); Serial.print(guess); Serial.print(": ");
long try = Serial.parseInt();
if (try == 0) { lostGame(); guess = 0;}
else if (try == solution) {wonGame(); guess = 0;}
else if (try < solution) {
digitalWrite(UPLed, HIGH);
digitalWrite(DNLed, LOW);
} else { // try > solution
digitalWrite(UPLed, LOW);
digitalWrite(DNLed, HIGH);
}
}
void greeting() {
Serial.println();
Serial.print("Hello, whats your name? ");
while(Serial.available()==0){ } // block until Serial receives something
Name=Serial.readString();
Serial.print("Hello,");
Serial.print(Name);
}