串口数据问题
最近小弟在用串口通信时发现个问题,当我对串口发送数据时,总是每次循环过后之前发送的数据就被删掉了,不能保持直到我下一个数据传进来,不知道怎么才能让我上次的数据可以保持到我下次对串口发送数据,请各位高手大神指点指点啊void loop(){
ch=Serial.read();
if(ch=='1') //发送1时执行下面程序
{
gradual_change();
}
else if(ch=='2')//发送2时执行下面程序
{
twinkle();
}
else//其余情况执行下面程序
{
digitalWrite(Blue,HIGH);
}
}每次发过后,只执行一次应该执行的,之后一直是在else中,请各位指导指导
感激不尽呀!!!!!!! 想了半个小时 终于想出来了 已测试 我直接上我的测试代码得了 自己看
int flag ; //标志位
char ch;
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
if (Serial.available()>0) //如果有数据传入
{flag= 0;}
ch=Serial.read();
if(ch=='1'||flag==1) //发送1时执行下面程序
{
digitalWrite(13, HIGH); // 使Led亮
delay(200); // 持续1秒钟
digitalWrite(13, LOW); // 使Led灭
delay(200); // 持续1秒钟。
flag= 1;
}
else if(ch=='2'||flag==2)//
{
digitalWrite(13, HIGH); // 使Led亮
delay(1000); // 持续1秒钟
digitalWrite(13, LOW); // 使Led灭
delay(1000); // 持续1秒钟。
flag= 2;
}
else//其余情况执行下面程序
{
digitalWrite(13,HIGH);
}
}
思路就是设立标志位 anfe09 发表于 2012-9-25 10:52 static/image/common/back.gif
想了半个小时 终于想出来了 已测试 我直接上我的测试代码得了 自己看
int flag ; //标志位
char ch;
{:2_27:}太有帮助了真的是十分感谢呀困扰了我好几天 if (Serial.available()>0) //如果有数据传入
在这一句下面加一个大括号包进前一部分程序就行了...可以不用标志位... anfe09 发表于 2012-9-25 10:52 static/image/common/back.gif
想了半个小时 终于想出来了 已测试 我直接上我的测试代码得了 自己看
int flag ; //标志位
char ch;
为什么我需要打上一串个1才能实现1是的循环呢?
2的循环也是呀!
这是怎么回事呀?
:dizzy:
int ledon = 13;
char ch;
char flag = 0;
void setup()
{
Serial.begin(9600);
pinMode(ledon,OUTPUT);
}
void loop()
{
if(Serial.available())//串口收到数据;
{
ch = Serial.read();
if(ch == '1') flag = 1;
else if(ch == '2') flag = 2;
else flag = 0;
}
if(flag == 1) //led亮1s;
{
digitalWrite(ledon,HIGH);
delay(1000);
digitalWrite(ledon,LOW);
delay(1000);
}
else if(flag == 2)//led亮2s;
{
digitalWrite(ledon,HIGH);
delay(2000);
digitalWrite(ledon,LOW);
delay(1000);
}
else
{
digitalWrite(ledon,LOW);//led灭;
}
}
都是借鉴,在楼上的基础上稍稍改了下,希望对你有所帮助:) 星_star_雲 发表于 2012-10-7 13:08 static/image/common/back.gif
为什么我需要打上一串个1才能实现1是的循环呢?
2的循环也是呀!
这是怎么回事呀?
没看懂啥意思 你看六楼的 六楼写的很好 本帖最后由 星_star_雲 于 2012-10-8 15:18 编辑
为什么还是只执行一次呀,就是当我输入1时led亮1秒,灭1秒,之后就执行的是else里的语句呀????????:dizzy::dizzy::dizzy::dizzy:
我用Serial.println(flag)测试了一下,发现输出的全部是0,当我输入1之后,只有一个1秒的间隔,接着输出的仍然是0,无法让flag保持在1上....这是怎么回事呢??????{:soso_e134:} Tim 发表于 2012-10-7 14:45 static/image/common/back.gif
int ledon = 13;
char ch;
char flag = 0;
但是如果想要3位数字控制呢?我试验了好久,就是没成功! highplay86 发表于 2012-10-7 11:56 static/image/common/back.gif
if (Serial.available()>0) //如果有数据传入
在这一句下面加一个大括号包进前一部分程序就行了...可以不 ...
严重同意,不过俺没验证。
页:
[1]