用8266学习单片机-4-GPIO模拟信号Analog Signal~呼吸灯-ADC之坑-为什么只有0和1023????

数字信号

高低电平的数字信号中国不是高电平就是低电平,两种状态
LED只能亮或着灭
想实现亮度变化的话,只能调节电阻大小

模拟信号

就是尽可能的将数字信号中没有用到的电平利用起来
引脚图
模拟引脚(一般前面标记有波浪线) : ~D1 ~D2 ~D3 ~D4 ~D5 ~D6 ~D7
这些引脚其实也可以输出数字信号

const int pinLed = 12;  //看引脚图对应 ~D6
void setup() {
  pinMode(pinLed, OUTPUT); 
}

void loop() {
  digitalWrite(pinLed,HIGH);
  delay(1000);
  digitalWrite(pinLed,LOW);
  delay(1000);
}

下面进行模拟信号的读取和根据输出模拟信号
灯的亮度由D5输入的电压强度决定

const int sensor = 14;  // ~D5
const int pinLed = 12;  // ~D6
int sensorRead = 0;
int sensorData = 0;
void setup() {
   Serial.begin(9600);  
  pinMode(sensor, INPUT); 
  pinMode(pinLed, OUTPUT); 
}

void loop() {
  //digitalWrite(pinLed,HIGH);
 analogWrite(pinLed,sensorData);  //输出模拟量,范围为0~255
  sensorRead = analogRead(sensor);
   //8266中模拟信号大小为0~1023
   //map方法转换为0~255
   sensorData = map(sensorRead,0,1023,0,255);
  Serial.print("Sersor: ");
  Serial.print( sensorRead);
  Serial.print("--- ");
  Serial.println( sensorData);
  delay(500);
  
  //digitalWrite(pinLed,LOW);
  //delay(200);
}

问题来了

但是在D5连上可变电阻我的读取值不是0就是1023.起初我以为是我的电阻变化刻度太大了。。。后来我用小电阻串联尝试发现tmd,不对劲,然后发现这玩意
ADC(数模转换器)
然后看看开发板上唯一的ADC接口不是D5,而是A0-TOUT
然后调整下战斗方案,用A0进攻,然后滑动变阻器变为光敏电阻(我的滑动变阻器估计是从床头灯拆下来的。。太大个了)

const int pinLed = 12;  // ~D6
int light = 0; 

void setup() {
  Serial.begin(9600);  
  pinMode(A0,INPUT);
  pinMode(pinLed, OUTPUT); 
}

void loop() {
  light = analogRead(A0);
  analogWrite(pinLed,light);
  Serial.println(light);
  delay(1000);

}

效果

在这里插入图片描述

简易版呼吸灯

线性变亮在线性变灭,稍微延迟了一会
(非线性才是美的呼吸灯,但是这里力求简单)

const int pinLed = 12;  // ~D6

void setup() {
  Serial.begin(9600);  
  pinMode(pinLed, OUTPUT); 
}


void loop() {
  for(int i =0;i<255;i++)
  {
     analogWrite(pinLed,i);
     Serial.println(i);
    }
  for(int i =255;i>0;i--)
  {
     analogWrite(pinLed,i);
     Serial.println(i);
    }   
    delay(300);
 
  
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值