实验一 呼吸灯
int ledpin=13;
void setup() {
}
// the loop function runs overand over again forever
void loop() {
for(int fadevalue=0;fadevalue<=255;fadevalue+=3)
{
analogWrite(ledpin,fadevalue);
delay(20);
}
for(int fadevalue=255;fadevalue>=0;fadevalue-=3)
{
analogWrite(ledpin,fadevalue);
delay(20);
}
使用for循环来控制通过电平的高低来控制LED的亮暗
知识点:analogWrite(x,fadevalue) fadevalue的变化范围0-255 x代表接口编号
delay(x)延迟 使程序停顿xms(毫秒)
loop是循环执行的代码区
实验二 RGBLED的点亮与色彩变换
int ledPin=13;
int redPin=12;
int greenPin=11;
int bluePin=10;
void setup() {
pinMode(ledPin,OUTPUT);//13号针脚
pinMode(redPin,OUTPUT);//12号针脚
pinMode(greenPin,OUTPUT);//11号针脚
pinMode(bluePin,OUTPUT);//10号针脚
}
void loop() //run over and overagain
{
// basic colors;
color(255,0,0);//red on
delay(1000);
color(0,255,0);//green on
delay(1000);
color(0,0,255);//blue on
delay(1000);
//blended colors;
color(255,255,0);//yellow on
delay(1000);
color(255,255,255);//white on
delay(1000);
color(128,0,255);//purple on
delay(1000);
color(0,0,0);//light off
delay(1000);
}
void color(unsigned charred,unsigned char green,unsigned char blue )
{
analogWrite(redPin,red);
analogWrite(greenPin,green);
analogWrite(bluePin,blue);
}
通过控制每种色光的亮灭来改变LED的颜色 编写一个函数来控制每一个色光的 脉冲宽度
注意针脚的编号以及要有一根线接地
实验三 LED灯显示SOS的莫尔斯电码
//莫尔斯电码
在利用摩尔密码灯光求救的时候,定义:灯光长亮为"-",灯光短亮为"."
一个线是一个点的三倍长度 每个线或点之间的时间间隔为一个点的时间 俩个单词之间的间隔为七个点的时间
int ledPin=13;
void setup() {
pinMode(ledPin,OUTPUT);//13号针脚
}
void loop() //run over and overagain
{
flash(200);flash(200);flash(200);//S
delay(300);
flash(500);flash(500);flash(500);//O
flash(200);flash(200);flash(200);//S
delay(1000);
}
void flash(int duration)
{
digitalWrite(ledPin,HIGH);
delay(duration);
digitalWrite(ledPin,LOW);
delay(duration);
}
**digitalWrite函数中HIGH,LOW***
实验四 莫尔斯代码翻译机
int ledPin=13;
char* letters[]={".-", "-..." , "-.-." , ".." , "." ,"..-.",//A-F
"-." ,"....", ".." , ".---" , "-.-" ,".-..","--",//G-M
"-.", "---", ".--." ,"--.-" , ".-." ,"..." ,"-" ,//N-T
"..-" , "...-" ,".--","-..-","-.--","--.."//U-Z
};
char*numbers[]={"-----",".----","..---","...--","....-",".....",//0-5
"-....","--...","---..","----."//6-9
};
int dotDelay=200;
void setup() {
pinMode(ledPin,OUTPUT);//13号针脚
Serial.begin(9600);
}
void loop() //run over and overagain
{
char ch;
if(Serial.available())
//from USB?
{
ch=Serial.read();
if(ch>='a'&&ch<='z')
{
flashSequence(letters[ch-'a']);
}
else if(ch>='A'&&ch<='Z')
{
flashSequence(letters[ch-'A']);
}
else if(ch>='0'&&ch<='9')
{
flashSequence(numbers[ch-'0']);
}
else if(ch==' ')
{
delay(dotDelay*4);
}
}
}
void flashSequence(char*sequence)
{
int i=0;
while(sequence[i]!=NULL)
{
flashDotorDash(sequence[i]);
i++;
}
delay(dotDelay*3);
}
void flashDotorDash(chardotorDash)
{
digitalWrite(ledPin,HIGH);
if(dotorDash=='.')
{
delay(dotDelay);
}
else
{
delay(dotDelay*3);
}
digitalWrite(ledPin,LOW);
delay(dotDelay);
}
Serial.begin(9600);
将通过USB通信的速率设置为9600波特 它是计算机上Arduino软件的使用的默认速率
Serial.read;
将字符串发送过来 则Serial.available为真 执行循环
字符串末尾 NULL(\0)
实验五 按键开关的使用
int Key=2;
int ledPin=13;
void setup()
{
pinMode(Key,INPUT);
pinMode(ledPin,OUTPUT);
}
void loop() {
int buttonState = digitalRead(Key);
if(buttonState==0)
{
digitalWrite(ledPin,HIGH);
}
else
digitalWrite(ledPin,LOW);
}
通过Serial.println 确定了 digitalRead 当按键按下时为0,未按下时为1;
实验六 按键色光闪烁
int Key=2;
int bluePin=12;
int greenPin=11;
int redPin=10;
int state=0;
void setup() {
pinMode(Key,INPUT);
pinMode(bluePin,OUTPUT);
pinMode(greenPin,OUTPUT);
pinMode(redPin,OUTPUT);
}
void loop() {
if(!digitalRead(Key))
{
BLINK(HIGH,HIGH,HIGH,300);
BLINK(LOW,LOW,LOW,0);
delay(1000);
}
}
void BLINK (int red,intgreen,int blue,int time)
{
digitalWrite(redPin,red);
delay(time);
digitalWrite(greenPin,green);
delay(time);
digitalWrite(bluePin,blue);
delay(time);
}
实验七 点亮七彩灯
int Key=2;
int ledKin=12;
void setup() {
pinMode(Key,INPUT);
pinMode(ledKin,OUTPUT);
}
void loop() {
if(!digitalRead(Key))
{
digitalWrite(ledKin,HIGH);
delay(3000);
digitalWrite(ledKin,LOW);
delay(500);
}
}
//AI:模拟量输入,比如所有的变送器接入DCS的信号就是AI信号,它是连续的,是不由你认为来控制的;AO:模拟量输出,比如调节阀给出去的信号就是AO信号,是4-20mA的信号;DI:数字量输入,比如现场泵反馈回的启停信号,开关阀反馈回的开关信号,就属于DI信号,只有1和0两种状态;DO:数字量输出,比如你给开关阀继电器的开关信号,就属于DO信号,也只有1和0两个状态,是由人为的通过DCS输出去的信号。
实验八 测温模块的使用
int potPin = 0;
void setup()
{
Serial.begin(9600);//设置波特率
}
void loop()
{
int val;//定义变量
int dat;//定义变量
val=analogRead(0);//读取传感器的模拟值并赋值给val
//dat=(125*val)>>8;//温度计算公式(错误)
Serial.print("Tep:");//原样输出显示Tep字符串代表温度
Serial.print(val);//输出显示dat的值
Serial.println("C");//原样输出显示C字符串
delay(500);//延时0.5秒
}
//不知道温度转换公式 无法将输出的值转化为可读的温度
AO 输出模拟量
今日总结 :学习了LED灯,三色LED,7彩闪烁LED灯,按键开关以及数字温度传感器,学会了用针脚来控制传感器与模块,把c语言的分支,循环语句用在了灯光控制上,以及学会了用arduino的串口监视器进行值的输入与输出,尤其是莫尔斯电码翻译器实验中,通过分支循环语句实现了把字母转换成灯光语句的功能。也了解到了通信速率(通常默认为9600波特),还了解到了AO DO 的区别,具体表现在了analogWrite与digitalWrite函数的不同功能,最后的测温实验由于没有找到正确的温度计算公式,没有完成,但是对测温模块的基本原理与使用方法已经有了基本的了解。