/** 名称:2019年全国电赛F题* 功能:极板电容测量A4纸张数量*/
#include <LiquidCrystal.h>
const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);#include <Wire.h>
#include "FDC2214.h"
FDC2214 capsense(FDC2214_I2C_ADDR_0);                             // Use FDC2214_I2C_ADDR_1
#define CHAN_COUNT 4                                              // 四路电容测量
#define Beep 13long CapAvg;
long CapSum;
int PaperNum;
int AVal;
int Err;void setup() {LCDInit();pinMode(Beep, OUTPUT);pinMode(A0, INPUT);Wire.begin();Serial.begin(115200);//Serial.println("\nFDC2x1x test");//bool capOk = capsense.begin(0xF, 0x6, 0x5, true); //setup all four channels, autoscan with 4 channels, deglitch at 10MHz, internal oscillator bool capOk = capsense.begin(0xF, 0x6, 0x5, false);  //setup all four channels, autoscan with 4 channels, deglitch at 10MHz, external oscillator if(capOk){Serial.println("Sensor OK");lcd.setCursor(0,0);lcd.print("Sensor OK");delay(1000);}else{Serial.println("Sensor Fail");lcd.setCursor(0,1);lcd.print("Sensor Fail");delay(1000);}
}void loop() {unsigned long capa[4];                                        // 总共有4路测量接口,对应传感器的IN0、IN1、IN2、IN3for(int i=0; i<11; i++)                                       // 间隔200ms,读取10个数据,并进行累加{ CapSum = (capsense.getReading28(0)/10) + CapSum;            // 读取IN0引脚测试电容数据delay(200);}CapAvg = CapSum / 10;                                         // 平均值显示,计算平均值AVal = analogRead(A0) - 512;                                  // 读取旋钮输入的误差值,范围-512~512CapAvg = CapAvg + AVal*10;                                    // 将误差值扩大10倍,加入到平均值中Calculate();ShowResult();Buzzer();while(1);}/** 函数名称:Beep* 功能:蜂鸣器发出测量成功提示音“嘀---嘀---嘀---”* 参数:Null* 返回值:Null*/
void Buzzer()
{digitalWrite(13, HIGH);delay(1000);digitalWrite(13, LOW);//delay(300);//digitalWrite(13, HIGH);delay(300);digitalWrite(13, LOW);delay(300);//digitalWrite(13, HIGH);delay(300);digitalWrite(13, LOW);delay(300);
}/** 函数名称:LCDInit* 功能:LCD1602液晶屏初始化* 参数:Null* 功能:Null*/
void LCDInit()
{lcd.begin(16, 2);                                   //设置LCD要显示的列数、行数,即2行16列lcd.clear();lcd.setCursor(0,1);                                 //设置光标位置为15行,0列lcd.print("testing......");
}/** 函数名称:Calculate* 功能:计算纸张数量* 参数:Null* 返回值:Null*/
void Calculate()
{if (CapAvg>=20000000){PaperNum = 0;}else if (CapAvg>910000 && CapAvg<=950000){PaperNum = 1;}else if (CapAvg>950000 && CapAvg<=960000){PaperNum = 2;}else if (CapAvg>960000 && CapAvg<=968000){PaperNum = 3;}else if (CapAvg>968000 && CapAvg<=973000){PaperNum = 4;}else if (CapAvg>973000 && CapAvg<=980000){PaperNum = 5;}else if (CapAvg>980000 && CapAvg<=988000){PaperNum = 6;}else if (CapAvg>988000 && CapAvg<=990000){PaperNum = 7;}else if (CapAvg>990000 && CapAvg<=997000){PaperNum = 8;}else if (CapAvg>997000 && CapAvg<=1000000){PaperNum = 9;}else if (CapAvg>1000000 && CapAvg<=1005000){PaperNum = 10;}else if (CapAvg>1005000 && CapAvg<=1007000){PaperNum = 11;}else if (CapAvg>1007000 && CapAvg<=1014000){PaperNum = 12;}else if (CapAvg>1014000 && CapAvg<=1020000){PaperNum = 13;}else if (CapAvg>1020000 && CapAvg<=1026000){PaperNum = 14;}else if (CapAvg>1026000 && CapAvg<=1032000){PaperNum = 15;}else if (CapAvg>1032000 && CapAvg<=1038000){PaperNum = 16;}else if (CapAvg>1038000 && CapAvg<=1044000){PaperNum = 17;}else if (CapAvg>1044000 && CapAvg<=1050000){PaperNum = 18;}else if (CapAvg>1050000 && CapAvg<=105600){PaperNum = 19;}else if (CapAvg>1056000 && CapAvg<=1062000){PaperNum = 20;}else if (CapAvg>1062000 && CapAvg<=1068000){PaperNum = 21;}else if (CapAvg>1068000 && CapAvg<=1074000){PaperNum = 22;}else if (CapAvg>1074000 && CapAvg<=1080000){PaperNum = 23;}else if (CapAvg>1080000 && CapAvg<=1086000){PaperNum = 24;}else if (CapAvg>1086000 && CapAvg<=1092000){PaperNum = 25;}else if (CapAvg>1092000 && CapAvg<=1098000){PaperNum = 26;}else if (CapAvg>1098000 && CapAvg<=1104000){PaperNum = 27;}else if (CapAvg>1104000 && CapAvg<=1100000){PaperNum = 28;}else if (CapAvg>1110000 && CapAvg<=1116000){PaperNum = 29;}else if (CapAvg>1116000 && CapAvg<=1122000){PaperNum = 30;}else if (CapAvg>1122000 && CapAvg<=1128000){PaperNum = 31;}else if (CapAvg>1128000 && CapAvg<=1134000){PaperNum = 32;}else if (CapAvg>1134000 && CapAvg<=1140000){PaperNum = 33;}else if (CapAvg>1140000 && CapAvg<=1146000){PaperNum = 34;}else if (CapAvg>1146000 && CapAvg<=1152000){PaperNum = 35;}else if (CapAvg>1152000 && CapAvg<=1158000){PaperNum = 36;}else if (CapAvg>1158000 && CapAvg<=1164000){PaperNum = 37;}else if (CapAvg>1164000 && CapAvg<=1170000){PaperNum = 38;}else if (CapAvg>1170000 && CapAvg<=1176000){PaperNum = 39;}else if (CapAvg>1176000 && CapAvg<=1182000){PaperNum = 40;}else if (CapAvg>1182000 && CapAvg<=1188000){PaperNum = 41;}else if (CapAvg>1188000 && CapAvg<=1194000){PaperNum = 42;}else if (CapAvg>1194000 && CapAvg<=1200000){PaperNum = 43;}else if (CapAvg>1200000 && CapAvg<=1206000){PaperNum = 44;}else if (CapAvg>1206000 && CapAvg<=1212000){PaperNum = 45;}else if (CapAvg>1212000 && CapAvg<=1218000){PaperNum = 46;}else if (CapAvg>1218000 && CapAvg<=1224000){PaperNum = 47;}else if (CapAvg>1224000 && CapAvg<=1230000){PaperNum = 48;}else if (CapAvg>1230000 && CapAvg<=1236000){PaperNum = 49;}else if (CapAvg>1236000 && CapAvg<=1242000){PaperNum = 50;}
}/** 函数名称:ShowResult* 功能:显示测量结果* 参数:Null* 返回值:Null*/
void ShowResult()
{lcd.clear();lcd.setCursor(0,0);lcd.print("CapAvg: ");  lcd.setCursor(7,0);lcd.print(CapAvg);if (PaperNum == 0){lcd.setCursor(0,1);lcd.print("Shorting Circuit");}else{lcd.setCursor(0,1);lcd.print("Number: ");lcd.setCursor(7,1);lcd.print(PaperNum);}
}

【Arduino】利用FDC2214加LCD1602电容计测量A4纸张数量相关推荐

  1. Arduino和C51开发LCD1602显示屏

    技术:51单片机.Arduino.LCD1602 概述 本文介绍了LCD1602显示屏,并在LCD1602上显示字符串,对LCD1602常见的问题的解决和开发方法也做了简单介绍. 详细 代码下载:ht ...

  2. MAP 最大后验——利用经验数据获得对未观测量的点态估计

    Map (最大后验) 在贝叶斯统计学中,最大后验(Maximum A Posteriori,MAP)估计可以利用经验数据获得对未观测量的点态估计.它与Fisher的最大似然估计(Maximum Lik ...

  3. C语言——二分法得出测量电容值对应的纸张数(电赛19年纸张计数装置)

    本人在备战2021年全国大学生电子设计竞赛的训练中,练习了19年的纸张计数装置的题目.在最终由单片机MCU学习计算拟合出的电容曲线,以及对应纸张数相应的电容值利用二分法得到最终测量的纸张数.以下介绍我 ...

  4. 51单片机简易电阻电感电容RLC测量仪仿真设计

    51单片机简易电阻电感电容RLC测量仪仿真( proteus仿真+程序+讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0040 5 ...

  5. python训练好的图片验证_利用keras加载训练好的.H5文件,并实现预测图片

    我就废话不多说了,直接上代码吧! import matplotlib matplotlib.use('Agg') import os from keras.models import load_mod ...

  6. ​​​​​​​CV:利用cv2(加载人脸识别xml文件及detectMultiScale函数得到人脸列表)+keras的load_model(加载表情hdf5、性别hdf5)并标注

    CV:利用cv2+自定义load_detection_model(加载人脸识别xml文件及detectMultiScale函数得到人脸列表)+keras的load_model(加载表情hdf5.性别h ...

  7. Android测量图像中物体大小,android – 加载图像后测量ImageView

    我试图找到一种方法来测量ImageView后使用Glide或Picasso(或其他任何东西)加载图像.基本上,我试图在某些位置在图像顶部布局其他视图,但需要最终的ImageViews尺寸才能准确地完成 ...

  8. 利用Office加载项进行持久化控制的6种姿势

    本文讲的是利用Office加载项进行持久化控制的6种姿势,现在,几乎所有用户都会使用Microsoft Office,它的普及率这么高,以至于攻击者经常会用它来实施大规模攻击. 本文就将为大家介绍通过 ...

  9. Arduino 利用串口缓冲区监听的方式读取数据

    Arduino 利用串口缓冲区监听的方式读取数据 相关篇<Arduino读取串口接收到的数据并发送数据> 利用串口缓冲区监听的方式读取数据,实现该功能依赖:serialEvent()此函数 ...

最新文章

  1. (伪)datagridview里面id的自增长
  2. Q+ Web 改版设计小结
  3. matlab获取目录中图像名称及路径的递归实现
  4. ACE之Reactor模式使用实例
  5. 【BZOJ-1127】KUP 悬线法 + 贪心
  6. python人脸识别框很小_人脸识别:从传统方法到深度学习
  7. 设计模式 | 适配器模式及典型应用
  8. 前端基础之操作标签—文档处理
  9. 边缘计算k8s集群之SuperEdge
  10. mybatis学习(27):获取自增id方式一(在mapper中insert配置节点的属性)
  11. 使用“即时消息服务框架”(iMSF)实现分布式事务的三阶段提交协议(电商创建订单的示例)...
  12. 徐直军 华为没有鸿蒙,3亿只剩1亿?华为高管改口,推出鸿蒙到底有啥苦衷?
  13. 自己整理的一套Java题库
  14. Android免root流量防火墙,简单小程序
  15. oracle for扫描行,请教索引范围扫描具体IO行为?
  16. ZigBee 快速入门(协议栈,协调器,路由器,终端设备,加入网络,安全,路由功能,频段)
  17. lanyu 激活idea2018.3.5
  18. 图片如何抠图换背景?怎样将图片抠成透明底图片?
  19. 企业云资源管理系统需求分析
  20. Spring(8):构造方法注入与示例

热门文章

  1. 设计模式 - 适配器模式
  2. 多线程并发快速处理数据
  3. react.js 引用 NavBar 报错svg-spite-loader
  4. 【概率论系列学习】泊松分布和指数分布的关系
  5. 汇编语言-求毕达哥拉斯三角形的边
  6. indent 的格式
  7. 批量关闭电脑有害端口方法
  8. 物理光学10 相干光与相干性
  9. UA MATH563 概率论的数学基础 中心极限定理8 弱大数定律 Bernstein多项式逼近
  10. VC++ 使用BitBlt函数显示位图