实验1:waterBlink流水灯实验
先设置200延迟后设置400延迟是为了让每个灯珠都亮灭1s,具体没要求,按照个人喜好即可。
void setup()
{
pinMode(19, OUTPUT); //设置19号管脚为输出管脚
pinMode(5, OUTPUT); //设置5号管脚为输出管脚
pinMode(16, OUTPUT); //设置16号管脚为输出管脚
pinMode(0, OUTPUT); //设置0号管脚为输出管脚
}
void loop()
{
digitalWrite(19, HIGH); //设置19号管脚为高电平
delay(200); //延迟200ms
digitalWrite(5, HIGH); //设置5号管脚为高电平
delay(200); //延迟200ms
digitalWrite(16, HIGH); //设置16号管脚为高电平
delay(200); //延迟200ms
digitalWrite(0, HIGH); //设置0号管脚为高电平
delay(400); //延迟400ms
digitalWrite(19, LOW); //设置19号管脚为低电平
delay(200); //延迟200ms
digitalWrite(5, LOW); //设置5号管脚为低电平
delay(200); //延迟200ms
digitalWrite(16, LOW); //设置16号管脚为低电平
delay(200); //延迟200ms
digitalWrite(0, LOW); //设置10号管脚为低电平
delay(400); //延迟400ms
}
杜邦线连接GND一排接地,串口-灯珠-电阻-接地。
实验2:buttonSerial串口按钮
使用中断函数来监控按钮,当按下时就运行对应函数。
int pushButton = 22; //设置21号管脚名叫pushButton
void setup()
{
Serial.begin(115200); //设置串口波特率为115200
pinMode(pushButton, INPUT); //设置pushButton管脚为输入管脚
attachInterrupt(pushButton, serviceRoutine, FALLING);
//当pushButton管脚变为FALLING时serviceRoutine函数运行
}
void serviceRoutine()
{
int buttonState = digitalRead(pushButton); //把pushButton的数字信号传递给buttonState
Serial.println(buttonState); //串口输出buttonState
}
void loop() {}
电源-管脚-开关-上拉电阻-接地。
实验3:buttonWaterBlink按钮控制流水灯
结合实验1和实验2即可
int pushButton = 22;
void setup()
{
pinMode(pushButton, OUTPUT);//设置button管脚为输入管脚
pinMode(19, OUTPUT);//设置19号管脚为输出管脚
pinMode(5, OUTPUT);//设置5号管脚为输出管脚
pinMode(16, OUTPUT);//设置16号管脚为输出管脚
pinMode(0, OUTPUT);//设置0号管脚为输出管脚
attachInterrupt(pushButton, waterBlink, FALLING);
}
void waterBlink()
{
digitalWrite(19, HIGH);//设置19号管脚为高电平
delay(200);//延迟200ms
digitalWrite(5, HIGH);//设置5号管脚为高电平
delay(200);//延迟200ms
digitalWrite(16, HIGH);//设置16号管脚为高电平
delay(200);//延迟200ms
digitalWrite(0, HIGH);//设置0号管脚为高电平
delay(400);//延迟400ms
digitalWrite(19, LOW);//设置19号管脚为低电平
delay(200);//延迟200ms
digitalWrite(5, LOW);//设置5号管脚为低电平
delay(200);//延迟200ms
digitalWrite(16, LOW);//设置16号管脚为低电平
delay(200);//延迟200ms
digitalWrite(0, LOW);//设置10号管脚为低电平
delay(400);//延迟400ms
}
void loop()
{
while(digitalRead(pushButton) == HIGH){}
if(digitalRead(pushButton) == LOW)
waterBlink();
}
串口-灯珠-电阻-接地。电源-管脚-开关-上拉电阻-接地。
实验4:touchInterrupt触摸串口
中断函数attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)。pin是接收INPUT的GPIO,接收来自填入数字的引脚的信号。当接收到的信号满足mode时,就会执行ISR。
int threshold = 40;//设置触发阈值
bool touch = false;//默认不触发
void touchDetected()
{
touch = true;//ISR触发
}
void setup()
{
Serial.begin(115200);//设置串口波特率
delay(500);//稍加延迟等待
Serial.println("ready");
touchAttachInterrupt(27, touchDetected, threshold);
//当27号管脚触摸超过阈值时执行函数
}
void loop()
{
if (touch)
{
Serial.println("GPIO_27");//串口输出信息
touch = false;//恢复成未触发
}
delay(500);//稍加延迟等待
}