极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 弘毅

Arduino入门教程--第二十五课--EEPROM的读写与获取串口数据流

[复制链接]
发表于 2014-8-13 15:56:25 | 显示全部楼层
看来学到这的人很少了,学过51的,学这个 很容易上手,就很多库和函数 包装后直接用这就是用 arduino的优点,不过没有玩过单片机的同学应该会不明所以那些 函数怎么来,串口 EEPROM等,不说了 继续学习。
回复 支持 反对

使用道具 举报

发表于 2014-8-13 16:50:09 | 显示全部楼层
慢、节奏 发表于 2014-8-13 15:56
看来学到这的人很少了,学过51的,学这个 很容易上手,就很多库和函数 包装后直接用这就是用 arduino的优点 ...

很多ARDUINO的玩家并科班出生,EPROM,EEPROM(或者叫EEPROM),紫外线可擦rom这些都不会知道的
更不会知道“取模”其实就是“取余”的意思
比如 24取3的模 就是 0
他们也不会知道溢出是啥概念。
毕竟高级语言基本上不用太多的考虑这些问题
(比如TC 只要考虑溢出就好 EPROM根本在X86机器上默认是不能用的)
话说当年学mcs51单片机 真辛苦 。各种跳转(JZ JNZ JMP...........)就转的晕头转向了.
回复 支持 反对

使用道具 举报

发表于 2014-8-13 16:54:31 | 显示全部楼层
b9ss 发表于 2014-6-30 11:22
现学现用 想着这个不智能的IDE应该无法判断溢出,就试了试,结果发现EEPROM的实际寻址方式是用最大有效值取 ...

其实EEPROM楼主的描述有点像U盘 。是的 本质是差不多的
但是实际使用是不一样的
EEPROM不是用来存放代码的 常见的都是用来存放各种设置
按照比特存放 比如第一字节的数字代表什么 第二字节代表什么
其实1K存放参数设置是完全够了的。 需要更多设置位的情况很少 毕竟AVR单片机性能孱弱 程序用到的参数有限
还有就是 可以扩展片外的EEPROM. 容量更大 丰俭由人。
回复 支持 反对

使用道具 举报

发表于 2014-11-5 10:13:28 | 显示全部楼层
弘毅 发表于 2013-9-8 21:52
换用1.0.4或者1.0.1的IDE试试。。。1.0.5的IDE出现好多代码编译后运行异常问题。。。估计官方在里面改了很 ...

请问lz,除了更换IDE版本外还有其他的办法解决吗。我也用的1.0.5。也是只能读取1次。之后就全是0.
回复 支持 反对

使用道具 举报

发表于 2014-11-5 10:14:32 | 显示全部楼层
fairsky 发表于 2013-9-6 17:57
请我的板子怎么写入值后怎么只能读取一次呢??后面就变成了0.怎么回事?

你的问题解决了吗?怎么解决的?是换了一下IDE的版本吗?我出现的问题跟你的问题一样。而且我用的也是1.0.5版本。
回复 支持 反对

使用道具 举报

发表于 2014-11-5 10:19:42 | 显示全部楼层
蓝色斗鱼 发表于 2013-10-17 19:55
感觉是Serial.parseInt()留有未读完的数据(可能是串口工具的问题),下次串口有效,又读了一次,读出是零 ...

“请问我的板子怎么写入值后怎么只能读取一次呢??后面就变成了0.怎么回事?”
这个问题,怎么解决?能说的洗一点吗?我还不理解你所说的。
回复 支持 反对

使用道具 举报

发表于 2014-11-7 22:11:23 | 显示全部楼层
小小东熙 发表于 2014-11-5 10:19
“请问我的板子怎么写入值后怎么只能读取一次呢??后面就变成了0.怎么回事?”
这个问题,怎么解决?能 ...

发一下代码看看
回复 支持 反对

使用道具 举报

发表于 2014-11-12 17:06:53 | 显示全部楼层
大神  如何写一个存一个,而且把前面的那个数毁掉比如第一次输出1  第二次输出12  第三次是123
回复 支持 反对

使用道具 举报

发表于 2014-11-15 13:39:34 | 显示全部楼层
大神,我是新手,我想实现串口发一个数据保存一个  发第二个数据  读出来的是第一个和 第二个  发第三个数据  读出来 第一 第二 第三个数据....怎么弄啊?
回复 支持 反对

使用道具 举报

发表于 2014-11-17 17:22:03 | 显示全部楼层
蓝色斗鱼 发表于 2014-11-7 22:11
发一下代码看看

代码跟楼主的代码一致,我的串口监视器里只能读出一次我输入的值我输入的值。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-11-17 21:35:33 | 显示全部楼层
loop函数改成这样试试:

void loop() {
   if (Serial.available() > 0) {
    incomingByte = Serial.parseInt();  //读取串口传入的下一个有效整数,把该整数赋值给incomingByte变量
    EEPROM_write(0,incomingByte)   //把incomingByte变量从0地址位开始写入EEPROM
    if (Serial.available() > 0) Serial.parseInt();
   }
   EEPROM_read(0,incomingByte) //从0地址位开始读取EEPROM,把值写入变量incomingByte
   Serial.println(incomingByte); //通过串口输出
   delay(1000);
}
回复 支持 反对

使用道具 举报

发表于 2014-11-20 17:17:56 | 显示全部楼层
蓝色斗鱼 发表于 2014-11-17 21:35
loop函数改成这样试试:

void loop() {

嗯,可以了,输入数字读取是正确的。
但是,当输入的是纯数字的时候,读取是正确的。如果输入的是字母的话,读出的全是0.
回复 支持 反对

使用道具 举报

发表于 2014-11-27 12:04:22 | 显示全部楼层
纳尼?EEPROM不是I2C总线型的?
回复 支持 反对

使用道具 举报

发表于 2016-9-20 09:02:19 | 显示全部楼层
这个很好,认真学习下。
回复 支持 反对

使用道具 举报

发表于 2016-10-14 10:10:20 | 显示全部楼层
大侠,我拷贝代码后,编译出现强制转换错误??!
invalid conversion from 'byte* {aka unsigned char*}' to 'uint8_t {aka unsigned char}' [-fpermissive]
请问有人遇到这个问题吗
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 07:04 , Processed in 0.052024 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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