Loops 使循环继续,直到目标完成
我需要能够找到EEPROM内存的5个连续位,理想情况下最接近2(因为我有位#1和2与其他数据关联,并且希望事情保持有序)。我开发了这段代码,它可以工作,但是for循环在找到一组好的数字后继续Loops 使循环继续,直到目标完成,loops,for-loop,while-loop,arduino,Loops,For Loop,While Loop,Arduino,我需要能够找到EEPROM内存的5个连续位,理想情况下最接近2(因为我有位#1和2与其他数据关联,并且希望事情保持有序)。我开发了这段代码,它可以工作,但是for循环在找到一组好的数字后继续 Serial.println(“转到分配号查找器”); 对于(int-AssignCheck=2;AssignCheck
Serial.println(“转到分配号查找器”);
对于(int-AssignCheck=2;AssignCheck<250;AssignCheck++){
Serial.println(“找到一个好的分配号”+字符串(AssignCheck));
如果(EEPROM.read(AssignCheck)=255){//查找可用于存储新卡的空白
如果(EEPROM.read(赋值检查+1)==255){
如果(EEPROM读取(赋值检查+2)==255){
如果(EEPROM读取(赋值检查+3)==255){
如果(EEPROM读取(赋值检查+4)==255){
Serial.println(“找到的分配号”+字符串(AssignCheck)+”到“+字符串(int(AssignCheck)+4)+”。Scanner value=“+字符串(Scanner));
int StoreValue=AssignCheck;
}
}
}
}
}
}
然后我想我可以在它周围放置一个while循环,当变量设置为0而不是1时,while循环停止,所以我写了以下内容:(注意中间引入了while循环、变量和Scanner=0
行)
Serial.println(“转到分配号查找器”);
int扫描器=1;
while(扫描器==1){
对于(int-AssignCheck=2;AssignCheck<250;AssignCheck++){
Serial.println(“找到一个好的分配号”+String(AssignCheck)+“。Scanner value=“+String(Scanner));
如果(EEPROM.read(AssignCheck)=255){//查找可用于存储新卡的空白
如果(EEPROM.read(赋值检查+1)==255){
如果(EEPROM读取(赋值检查+2)==255){
如果(EEPROM读取(赋值检查+3)==255){
如果(EEPROM读取(赋值检查+4)==255){
扫描仪=0;
Serial.println(“找到的分配号”+字符串(AssignCheck)+”到“+字符串(int(AssignCheck)+4)+”。Scanner value=“+字符串(Scanner));
int StoreValue=AssignCheck;
}
}
}
}
}
}
}
当我需要时,它会正确地识别变量并将其设置为0,但是while循环似乎没有影响,并且循环继续生成可以工作的数字集
作为一个程序员新手,我不确定下一步可以尝试什么
任何建议都将不胜感激。在这种情况下,您可以使用说明
break
:
Serial.println(“转到分配号查找器”);
对于(int-AssignCheck=2;AssignCheck<250;AssignCheck++){
Serial.println(“找到一个好的分配号”+字符串(AssignCheck));
如果(EEPROM.read(AssignCheck)=255){//查找可用于存储新卡的空白
如果(EEPROM.read(赋值检查+1)==255){
如果(EEPROM读取(赋值检查+2)==255){
如果(EEPROM读取(赋值检查+3)==255){
如果(EEPROM读取(赋值检查+4)==255){
Serial.println(“找到的分配号”+字符串(AssignCheck)+”到“+字符串(int(AssignCheck)+4)+”。Scanner value=“+字符串(Scanner));
int StoreValue=AssignCheck;
打破
}
}
}
}
}
}
正如你所看到的,它正是你想要的
请注意,您的第二次尝试不起作用,因为for循环
在while内:它在整个for循环
之前完成,之后比较while循环的“scanner”变量
您可以通过以下方式进行更正:
Serial.println(“转到分配号查找器”);
int扫描器=1;
对于(int AssignCheck=2;(AssignCheck<250)和(Scanner==1);AssignCheck++){
Serial.println(“找到一个好的分配号”+String(AssignCheck)+“。Scanner value=“+String(Scanner));
如果(EEPROM.read(AssignCheck)=255){//查找可用于存储新卡的空白
如果(EEPROM.read(赋值检查+1)==255){
如果(EEPROM读取(赋值检查+2)==255){
如果(EEPROM读取(赋值检查+3)==255){
如果(EEPROM读取(赋值检查+4)==255){
扫描仪=0;
Serial.println(“找到的分配号”+字符串(AssignCheck)+”到“+字符串(int(AssignCheck)+4)+”。Scanner value=“+字符串(Scanner));
int StoreValue=AssignCheck;
}
}
}
}
}
}
阅读EEPROM是昂贵的,请考虑如下:
Serial.println(“转到分配号查找器”);
int扫描器=1;
字符滚动缓冲区[5];
rollingBuffer[0]=EEPROM.read(2+0);
rollingBuffer[1]=EEPROM.read(2+1);
滚动缓冲区[2]=EEPROM.read(2+2);
rollingBuffer[3]=EEPROM.read(2+3);
rollingBuffer[4]=EEPROM.read(2+4);
点滚动=0;
对于(int AssignCheck=7;(AssignCheck<255);AssignCheck++)
{
如果((rollingBuffer[0]==255)&&&(rollingBuffer[1]==255)&&(rollingBuffer[2]==255)&&(rollingBuffer[3]==255)&(rollingBuffer[4]==255))
{
Serial.println(“找到的分配号”+字符串(AssignCheck-5)+”到“+字符串(int(AssignCheck-1))+”。Scanner value=“+字符串(Scanner));
int StoreValue=AssignCheck;
打破
}
rollingBuffer[pointRoll]=EEPROM.read(赋值检查);
pointRoll++;
如果(pointRoll>4)pointRoll=0;
}
只需添加一个中断在最后一个if
?中的code>,或者在for
循环中的条件中添加第二个中断条件的检查,如果您需要while for something其他内容如何不编写正确的C代码:使用5个嵌套的if语句而不是循环。另外,为什么5个未编程的eeprom单元是理想的结果?这没有任何意义。XY问题。“读取EEPROM很昂贵”那么为什么要读取i