使用图形化编程实现灯泡开关设置

实验所需

硬件:Arduino、LED
软件:Mixly IDE

1.Arduino简介
Arduino是一种开源的电子平台,该平台最初主要基于AVR单片机的微控制器和相应的开发软件,目前在国内正受到电子爱好者的广泛关注。
Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反映、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是利用Arduino编程语言(基于Wiring)和(Arduino)开发环境(基于Processing)来实现的。
Arduino被设计成一个小型控制器的形式,通过连接到计算机进行控制。Arduino开发过程如下:
(1)开发者设计并连接好电路;
(2)将电路连接到计算机上进行编程;
(3)将编译通过的程序下载到控制板中进行观测;
(4)最后不断修改代码进行调试以达到预期效果。

2.Mixly简介
Mixly是一款用于中小学创意电子教学的图形化编程软件,由北京师范大学米思奇团队开发和维护,它是基于谷歌的图形化开源引擎Blockly进行的开发。现在已经成为国内重要的创客教育编程软件之一。随着2017年7月,国务院发文要求在中小学开展人工智能课程、普及编程教育,Mixly将得到中小学的进一步推广,其未来值得期待。

实验过程

利用Arduino板上的LED灯和开关,实现按钮控制LED灯亮灭。

方法1:
volatile int BUTTON;
volatile int LED;
volatile boolean state;    //state记录当前开关状态

void setup(){              //初始化
  pinMode(13, OUTPUT);     //把13串口设为高,则灯泡亮起
  state = true;
  LED = 13;
  BUTTON = 7;
  digitalWrite(13,HIGH);
  Serial.begin(9600);
  pinMode(12, INPUT);
}

void loop(){
  Serial.println(state);
  while (digitalRead(12) == 1) {  //按钮是1的时候,既不按按钮的情况,不做处理。按下按钮后则执行下面语句
  }                              
  if (state == true) {             //如果state为真,则把13调为底,LED灯熄灭
    digitalWrite(13,LOW);
    state = !state;

  } else {                        //如果state为假,则把13调为高,LED灯亮起
    digitalWrite(13,HIGH);
    state = !state;

  }
  delay(500);

}

转换为图形化编程如下:
在这里插入图片描述

方法2:
volatile byte LED;
volatile boolean LastState;    //变量LastSTate记录LED灯上一个状态
volatile byte SW;              //变量开关
volatile byte click;           //变量click来记录按下开关的次数
volatile boolean flag;          
volatile boolean flag2;
volatile boolean toggle;       //toggle控制LED亮灭

void setup(){                 //初始化
  pinMode(8, INPUT);
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  LED = 0;
  SW = 0;
  LastState = 0;
  toggle = 0;
  click = 0;
  flag = 0;
  flag2 = 0;
  pinMode(8, INPUT_PULLUP);
  digitalWrite(13,LOW);
}

void loop(){
  Serial.println(digitalRead(8));  //打印串口8的值
  while (digitalRead(8) == 0) {    //当串口为0时,进入循环,即按钮按下
    flag = !digitalRead(8);        //记录LED当前状态和上一次状态是否一样
    delay(10); 
    if (flag != LastState) {       //如果LED当前状态和上一次状态不一致
      flag2 = !digitalRead(8);     //则再次进行判)

    }
    if (flag == flag2) {           //如果两次判断的结果相同,则为开关已经按下
      LastState = flag;            //开关状态换为flag记录的状态
      click = click + 1;           //按钮按下次数加1
 
    }
    if (click == 1) {              //当按钮按下次数为1
      toggle = !toggle;            //更改控制LED状态值
      digitalWrite(13,toggle);     //执行LED状态值

    }
    if (click == 2) {               //当按钮按下次数为1
      click = 0;                    //把按钮按下次数置0,以便重复循环使用
      toggle = !toggle;             //更改控制LED状态值
      digitalWrite(13,toggle);      //执行LED状态值

    }
  }

}

转换为图形化编程如下:
在这里插入图片描述
如果想要继续学习Mixly的同学,可以关注我,我会陆续发布更多资源,供大家参考学习

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐