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

    xiaoxiao2023-09-13  152

    本节书摘来异步社区《动手玩转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;    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)    if (x<=500 && x>=100 && y>= 150 && y<375)      {      switchOn();    }   // 检查是否按下(OFF)    if (x>500 && x<=900 && y>= 150 && y<375)      {      switchOff();     }   // 检查亮度   if (y>=375 && y<=900)     {      setBrightness();     }   }``` ####10.4.3 工作原理 和分成两区域的程序类似,这个程序在2.jpg和3.jpg处判断触摸是否发生在“ON”和“OFF”区域,以及在4.jpg处判断是否有在水平分割线之上的触摸,那是表示亮度调节的。如果在亮度区域触摸了屏幕,在1.jpg处,x轴的位置会被转换成相应的PWM值,然后用setBrightness()调节LED的亮度。
    最新回复(0)