Arduino 项目笔记 |可计数变色杯子

本文介绍了一个使用Arduino制作的智能酒杯项目,酒杯由可变色材料制成,内置微型重力传感器检测液体质量变化,用于计数饮酒量。当饮酒量达到一定值时,酒杯颜色会变红以警示过量。酒杯设计包括计数和变色两大功能,旨在提升饮酒体验并关注健康饮酒。
摘要由CSDN通过智能技术生成

功能描述: 包含有杯体部分以及数据处理系统两部分。杯体部分由可变色材料制成,数据处理系统由隐藏于杯底的微型重力传感器,以及与酒杯正上方的数据显示面板部分构成。该酒杯的设计核心在其计数变色两部分。计数部分完成原理:通过微型质量传感器感应酒杯内液体的质量,每当酒杯内的液体质量减少,当少量达到设定值12mL-8mL则数据显示面板计“1”,以此类推。变色系统原理:按照白酒的度数进行计算,2两白酒约110mL,也就是大约9杯,当本方案的酒杯数据面板显示10时,酒杯变为红色,提示喝酒过量。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

第一版:

/**********************
 * 项目名称:计数酒杯
 * 作者:Naiva
 * 时间:2020/09/03
 **********************/
//#define LED_G  6
int i = 0;
int n = 0;
int m = 20;

int LED_G = 3;
int LED_Y = 5;
int LED_R = 6;
int Status = 9;

boolean  flag = true;

void Count_(int a);
void Spark_LED_R();
void setup() 
{
   
  pinMode(Status,INPUT);
  pinMode(LED_G,OUTPUT);
  pinMode(LED_Y,OUTPUT);
  pinMode(LED_R,OUTPUT);
  
  digitalWrite(LED_G,LOW);
  digitalWrite(LED_Y,LOW);
  digitalWrite(LED_R,LOW);

  Serial.begin(9600);
}

void loop() {
   
//    digitalWrite(LED_G,LOW);
//    digitalWrite(LED_Y,LOW);
//    digitalWrite(LED_R,LOW);
  Serial.print("酒杯状态(1/0):");
  Serial.println(digitalRead(Status));

if((i < m)  && (digitalRead(Status) == LOW))
{
   
  while(1){
   
    Serial.print("酒杯状态(1/0):");
    Serial.println(digitalRead(Status));
    Serial.print("计数器i=");
    Serial.println(i); 
    
    if (digitalRead(Status) == HIGH && (flag == true))
    {
   
      i++;
      delay(20);
      flag = false;
    }
    
    if((digitalRead(Status) == LOW)&& (flag == false))
    {
   
      flag = true;
    }
    
    Count_(i);//判断计数器的数值点亮LED指示灯 
    delay(20);
    }  
//Serial.println(digitalRead(Status));    
 }
    //else{flag == true;}
    delay(100);
 
}

/*******************************************************************************
 * 函数名:Count_()
 * 功能:判断计数、显示对应的LED
******************************************************************************/

 void Count_(int a)
{
    
    //a = 0;
    if(0<=a && a<=3)//0~3
    {
      digitalWrite(LED_G,HIGH);
        digitalWrite(LED_Y,LOW);
        digitalWrite(LED_R,LOW);      
      }
      if(4<=a && a<=6)//4~6
    {
      digitalWrite(LED_G,LOW);
        digitalWrite(LED_Y,HIGH);
        digitalWrite(LED_R,LOW);
      }
      if(7<=a && a<=10)//7~10
    {
      digitalWrite(LED_G,LOW);
        digitalWrite(LED_Y,LOW);
        digitalWrite(LED_R,HIGH);      
      }
      if(a>10)
      {
   
        Spark_LED_R();        
        }      
} 
/******************************************************************************
 * 
 * 函数名:Spark_LED_R
 * 功能: 闪烁LED_R 灯
 * 
******************************************************************************/
void Spark_LED_R()
{
   
  digitalWrite(LED_R,HIGH);
  delay(200);
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naiva

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值