极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: Ansifa

Arduino学习笔记A6 - Arduino串口接收字符串

  [复制链接]
发表于 2013-5-7 11:01:25 | 显示全部楼层
LCD1602能显示汉字吗
回复 支持 反对

使用道具 举报

发表于 2013-5-10 20:46:05 | 显示全部楼层
piaozhiling 发表于 2011-11-24 23:58
用我的小车的上位机控制程序吧!不过的事先装上个vb6才能用的

好的。但是我下不了
回复 支持 反对

使用道具 举报

发表于 2013-5-30 11:43:09 | 显示全部楼层
程序很简洁哦
回复 支持 反对

使用道具 举报

发表于 2013-6-22 16:55:12 | 显示全部楼层
没有usb转串口板,直接用arduino。。。。
回复 支持 反对

使用道具 举报

发表于 2013-6-28 19:14:26 | 显示全部楼层
很好的帖子,学习了
回复 支持 反对

使用道具 举报

发表于 2013-7-16 16:36:21 | 显示全部楼层
不错  很好的方法,比用数组方便多了。
回复 支持 反对

使用道具 举报

发表于 2013-7-26 11:23:44 | 显示全部楼层
我要用上位机给arduino板子传四个字节的数据 也就是一个数组 有四个元素 怎么办?
回复 支持 反对

使用道具 举报

发表于 2013-7-27 21:23:00 | 显示全部楼层
这个很好玩,虽说构件最简单
谢谢楼主的详细教程和代码
回复 支持 反对

使用道具 举报

发表于 2013-8-4 11:34:07 | 显示全部楼层
万马奔腾 发表于 2013-3-30 12:47
//逐个显示不正确啊 ,每次显示的是第一个字符,求高手解决
String comdata = "";//comdata是一个字符串类 ...

Serial.println(comdata[0]);
这句错了,所以每次都是传第一个字符.应该是:
Serial.println(comdata);

回复 支持 反对

使用道具 举报

发表于 2013-8-20 14:27:45 | 显示全部楼层
本帖最后由 s1213 于 2013-8-20 14:37 编辑

如果要是采用arduino自带的SoftSerial 软件模拟的串口,输入多个字符出现乱码,或者每次显示的是第一个字符,求高手解决
经试验加入 mySerial.println(comdata.length());后  输出为1 ,也就是说comdata只读到了一个字符。求解???

// send 0x01 , 0x02 ,0x03 then see the LED on P1

#include <TinyPinChange.h>
#include <SoftSerial.h>

#define RxD 2
#define TxD 3
#define cardread 4
#define led 13

SoftSerial mySerial(RxD, TxD);
uint8_t VirtualPortNb;
volatile byte swith = 0;
String comdata = "";

void setup()
{
  TinyPinChange_Init();
  mySerial.begin(9600);

  VirtualPortNb=TinyPinChange_RegisterIsr(RxD, softSerialEvent);
  TinyPinChange_EnablePin(RxD);

  pinMode(1, OUTPUT); //LED on Model A for debugging
}

/* Function called in interruption in case of change on pins */
void softSerialEvent(void)
{
  int inByte;
  uint8_t PortChange;   
  PortChange = TinyPinChange_GetPinEvent(VirtualPortNb);
  if(PortChange & TinyPinChange_PinToMsk(RxD)) /* Check if we have received something */
  {
    while (mySerial.available() > 0)  
    {
        comdata += char(mySerial.read());
        delay(1000);
    }
    if (comdata.length() > 0)
    {
        mySerial.println(comdata.length());
        mySerial.print(comdata);
        if(comdata=="3C00B60D0A8D"||comdata=="560003A727D5")
        {swith=1;}
        comdata = "";
    }
   
  }
}

void loop()
{
  program(swith);
}

void program(byte seq)
{
  switch(seq)
  {

  case 1:
    digitalWrite(led, HIGH);
    delay(100);              
    digitalWrite(led, LOW);
    delay(100);               
    break;

  case 2:
    digitalWrite(led, HIGH);
    delay(500);               
    digitalWrite(led, LOW);
    delay(100);
    digitalWrite(led, HIGH);
    delay(100);
    digitalWrite(led, LOW);
    delay(100);   
    break;

  case 3:
    digitalWrite(led, HIGH);
    delay(500);               
    digitalWrite(led, LOW);
    delay(100);
    digitalWrite(led, HIGH);
    delay(100);
    digitalWrite(led, LOW);
    delay(100);
    digitalWrite(led, HIGH);
    delay(100);
    digitalWrite(led, LOW);
    delay(100);
    break;
  
  default:
    digitalWrite(led, HIGH);
    delay(2000);           
    digitalWrite(led, LOW);
    delay(2000);      
    break;
  }
}
回复 支持 反对

使用道具 举报

发表于 2013-8-20 14:57:14 | 显示全部楼层
学习了,谢谢
回复 支持 反对

使用道具 举报

发表于 2013-10-22 13:01:17 | 显示全部楼层
有没有人知道String最大定义的长度是多少呢
这个方法如果一次接收太多会不会溢出呀
回复 支持 反对

使用道具 举报

发表于 2013-10-22 13:03:29 | 显示全部楼层
还有就是打印字符时无法接收吧
回复 支持 反对

使用道具 举报

发表于 2013-10-23 17:38:59 | 显示全部楼层
Mark一下 Arduino串口接收字符串
回复 支持 反对

使用道具 举报

发表于 2013-11-26 23:14:34 | 显示全部楼层
万马奔腾 发表于 2013-3-30 12:47
//逐个显示不正确啊 ,每次显示的是第一个字符,求高手解决
String comdata = "";//comdata是一个字符串类 ...

for (int i=0; i <L; i++)//逐个显示comdata[0],comdata[1]。。。comdata[n]
         {
          Serial.println(comdata[0]);
          }

把Serial.println(comdata[0]);改为Serial.println(comdata[i]);
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-28 22:16 , Processed in 0.059758 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表