基础学习"/>
Arduino基础学习
1 基本亮灯代码
//给2号引脚设置为led
int red = 2;
void setup() {
// put your setup code here, to run once:
//将led设置为引脚输出
pinMode(red,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(red,HIGH); //点亮
delay(1000);
digitalWrite(red,LOW); //熄灭
delay(1000);
}
2 流水灯
void setup() {
// put your setup code here, to run once:
//初始化端口,使用2-5端口
for(int i = 2; i <= 5 ; i++ ){
pinMode(i,OUTPUT);
}
}
void loop() {
// put your main code here, to run repeatedly:
//以顺序的方式,从引脚2到引脚5,使用for循环一个一个点亮灯
for(int i=2; i<=5; i++){
digitalWrite(i,HIGH); //点亮
delay(1000); // 等待1秒
digitalWrite(i,LOW); // 熄灭
}
for(int i=5; i>=2; i--){
// 以倒叙方式,从引脚5到引脚2,使用for循环一个一个点亮灯
digitalWrite(i,HIGH);
delay(1000);
digitalWrite(i,LOW);
}
}
3.按键点灯
const int bt = 2;
const int lp = 13;
//定义变量
int bst = 0 ; //接受按键定义状态
void setup() {
// put your setup code here, to run once:
pinMode(lp,OUTPUT);
pinMode(bt,INPUT); //输如状态
}
void loop() {
// put your main code here, to run repeatedly:
bst = digitalRead(bt);
if(bst == HIGH){
digitalWrite(lp,HIGH);
}else{
digitalWrite(lp,LOW);
}
}
第二种方法
const int bt = 2;
const int lp = 13;
//定义变量
int bst = 0 ;
void setup() {
// put your setup code here, to run once:
pinMode(lp,OUTPUT);
pinMode(bt,INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
bst = digitalRead(bt);
if(bst == HIGH){
digitalWrite(lp,LOW);
}else{
digitalWrite(lp,HIGH);
}
}
四位数码管显示温度传感器数值
void setup() {
pinMode(A0,INPUT); //连接模拟端口
Serial.begin(9600); //打开串口输入
for(int a =2; a <=13; a++){ //连接所有端口
pinMode(a,OUTPUT);
}
}
//所有四位led灯段选的控制
void step0()
{
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,LOW);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
}
void step1()
{
digitalWrite(12,LOW);
digitalWrite(11,LOW);
digitalWrite(8,HIGH);
digitalWrite(6,LOW);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
}
void step2()
{
digitalWrite(12,HIGH);
digitalWrite(11,LOW);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,LOW);
digitalWrite(4,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
}
void step3()
{
digitalWrite(12,HIGH);
digitalWrite(11,LOW);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,LOW);
}
void step4()
{
digitalWrite(12,LOW);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
}
void step5()
{
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,LOW);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,LOW);
}
void step6()
{
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,LOW);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
}
void step7()
{
digitalWrite(12,HIGH);
digitalWrite(11,LOW);
digitalWrite(8,HIGH);
digitalWrite(6,LOW);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
}
void step8()
{
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
}
void step9(){
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
}
void data(int aa){ //创建switch分支
switch(aa){
case 0:{ step0();break;}
case 1:{ step1();break;}
case 2:{ step2();break;}
case 3:{ step3();break;}
case 4:{ step4();break;}
case 5:{ step5();break;}
case 6:{ step6();break;}
case 7:{ step7();break;}
case 8:{ step8();break;}
case 9:{ step9();break;}
default:break;
}
}
void loop() {
int n = analogRead(A0);
int val;
val = 500 * n /1024;
Serial.println(val);
int g,s,b,q; // 把个十百位分成单个数字
g = val % 10;
s = (val/10) % 10;
b = (val/100) % 10;
q = (val/1000) % 10;
digitalWrite(7,LOW); //位选端口 7 9 10 13
data(g);
delay(1);
digitalWrite(7,HIGH);
digitalWrite(9,LOW);
data(s);
delay(1);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
data(b);
delay(1);
digitalWrite(10,HIGH);
digitalWrite(13,LOW);
data(q);
delay(1);
digitalWrite(13,HIGH);
}
人体传感器点灯
const int sensorPin = A0; //定义人体红外的引脚
const int ledPin = 8; //定义LED灯的引脚
int sensorValue = 0; //声明传感器数据变量
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin,LOW);
pinMode(sensorPin, INPUT);
}
void loop()
{
sensorValue = analogRead(sensorPin);//读取模拟端口传感器数据
Serial.println(sensorValue);
if(sensorValue > 300){ //判断是否有人接近
digitalWrite(ledPin,HIGH); //点亮LED灯
delay(3000); //延时30秒
digitalWrite(ledPin,LOW); //关闭LED灯
}
}
8位点阵显示
int a[8]={2,7,A5,5,13,A4,12,A2};//控制行引脚
int b[8]={6,11,10,3,A3,4,8,9};//控制列引脚
void setup() {
// put your setup code here, to run once:
for(int i=0;i<8;i++){
pinMode(a[i],OUTPUT);
pinMode(b[i],OUTPUT);
}
}
//逐行扫描
void ledRow()
{
for (int i = 0 ; i < 8; i++)
{
digitalWrite(a[i], HIGH);
for (int j = 0; j < 8; j++)
{
digitalWrite(b[j], LOW);
delay(40);
}
digitalWrite(a[i], LOW);
ledclean();
}
}
//逐列扫描
void ledCol()
{
for (int i = 0 ; i < 8; i++)
{
digitalWrite(b[i], LOW);
for (int j = 0; j < 8; j++)
{
digitalWrite(a[j], HIGH);
delay(40);
}
digitalWrite(b[i], HIGH);
ledclean();
}
}
//关闭显示
void ledclean()
{
for (int i = 0; i < 8; i++)//将点阵屏正极ladies,负极拉高,关断显示
{
digitalWrite(a[i], LOW);
digitalWrite(b[i], HIGH);
}
}
//打开显示
void ledopen()
{
for (int i = 0; i < 8; i++)//将点阵屏正极拉高,负极拉低,开启显示
{
digitalWrite(a[i],HIGH);
digitalWrite(b[i],LOW);
}
}
void loop() {
// put your main code here, to run repeatedly:
ledRow();
ledCol();
delay(2000);
ledopen();
delay(2000);
ledclean();
}
旋转电位器控制LED灯
int s1,s2;
void setup() {
pinMode(3,OUTPUT);
pinMode(A0,OUTPUT);
}
void loop() {
s1=analogRead(A0);//读取模拟信号端口信号,0至1023
s2=map(s1,0,1023,0,255);//映射函数,将0至1023范围能的值映射到0至255范围内
analogWrite(3,s2);
}
摇杆控制led灯
int X=A0;
int Y=A1;
void setup() {
// put your setup code here, to run once:
pinMode(X,INPUT);
pinMode(Y,INPUT);
Serial.begin(9600);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
int x,y;
x=analogRead(X);
y=analogRead(Y);
//Serial.println(x,DEC);
Serial.println(y,DEC);
delay(100);
if(x<300){
digitalWrite(2,HIGH);
}
else if(x>800){
digitalWrite(3,HIGH);
}
else if(y<300){
digitalWrite(4,HIGH);
}
else if(y>800){
digitalWrite(5,HIGH);
}
else
{
digitalWrite(5,LOW);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
digitalWrite(4,LOW);
}
}
计时器代码
void stemp(int x,int y)
{
if(x==1)
{
digitalWrite(13,HIGH);
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
digitalWrite(7,LOW);
}
else if(x==2)
{
digitalWrite(13,HIGH);
digitalWrite(10,HIGH);
digitalWrite(9,LOW);
digitalWrite(7,HIGH);
}
else if(x==3)
{
digitalWrite(13,HIGH);
digitalWrite(10,LOW);
digitalWrite(9,HIGH);
digitalWrite(7,HIGH);
}
else if(x==4)
{
digitalWrite(13,LOW);
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
digitalWrite(7,HIGH);
}
if(y==0)
{
zero();
}
else if(y==1)
{
one();
}
else if(y==2)
{
two();
}
else if(y==3)
{
there();
}
else if(y==4)
{
four();
}
else if(y==5)
{
five();
}
else if(y==6)
{
six();
}
else if(y==7)
{
seven();
}
else if(y==8)
{
eight();
}
else if(y==9)
{
nine();
}
}
void setup() {
// put your setup code here, to run once:
for(int i=2;i<=13;i++)
{
pinMode(i,OUTPUT);
}
pinMode(A0,INPUT);
Serial.begin(9600);
}
int c=0;
long long z;
int d=0;
long e=0;
long f=0;
long g=0;
long ge,shi,bai,qian;
void loop() {
anjian();
z=millis()-g;
ge=z/1000%10;
shi=z/1000/10%10;
bai=z/1000/100%10;
qian=z/1000/1000%10;
stemp(1,ge);
delay(3);
stemp(2,shi);
delay(3);
stemp(3,bai);
delay(3);
stemp(4,qian);
delay(3);
if(c==1)
{
c=0;
e=millis();
while(1)
{
f=millis();
anjian();
if(c==1)
{
c=0;
g=g+f-e;
break;
}
stemp(1,ge);
delay(3);
stemp(2,shi);
delay(3);
stemp(3,bai);
delay(3);
stemp(4,qian);
delay(3);
}
}
}
void anjian()
{
int a=digitalRead(A0);
if(a==1){
if(d==0){
c=1;
d=1;
}
}
else
{
d=0;
}
}
void zero()
{
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,LOW);
digitalWrite(5,HIGH);
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
}
void one()
{
digitalWrite(12,LOW);
digitalWrite(11,LOW);
digitalWrite(8,HIGH);
digitalWrite(6,LOW);
digitalWrite(5,HIGH);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
}
void two()
{
digitalWrite(12,HIGH);
digitalWrite(11,LOW);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
}
void there()
{
digitalWrite(12,HIGH);
digitalWrite(11,LOW);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(3,HIGH);
digitalWrite(2,LOW);
}
void four()
{
digitalWrite(12,LOW);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
}
void five()
{
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,LOW);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(3,HIGH);
digitalWrite(2,LOW);
}
void six()
{
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,LOW);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
}
void seven()
{
digitalWrite(12,HIGH);
digitalWrite(11,LOW);
digitalWrite(8,HIGH);
digitalWrite(6,LOW);
digitalWrite(5,HIGH);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
}
void eight()
{
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
}
void nine()
{
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(3,HIGH);
digitalWrite(2,LOW);
}
共阴极数码管快速显示
#define light 1 //共阴数码管阳极高电平亮
#define dark 0 //共阴数码管阳极低电平不亮
#define Open 0 //共阴数码管共阴极低电平可亮
#define Close 1 //共阴数码管共阴极高电平不可亮
#define p1 13
#define a 12
#define f 11
#define p2 10
#define p3 9
#define b 8
#define e 7
#define d 6
#define dp 5
#define c 4
#define g 3
#define p4 A0
const int LEDPin[8] = {a,b,c,d,e,f,g,dp};//存放LED段引脚
const int LEDCom[4] = {p1,p2,p3,p4};//存放LED位引脚
const int segment[11] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
存放LED共阳管码,11个16进制数分别控制数码管显示0~9+全暗,11种状态
void setup() {
for(int i =2; i<=13; i++){ //连接所有端口
pinMode(i,OUTPUT);
}
pinMode(A0,OUTPUT);
}
void loop() {
for(int i=0;i<4;i++)
{
if(i==0){
digitalWrite(LEDCom[i],Close); //共阴给高电平关
}else{
digitalWrite(LEDCom[i],Open); //共阴给高电平开
}
}
for(int i=0;i<8;i++)
{
digitalWrite(LEDPin[i],light);//显示数码管
}
}
更多推荐
Arduino基础学习
发布评论