查看: 2215|回复: 0

Arduino的SoftwareSerial程序用Eclipse的AVR环境,有错误

[复制链接]

该用户从未签到

发表于 2015-11-22 17:19:22 | 显示全部楼层 |阅读模式
分享到:
同样的Arduino的SoftwareSerial程序,如果用Arduino编译安装,能正常运行;如果用Eclipse.AVR环境编译安装,则输出的数据与发送的不相符。群里有人遇上过吗?已经查找两天了,都未能发现问题所在,有知道的兄弟可以直接Q我,多谢!

程序如下:
#include <arduino.h>
#include <SoftwareSerial/SoftwareSerial.h>

SoftwareSerial mySerial(12, 13); // RX, TX

String comdata = "";

void setup() {
        // Open serial communications and wait for port to open:
        Serial.begin(9600);
        while (!Serial) {
                ; // wait for serial port to connect. Needed for native USB port only
        }

        Serial.println("Goodnight moon im com18!");

        // set the data rate for the SoftwareSerial port
        mySerial.begin(4800);
        mySerial.println("Hello, world?");
}

void loop() { // run over and over
//        char data;
//        if (mySerial.available()) {
//                data = (char) mySerial.read();
//                Serial.write(data);
//        }
//        if (Serial.available()) {
//                data = (char) Serial.read();
//                mySerial.write(data);
//        }

        int mark = 0;
        //j是分拆之后数字数组的位置记数
        int j = 0;
        //不断循环检测串口缓存,一个个读入字符串,
        while (mySerial.available() > 0) {
                //读入之后将字符串,串接到comdata上面。
                comdata += char(mySerial.read());
                //延时一会,让串口缓存准备好下一个数字,不延时会导致数据丢失,
                delay(2);
                //标记串口读过数据,如果没有数据的话,直接不执行这个while了。
                mark = 1;
        }
        if (mark == 1) //如果接收到数据则执行comdata分析操作,否则什么都不做。
                        {
                //显示刚才输入的字符串(可选语句)
                Serial.println(comdata);

                comdata = "";
                mark = 0;
        }

        //不断循环检测串口缓存,一个个读入字符串,
                while (Serial.available() > 0) {
                        //读入之后将字符串,串接到comdata上面。
                        comdata += char(Serial.read());
                        //延时一会,让串口缓存准备好下一个数字,不延时会导致数据丢失,
                        delay(2);
                        //标记串口读过数据,如果没有数据的话,直接不执行这个while了。
                        mark = 1;
                }
                if (mark == 1) //如果接收到数据则执行comdata分析操作,否则什么都不做。
                                {
                        //显示刚才输入的字符串(可选语句)
                        mySerial.println(comdata);
                        Serial.println(comdata);
                        comdata = "";
                        mark = 0;
                }
}


回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条



手机版|小黑屋|与非网

GMT+8, 2024-5-19 15:07 , Processed in 0.116826 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.