arduino1
2015-05-30 10:04:35 kevin3052974065 阅读数 2302
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    791 人正在学习 去看看 王全
int redPin = 9;
int greenPin = 10;
int yellowPin = 8;
char ab;
void setup() {
        Serial.begin(9600);
        pinMode(redPin, OUTPUT);
        pinMode(greenPin, OUTPUT);
        pinMode(yellowPin, OUTPUT);
}
void loop() {
  if (Serial.available()>0)
  {
  ab=Serial.read();
  Serial.println(ab);
  if (ab=='r'||ab=='R'){
    redOne();
  }
  else if (ab=='g'||ab=='G'){
    greenOne();
  }
  else if (ab=='y'||ab=='Y'){
     yellowOne(); 
  }
  else  { Serial.println("input error!");
  }
  }
}


void redOne(){
  digitalWrite(redPin,HIGH);
  delay(10000);
   digitalWrite(redPin,LOW);
}
void greenOne(){
  digitalWrite(greenPin,HIGH);
  delay(10000);
   digitalWrite(greenPin,LOW);
}
void yellowOne(){
  digitalWrite(yellowPin,HIGH);
  delay(10000);
   digitalWrite(yellowPin,LOW);
}
2019-12-03 09:17:15 dpjcn1990 阅读数 138
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    791 人正在学习 去看看 王全

1.前言

很久以前在其他平台发布了一些帖子,趁着有时间就同步到一起。这里主要是做一个蓝牙版本的RGB灯。
欢迎点赞关注博主。

2.优化事项

  • 优化事项1:多彩灯颜色切换不够平滑,会闪烁。同时修改了arduino代码以及app代码(需要最新版app 麻烦在帖子下面留言)
  • 优化事项2:arduino 代码没有考虑共阴还是共阳(最新版代码加入这个考虑事项)
  • 未优化事项:可以考虑后期加入记录上一次灯颜色状态,下一次开灯就默认是该颜色
  • 未优化事项:是否可以在板子上加入一个按钮,可以切换常用颜色,不一定每次都用app

3.优化版代码

具体优化的地方可以对比两份代码

  • 旧代码
/**
* 日期:2016/11/24
* 功能:蓝牙台灯
* 作者:单片机菜鸟
**/

#define BTSerial Serial1
#define MyDebugSerial Serial

//该条语句用于使能DEBUG输出信息,屏蔽掉就不会输出debug调试信息
#define DEBUG

#ifdef DEBUG
#define DBGLN(message)    MyDebugSerial.println(message)
#else
#define DBGLN(message)
#endif

#define PIN_RED 9
#define PIN_GREEN 10
#define PIN_BLUE 11

int red = 0;//红色
int green = 0;//绿色
int blue = 0;//蓝色

void setup() {
  pinMode(PIN_RED, OUTPUT);
  pinMode(PIN_GREEN, OUTPUT);
  pinMode(PIN_BLUE, OUTPUT);
  BTSerial.begin(9600);
  MyDebugSerial.begin(9600);
}

void loop() {
  int leng = ReceiveBTMessage();
  if(leng>0){
    //收到了新RGB数值
    colorRGB(red,green,blue);
  }
}

/**
* 读取串口缓冲区里面的数据
* 
*/
int ReceiveBTMessage(){
  /**
     * @Desc 把RGB组合成协议内的数据格式
     *  开始符+长度+rgb+结束符
     * "+C,n:rgbString;"
     * 例子:"+C,10:100,255,60;"
     **/
  String data = "";
  if (BTSerial.available()>0){
    unsigned long start;
    start = millis();
    char c0 = BTSerial.read();
    if (c0 == '+')
    {
      char c;
      while (millis()-start<200) 
      {
        if (BTSerial.available()>0)
        {
          c = BTSerial.read();
          data += c;
        }
        if (c==';')
          break;
      }

      int sLen = strlen(data.c_str());
      int i,r,g,b;
      for (i = 0; i <= sLen; i++){
        if (data[i] == ':'){
          break;
        }
      }
      DBGLN(data);
      int iSize;
      //"+C,10:100,255,60;"    
      String _size = data.substring(2, i);
      iSize = _size.toInt();

      for(r=i+1;r<=sLen;r++){
         if(data[r]==','){
           break;
          }  
      }

      for(g=r+1;g<=sLen;g++){
         if(data[g]==','){
           break;
          }  
      }

      for(b=g+1;b<=sLen;b++){
         if(data[b]==';'){
           break;
          }  
      }

      String sred = data.substring(i+1,r);
      String sgreen = data.substring(r+1,g);
      String sblue = data.substring(g+1,b);

      red = sred.toInt();
      green = sgreen.toInt();
      blue = sblue.toInt();

      DBGLN("red:"+sred);
      DBGLN("green:"+sgreen);
      DBGLN("blue:"+sblue);
      return iSize;
    }else{
      while(BTSerial.read() >= 0){}  
    }
  }
  return 0;
}

void colorRGB(int red, int green, int blue){
  analogWrite(PIN_RED,constrain(red,0,255));
  analogWrite(PIN_GREEN,constrain(green,0,255));
  analogWrite(PIN_BLUE,constrain(blue,0,255));
}

  • 优化版代码
/**
* 日期:2016/11/24
* 功能:蓝牙台灯
* 作者:单片机菜鸟
**/

#define BTSerial Serial1
#define MyDebugSerial Serial

//该条语句用于使能DEBUG输出信息,屏蔽掉就不会输出debug调试信息
//#define DEBUG
//该条语句用于使能是共阴RGB  屏蔽掉就是共阳RGB
//#define COMMON_GND

#ifdef DEBUG
#define DBGLN(message)    MyDebugSerial.println(message)
#else
#define DBGLN(message)
#endif

#define PIN_RED 9
#define PIN_GREEN 10
#define PIN_BLUE 11

int red = 0;//红色
int green = 0;//绿色
int blue = 0;//蓝色

void setup() {
  pinMode(PIN_RED, OUTPUT);
  pinMode(PIN_GREEN, OUTPUT);
  pinMode(PIN_BLUE, OUTPUT);
  BTSerial.begin(9600);
  MyDebugSerial.begin(9600);
}

void loop() {
  int leng = ReceiveBTMessage();
  if(leng>0){
    //收到了新RGB数值
    colorRGB(red,green,blue);
  }
}

/**
* 初始化RGB灯(后面可以考虑加入一个记录之前状态的功能,下次打开就取出来显示)
*/
void init_RGB(){
  #ifdef COMMON_GND
    colorRGB(255,255,255);
  #else
    colorRGB(0,0,0);
  #endif
}

/**
* 读取串口缓冲区里面的数据
* 
*/
int ReceiveBTMessage(){
  /**
     * @Desc 把RGB组合成协议内的数据格式
     *  开始符+长度+rgb+结束符
     * "+C,n:rgbString;"
     * 例子:"+C,10:100,255,60;"
     **/
  String data = "";
  if (BTSerial.available()>0){
    unsigned long start;
    start = millis();
    char c0 = BTSerial.read();
    if (c0 == '+')
    {
      char c;
      while (millis()-start<100) 
      {
        if (BTSerial.available()>0)
        {
          c = BTSerial.read();
          data += c;
        }
        if (c==';')
          break;
      }

      int sLen = strlen(data.c_str());
      int i,r,g,b;
      for (i = 0; i <= sLen; i++){
        if (data[i] == ':'){
          break;
        }
      }
      DBGLN(data);
      int iSize;
      //"+C,10:100,255,60;"    
      String _size = data.substring(2, i);
      iSize = _size.toInt();

      for(r=i+1;r<=sLen;r++){
         if(data[r]==','){
           break;
          }  
      }

      for(g=r+1;g<=sLen;g++){
         if(data[g]==','){
           break;
          }  
      }

      for(b=g+1;b<=sLen;b++){
         if(data[b]==';'){
           break;
          }  
      }

      String sred = data.substring(i+1,r);
      String sgreen = data.substring(r+1,g);
      String sblue = data.substring(g+1,b);

      red = sred.toInt();
      green = sgreen.toInt();
      blue = sblue.toInt();

      DBGLN("red:"+sred);
      DBGLN("green:"+sgreen);
      DBGLN("blue:"+sblue);
      return iSize;
    }else{
      while(BTSerial.read() >= 0){}  
    }
  }
  return 0;
}

void colorRGB(int red, int green, int blue){
  #ifdef COMMON_GND
     analogWrite(PIN_RED,constrain(red,0,255));
     analogWrite(PIN_GREEN,constrain(green,0,255));
     analogWrite(PIN_BLUE,constrain(blue,0,255));
  #else
     analogWrite(PIN_RED,constrain(255-red,0,255));
     analogWrite(PIN_GREEN,constrain(255-green,0,255));
     analogWrite(PIN_BLUE,constrain(255-blue,0,255));
  #endif
}

3.总结

其实可以做的东西还是很多,比如我也可以把蓝牙多彩灯改成Wifi多彩灯,通过Wifi形式来控制。各位也可以做成各种好看的灯罩哈哈哈

2019-07-18 20:37:22 m0_37738838 阅读数 128
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    791 人正在学习 去看看 王全

功能需求

  1. 四种灯光模式 :照明灯、呼吸灯、流水灯、七彩灯
  2. 可实现99分钟内定时功能
  3. 可调节灯光颜色比例,实现任意彩灯切换
  4. 远程控制

效果视频

https://v.youku.com/v_show/id_XNDI3NDY2NjA0MA==.html?spm=a2h3j.8428770.3416059.1

在这里插入图片描述

硬件

  • Arduino UNO主板
  • HC-06蓝牙模块
  • RGB全彩灯 4个
  • 四位数码管
  • 手机
  • 3D打印相关材料(外壳)或kt板

软件环境

Arduino IDE
APP inventor

接线

Arduino RGB全彩灯
A3 S
A4 S
A5 S
D2 S
5V VCC
GND GND
Arduino 数码管
11 CLK
12 DIO
5V VCC
GND GND
Arduino 蓝牙
RX TX
5V VCC
GND GND

程序

 #include <Adafruit_NeoPixel.h>//全彩LED库文件
#include <Metro.h> 

#define PIN1  A3    //设置全彩LED引脚为A3 可自己调整
#define PIN2  A4    //设置全彩LED引脚为A4 可自己调整
#define PIN3  A5    //设置全彩LED引脚为A5 可自己调整
#define PIN4  2    //设置全彩LED引脚为13 可自己调整

#include <TM1637.h>
// 数码管  配置引脚
#define CLK 11 //!参数 clk -数字引脚连接到模块的时钟引脚数
#define DIO 12//!参数 dio -数字引脚连接到模块的DIO引脚数 
TM1637 TM(CLK, DIO);//!初始化一个TM1637对象,设置时钟和数据引脚。


#define MAX_LED 9
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel( MAX_LED, PIN1, NEO_RGB + NEO_KHZ800 );//Adafruit_NeoPixel实例化,通过构造函数初始化
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel( MAX_LED, PIN2, NEO_RGB + NEO_KHZ800 );//Adafruit_NeoPixel实例化,通过构造函数初始化
Adafruit_NeoPixel strip3 = Adafruit_NeoPixel( MAX_LED, PIN3, NEO_RGB + NEO_KHZ800 );//Adafruit_NeoPixel实例化,通过构造函数初始化
Adafruit_NeoPixel strip4 = Adafruit_NeoPixel( MAX_LED, PIN4, NEO_RGB + NEO_KHZ800 );//Adafruit_NeoPixel实例化,通过构造函数初始化
Metro metro = Metro(6000);   //把 blink1Metro 实例化 Metro 对象 ,并设置间隔时间
int min_time;
long second_time=0;

int red=255,green=255,blue=255;
static  long time_1=0;
static long time_2=0;
//uint32_t color_led = strip1.Color(green,red,blue); //GRB
  

//arduino引脚排列 VCC TX RX GND
void setup()
{
   Serial.begin(9600);//初始化波特率为9600
   strip1.begin();           //初始化Adafruit_NeoPixel;
   strip2.begin();
   strip3.begin();
   strip4.begin();
   LED(0);

   TM.show(false);//设置数码管显示  为真显示,否则不显示
   

}
String comdata = ""; 
int mode_LED=0;

bool timer=false;
void loop()
{
  
   while (Serial.available() > 0){
        comdata += char(Serial.read());  //每次读一个char字符,并相加
        delay(2);

    }
   if(timer) timing();//定时
   if (comdata.length() > 0){

        Serial.println(comdata); //打印接收到的字符
        switch(comdata.charAt(0)){
          case 'a':
          
          String str=comdata.substring(1,comdata.length());
          min_time=str.toInt();
          Serial.println(min_time);
          time_2=millis();
          timer=true;
          
          break;     
        }


        /***********设置灯光颜色 rgb****************/
        if(comdata.charAt(0)=='g'){
          String str=comdata.substring(1,comdata.length());
          green=str.toInt();
          Serial.println(green);
        
       }
       else if(comdata.charAt(0)=='r'){
         String str=comdata.substring(1,comdata.length());
         red=str.toInt();
         Serial.println(red);
       }
       else if(comdata.charAt(0)=='b'){
         String str=comdata.substring(1,comdata.length());
         blue=str.toInt();
         Serial.println(blue);
       }
       
        /***********设置灯光模式****************/
       if(comdata.equals("one")){
        mode_LED=1;
       }
       else if(comdata.equals("two")){
        mode_LED=2;
       }
       else if(comdata.equals("three")){
        mode_LED=3;
       }
       else if(comdata.equals("four")){
        mode_LED=4;
       }
       else if(comdata.equals("off")){
        mode_LED=5;
       }
        comdata = "";

    }
   
   mode(mode_LED);
  



}

void timing(){
 

  //

  
  
  if(millis()-time_2>60000){
    min_time=min_time-1;
   time_2=millis();
  }
  

  if(min_time==0){
    LED(0);
    mode_LED=0;
    delay(500);
    TM.show(false);//设置数码管显示  为真显示,否则不显示
    timer=false;
  }else{
    TM.DNum(00,min_time,true);//显示双数字,左边两位显示num1最后两位;左边两位显示num2最后两位;piont 是否显示中间的两点
    TM.show(true);//设置数码管显示  为真显示,否则不显示
  }
  
}

void mode(int number){//灯光模式
  switch(number){
    case 1:
    LED_color(green,red,blue);
    LED(255);
    break;
    case 2:
    LED_color(green,red,blue);
    two();
    break;
    case 3:
    LED_color(green,red,blue);
    three();
    break;
    case 4:
    four();
    break;
    case 5:
    LED(0);
    break;
  }
  
}

int x=0;
void two(){ 
   if(x==5) x=0;
  if(millis()-time_1>1000){
   x++;
   time_1=millis();
  }
  switch(x){
    case 1:
    strip1.setBrightness(255);
    strip1.show();
    strip2.setBrightness(0);
    strip2.show();
    strip3.setBrightness(0);
    strip3.show();
    strip4.setBrightness(0);
    strip4.show();
    break;
    case 2:
    strip1.setBrightness(0);
    strip1.show();
    strip2.setBrightness(255);
    strip2.show();
    strip3.setBrightness(0);
    strip3.show();
    strip4.setBrightness(0);
    strip4.show();
    break;
    case 3:
    strip1.setBrightness(0);
    strip1.show();
    strip2.setBrightness(0);
    strip2.show();
    strip3.setBrightness(255);
    strip3.show();
    strip4.setBrightness(0);
    strip4.show();
    break;
    case 4:
    strip1.setBrightness(0);
    strip1.show();
    strip2.setBrightness(0);
    strip2.show();
    strip3.setBrightness(0);
    strip3.show();
    strip4.setBrightness(255);
    strip4.show();
    break;
  }
 

}

int i=255;//呼吸灯 亮度
bool flag;
void three(){
  
  if(i==255) flag=true;
  if(i==0) flag=false;
  if(millis()-time_1>10){
    if(flag) i--;
    else i++; 
    time_1=millis();
  }
   LED(i);
}
int j=0;
void four(){
  if(j==7) j=0;
   if(millis()-time_1>2000){
      j++;
      time_1=millis();
   }
   switch(j){
    case 1:
    LED_color(0,255,0);
    break;
    case 2:
    LED_color(255,255,0);
    break;
    case 3:
    LED_color(0,0,255);
    break;
    case 4:
    LED_color(255,0,0);
    break;
    case 5:
    LED_color(255,0,255);
    break;
    case 6:
    LED_color(0,255,255);
    break;
    case 7:
    LED_color(255,255,255);
    break;
   }
   LED(255);
}

void LED_color(int green,int red,int blue){//设置灯光颜色
  strip1.setPixelColor(0,strip1.Color(green,red,blue));
  strip1.setPixelColor(1,strip1.Color(green,red,blue));
  strip2.setPixelColor(0,strip2.Color(green,red,blue));
  strip2.setPixelColor(1,strip2.Color(green,red,blue));
  strip3.setPixelColor(0,strip3.Color(green,red,blue));
  strip3.setPixelColor(1,strip3.Color(green,red,blue));
  strip4.setPixelColor(0,strip4.Color(green,red,blue));
  strip4.setPixelColor(1,strip4.Color(green,red,blue));
}
void LED(int light){//设置灯光亮度
  strip1.setBrightness(light);
  strip1.show();
  strip2.setBrightness(light);
  strip2.show();

  strip3.setBrightness(light);
  strip3.show();
//  strip4.setPixelColor(0, strip4.Color(green,red,blue);
//  strip4.setPixelColor(1,strip4.Color(green,red,blue));
  strip4.setBrightness(light);
  strip4.show();
}

下载链接:

QQ交流群:731722723 验证消息:Arduino

2019-09-28 17:36:25 yanwennian 阅读数 529
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    791 人正在学习 去看看 王全

Arduino 初级编程示例

硬件平台:使用Arduino Nano V3.2开发板。

软件平台:使用Arduino 官方 IDE。

硬件 I/O:D13。

示例:详细记录Arduino 控制LED灯闪烁的编程,烧录,验证等步骤。

 


目录

Arduino 编程  :  LED灯闪烁

第一步:开发板选择:

第二步:通讯端口选择:

第三步:编写代码:

第四步:编译代码:

第五步:烧录代码:

第六步:结果验证----LED以500ms为间隔闪烁。


Arduino 编程  :  LED灯闪烁

严文年 -- 记于苏州

 

第一步:开发板选择:

 

第二步:通讯端口选择:

 

第三步:编写代码:

 

第四步:编译代码:

 

第五步:烧录代码:

 

第六步:结果验证----LED以500ms为间隔闪烁。

2015-06-23 12:39:14 wby20030316 阅读数 1924
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    791 人正在学习 去看看 王全

所谓的呼吸灯,就是灯在规定时间里有规律的变亮或变暗,今天我们就来利用arduino做一个这样的实验。

void setup () {  
    pinMode(9,OUTPUT);  
}  
void loop() {  
  for (int a=0; a<=255;a++) {  
    analogWrite(9,a);  
    delay(8); 
}  
   for (int a=255; a>=0;a--) {  
    analogWrite(9,a);  
    delay(8);
}  
    delay(300);
}

上传该程序后,灯会有序的变亮再变暗。

arduino rgb 3色灯

阅读数 3065

arduino UNO、面包板、按键、连接线

博文 来自: wgj99991111
没有更多推荐了,返回首页