html tool

2015年2月5日星期四

arduino 的赋值语句和串口监视器问题

 问题:arduino的赋值语句不支持两个*连用
原始code如下:
unsigned long oldtime=8*3600*1000;
unsigned long testtime=3*60*1000;
...
void loop(){
...
   if (time> testtime){
    Serial.println("3 min");
  }
...

结果测试时可远远到不了3分钟就输出了,加调试后发现testtime为4294950688,好吧太郁闷了。
按说unsigned long的溢出范围还大的很呢?why?
后来修改为如下就好了:
unsigned long oldtime=8*3600000;
unsigned long testtime=3*60000;
...
void loop(){
...
   if (time> testtime){
    Serial.println("3 min");
  }
...
看来只是类c语言吧,是不支持多个运算符号啊!好吧:)[go]了一下也没发现官方帮助说不可以,算bug吗?嘻嘻,不理它了知道就这么用吧!
2.arduino编译环境中的串口监视器每次打开都对串口断电的问题
loop代码如下:
void loop(){
  time = millis();
  //prints time since program started
  Serial.println(time);
  x=x+1;
  Serial.print("X: ");
  Serial.print(x);
  // wait a second so as not to send massive amounts of data
  delay(1000);
   if (time> testtime){
    Serial.println("3 min");
    //_Closepower();
    //delay(3000);
  }
  if (time> oldtime){
    Serial.println("8 hours is start");
    _Openpower();
    delay(3000);
  }
}

本 来是个很简单的dome,想测试一下mil有lis()的50天才复位的可靠性,但发现3分钟测试都问题,每次使用Arduino的工具中的串口调试工 具,发现都是从2开始记X,明明没有开关过,理论上应该是开机运行time,不是每个串口打开开始算啊?!why?加了pin=18的一个led测试,调 试代码如下:
void setup(){
  x=1;
  Serial.begin(9600);
    //initialise the power pin as an output
   pinMode(_powerPin,OUTPUT); 
   digitalWrite(_powerPin,LOW);
   _Closepower();
}
发现每次关闭串口调试器后led还是正常开的,但每次重新打开串口调试器后,led就灭了再开。好吧!开始怀疑电源了,为什么串口输出是相同逻辑,而我只相信led呢?:) 开始转usb电源测试,不再看串口了,只看led。好吧 换了电源后就再也没有那个问题了。
看来就是arduino编译环境中的串口监视每次打开时都重新对串口断电加点了,我的板子串口测试时,直接用串口供电的,当然就有这个了。

后记:
好久,没有软硬联调了,吞说的有道理就是我只做数电,逻辑和物理还是有不少区分的,多动手才是正理。:)

没有评论:

发表评论