查看: 2697|回复: 5

blinker控制四脚RGB雾灯

[复制链接]
  • TA的每日心情
    开心
    2019-11-10 10:00
  • 签到天数: 130 天

    [LV.7]常住居民III

    发表于 2018-7-29 00:13 | 显示全部楼层 |阅读模式
    本帖最后由 topdog 于 2018-7-30 22:37 编辑

    前期我们研究了WIFIduino arduino ide的安装,小米5s安装blinker APP,以及两者如何关联调试。(地址: https://www.arduino.cn/thread-80411-1-1.html本节还是使用小米5s手机安装的 blinker APP,通过WiFiduino控制四脚RGB雾灯。材料的准备:一个四脚共阳极RGB雾灯,四根杜邦线。

    一,手机blinker APP的布局修改
    设想中的blinker APP是第一排程序名称,第二排显示程序运行时间,计量单位标签,同时震动提醒,第三排一个拨动开关,一个按键,第四排RGB调色板,第五排信息显示框。
    1.png

    在默认的手机界面上,点击右上角的笔,界面上的各个元件就可以修改了。我们把原来冗长的说明修改成实验标题。按右下角的√保存。不需要的元件,如D2-L的开关点左下角垃圾桶删除。
    4.png

    查看运行时间震动反馈的按钮开关保留,两个相关的文本显示标签也保留,我们来看下它的键值。
    6.png

    添加一个RGB的滑动条,键值修改成RGBKEY,这个值要和板子上程序的设定值定义一致。
    2.png

    添加一个拨动开关,键值ToggleKey,这个值要和板子上程序的设定值定义一致。
    3.png

    本界面最下面六个按钮分别是文本、按键Button、拨动开关toggle、滑动条Slider、RGB调色板rgb、摇杆joystick。我们已经按照设想把相应的元件拖曳到了合适的位置,按右上角的锁把界面固定住。
    5.png


    二,WiFiduino 硬件连接和程序编写 rgb.JPG
    共阳极的rgb七彩雾灯,pin1接WiFiduino 3.3v,pin2 红色极接 D4,pin3 绿色极接D5,pin4 蓝色极接 D8。如果要呈现红色,D4低电平,D5、D8高电平。 pinMode(PIN_RED, OUTPUT); 管脚输出的情况下数字和模拟的方法都是可行的。RGB都给高电平则不亮。digitalWrite()使用高低电平控制三个管脚会呈现七种色彩变化,(3!=3x2+1=7)能够出现七种色彩,故称之为七彩灯。共阴极的RGB pin1接GND高低电平控制效果则反之。 analogWrite()随着PWM电压的变化会呈现不同的色彩,绚烂缤纷。理论上WiFiduino每个引脚都可以analogWrite(),但是在写程序时需要注意D0 RX0,D1 TX0,D2 TX1,D3 是唯一analogRead()的管脚,这些特殊用法都必须回避,否则会影响控制的稳定。请注意程序中uint32_t colorR = map(Blinker.rgb(RGB1,R) , 0, 255, 0, 1024); 用途是把RGB调色板的R取值从一个范围(0~255)转换到另一个范围(0~1024)。已知一个色彩由RGB三个值来确定,如红色(R=0,G=255,B=255)转化好的数值成了(R=0,G=1024,B=1024),APP设定的色彩和led灯呈现的色彩就不匹配了?由此我们发现了问题,并且找到了产生问题的原因。本例解决这个不同步的bug的途径用了程序连接的方法,就是调整一下决定LED色彩的RGB色谱的对应位置。板子上的R管脚对应APP中的G,板子上的G管脚对应APP中的B,板子上的B管脚对应APP中的的R,牵住了不同步问题的牛鼻子APP RGB调色板的BUG就迎刃而解了。

    RGB颜色值对应表         http://www.sioe.cn/yingyong/yanse-rgb-16/

    WiFiduino烧写的程序如下:

    /*
    1  红    D4      -----|\
    2  vcc   3.3   -------| \
    3  绿    D5     ------| /
    4  蓝    D8     ------|/
    */

    #define BLINKER_PRINT Serial
    #define BLINKER_WIFI

    #include <Blinker.h>

    char ssid[] = "WiFi名称";
    char pswd[] = "WiFi密码";

    #define RGB1 "RGBKEY"
    #define TOGGLE_1 "ToggleKey"

    #define PIN_RED D4
    #define PIN_GREEN D5
    #define PIN_BLUE D8

    void setup()
    {
        Serial.begin(115200);

       pinMode(LED_BUILTIN, OUTPUT);
       digitalWrite(LED_BUILTIN, LOW);

       pinMode(PIN_BLUE, OUTPUT);   
       pinMode(PIN_GREEN, OUTPUT);   
       pinMode(PIN_RED, OUTPUT);  

       digitalWrite(PIN_BLUE,HIGH);
       digitalWrite(PIN_GREEN,HIGH);
       digitalWrite(PIN_RED,HIGH);

        Blinker.begin(ssid, pswd);  

        Blinker.wInit(RGB1, W_RGB);
        Blinker.wInit(TOGGLE_1, W_TOGGLE);
    }

    void loop()
    {            
        Blinker.run();      

        if (Blinker.available()) {      

            BLINKER_LOG2("Blinker.readString(): ", Blinker.readString());

            Blinker.vibrate();

            uint32_t BlinkerTime = millis();
            Blinker.print(BlinkerTime);
            Blinker.print("millis", BlinkerTime);
         }           

           uint32_t colorR = map(Blinker.rgb(RGB1,R) , 0, 255, 0, 1024);
           uint32_t colorG = map(Blinker.rgb(RGB1,G), 0, 255, 0, 1024);
           uint32_t colorB = map(Blinker.rgb(RGB1,B), 0, 255, 0, 1024);      

            Blinker.delay(100);                  

           if ( Blinker.connected() && Blinker.toggle(TOGGLE_1)){                              

           analogWrite(PIN_RED, colorG);        
           analogWrite(PIN_GREEN, colorB);
           analogWrite(PIN_BLUE, colorR);

           Blinker.delay(500);
        }
         else {
           digitalWrite(PIN_BLUE,HIGH);
           digitalWrite(PIN_GREEN,HIGH);
           digitalWrite(PIN_RED,HIGH);                  
       }                                         
    }
    (完)


















    该用户从未签到

    发表于 2018-7-29 11:15 | 显示全部楼层
    esp8266的analogwrite输入值的区间可调的

    还有个简单的方法
    在初始化io的时候输入以下代码即可直接使用0-255的值了
    #if defined(ESP8266)
        analogWriteRange(255);
    #endif
  • TA的每日心情
    开心
    2019-11-10 10:00
  • 签到天数: 130 天

    [LV.7]常住居民III

     楼主| 发表于 2018-7-29 16:16 | 显示全部楼层
    三水 发表于 2018-7-29 11:15
    esp8266的analogwrite输入值的区间可调的

    还有个简单的方法

    谢谢指导一起学习,一起进步。

    该用户从未签到

    发表于 2019-7-29 22:41 | 显示全部楼层
    你好,我复制上面的代码编译的时候错误: Blinker.begin(ssid, pswd);
  • TA的每日心情
    开心
    2019-11-10 10:00
  • 签到天数: 130 天

    [LV.7]常住居民III

     楼主| 发表于 2019-7-29 23:17 | 显示全部楼层
    Allen大白 发表于 2019-7-29 22:41
    你好,我复制上面的代码编译的时候错误: Blinker.begin(ssid, pswd);

    现在库文件修改了,这个不能用了。

    该用户从未签到

    发表于 2019-7-29 23:38 | 显示全部楼层
    topdog 发表于 2019-7-29 23:17
    现在库文件修改了,这个不能用了。

    哦哦,好的,谢谢
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    雄霸全Arduino中文开发平台欢迎大家支持
    雄霸全Arduino中文开发平
    雄霸全Arduino中文开发平台1.03版本 支持任何Arduino板卡官方库第三方库等全中文编写
    OLED 128*64自制可达10000000个选项的菜单(已更新)
    OLED 128*64自制可达10000
    OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
    为拍月亮而生的便携望远镜系统。
    为拍月亮而生的便携望远镜
    参赛项目: 便携望远镜系统 参赛组员: 1人 布丁:嵌入式软件、上位机软件、电路、结
    open NUL: The system cannot find the file specified. win10系统安装IDE报错
    open NUL: The system can
    请问怎么解决? 软件版本:arduino1.8.10
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表