《动手玩转Arduino》——10.4 作品36:做一个三区域触摸开关

    xiaoxiao2023-11-29  187

    本节书摘来自异步社区《动手玩转Arduino》一书中的第10章,第10.4节,作者【澳】John Boxall,译者 翁恺,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    10.4 作品36:做一个三区域触摸开关

    在这个作品中,我们要做一个三区域的触摸开关,可以控制数字引脚3上的一个LED,让这个LED点亮、熄灭,还可以通过PWM调节它的亮度(第3章的知识)。

    10.4.1 触摸屏坐标系

    触摸屏的坐标系设计如图10-7所示。

    这个触摸屏的坐标系分成“OFF(关)”、“ON(开)”和“brightness(亮度)”控制区域,程序测量触摸屏返回的数值来判断哪个部分被按下了,然后做相应的动作。

    10.4.2 程序

    输入并上传下面的程序。

      // 作品36 - 做一个三区域触摸开关   int x,y = 0;   void setup()    {      pinMode(3, OUTPUT);   }    void switchOn()   {    digitalWrite(3, HIGH);     delay(200);   }   void switchOff()   {     digitalWrite(3, LOW);     delay(200);    }   void setBrightness()   {     int xx, bright;     float br;     xx=x-100; 1   br=(800-xx)/255;      bright=int(br);     analogWrite(3, bright);   }   int readX()           // 返回触摸屏x轴的值   {     int xr=0;     pinMode(A0, INPUT);        pinMode(A1, OUTPUT);        pinMode(A2, INPUT);      pinMode(A3, OUTPUT);        digitalWrite(A1, LOW);    // 设A1为GND      digitalWrite(A3, HIGH);   // 设A3为5V     delay(5);     xr=analogRead(0);     return xr;   }   int readY()          // 返回触摸屏y轴的值   {     int yr=0;     pinMode(A0, OUTPUT);    // A0     pinMode(A1, INPUT);     // A1     pinMode(A2, OUTPUT);    // A2     pinMode(A3, INPUT);     // A3     digitalWrite(A0, LOW);   // 设A0为GND      digitalWrite(A2, HIGH);   // 设A2为5V     delay(5);     yr=analogRead(1);     return yr;   }   void loop()   {     x=readX();     y=readY();   // 检查是否按下(ON) 2   if (x<=500 && x>=100 && y>= 150 && y<375)      {      switchOn();    }   // 检查是否按下(OFF) 3   if (x>500 && x<=900 && y>= 150 && y<375)      {      switchOff();     }   // 检查亮度 4   if (y>=375 && y<=900)     {      setBrightness();     }   }

    10.4.3 工作原理

    和分成两区域的程序类似,这个程序在2和3处判断触摸是否发生在“ON”和“OFF”区域,以及在4处判断是否有在水平分割线之上的触摸,那是表示亮度调节的。如果在亮度区域触摸了屏幕,在1处,x轴的位置会被转换成相应的PWM值,然后用setBrightness()调节LED的亮度。

    我们可以使用这些基础函数,用这个简单廉价的触摸屏做出任意数量的开关或滑动控制。

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)