查看: 120|回复: 4

[未解决] 初学两天,想问一个关于流水灯的问题。

[复制链接]
  • TA的每日心情
    郁闷
    2020-7-1 00:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2020-6-30 23:59 | 显示全部楼层 |阅读模式
    自己也觉得这个问题可能过于简单,但自己找不出错误,实在不知道错在哪里。
    我是在做一个用两个开关分别控制流速和流向的流水灯。
    下面是我自己的编程,自认为是没有问题的:
    int i,n,t,liusu,liuxiang;
    void setup() {
      // put your setup code here, to run once:
    pinMode(2,INPUT);
    for(i=5;i<=11;i++)
    pinMode(i,OUTPUT);
    }

    void loop() {
      // put your main code here, to run repeatedly:
    digitalWrite(2,HIGH);
    liusu=digitalRead(11);
    liuxiang=digitalRead(10);
    if(liusu==HIGH){
    t=400;
    }else{
    t=1200;}

    if(liuxiang==HIGH){
    for(n=9;n>=5;n--)
    {   
    digitalWrite(n,HIGH);
    delay(t);
    digitalWrite(n,LOW);
    }
    }
    else{
    for(n=5;n<=9;n++)
    {   
    digitalWrite(n,HIGH);
    delay(t);
    digitalWrite(n,LOW);
    }
    }
    }
    疑问:我把端口2定为高电压,并将其与开关和端口11相连,利用开关,改变流速,digitalWrite(2,HIGH);
    liusu=digitalRead(11);if(liusu==HIGH){
    t=400;
    }else{
    t=1200;}

    if(liuxiang==HIGH){
    for(n=9;n>=5;n--)
    {   
    digitalWrite(n,HIGH);
    delay(t);
    digitalWrite(n,LOW);
    }
    }
    else{
    for(n=5;n<=9;n++)
    {   
    digitalWrite(n,HIGH);
    delay(t);
    digitalWrite(n,LOW);
    }
    }
    }
    疑问:我把端口2定为高电压,并将其与开关和端口11相连,利用开关,改变流速,
    digitalWrite(2,HIGH);
    liusu=digitalRead(11);
    if(liusu==HIGH){
    t=400;
    }else{
    t=1200;}
    但无论如何,t都是等于1200,永远在else里,即端口11的电压达不到HIGH(我能确定不是因为开关,因为我用导线直接连过)
    恳请大家指点迷津。

    该用户从未签到

    发表于 2020-7-1 00:23 来自手机 | 显示全部楼层
    pinMode(2,INPUT);
    引脚2是输入


    我把端口2定为高电压,并将其与开关和端口11相连
    引脚2是输出

    那么,问题又来了,到底是输入,还是输出?

    该用户从未签到

    发表于 2020-7-1 00:19 | 显示全部楼层
    for(i=5;i<=11;i++)
    pinMode(i,OUTPUT);
    10和11引脚是输出


    liusu=digitalRead(11);
    liuxiang=digitalRead(10);
    10和11引脚是输入

    那么,问题来了,到底是输出,还是输入?
  • TA的每日心情
    郁闷
    2020-7-1 00:14
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2020-7-1 00:22 | 显示全部楼层

    感谢感谢,我一直以为是插线的问题,自己眼拙了,我现在试一下
  • TA的每日心情
    慵懒
    2020-7-4 06:30
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2020-7-2 07:58 | 显示全部楼层
    我覺得你對 I/O PORT 的使用有觀念上的問題,
    首先,ARDUINO 內定 I/O 作為輸入用,要用在
    輸出就要宣告為"OUTPUT"

    你說你將 2 輸出 HIGH(5V),可是你卻宣告它
    是輸入用,我記得宣告輸入且將它輸出 HIGH=
    輸入用並且 PULL HIGH,也就是說, 2 待命在
    輸入狀態並且開始檢知外面是沒事(HIGH)或
    有事(LOW)

    後來你宣告 10、11 為輸出用,然後又去讀它們
    的狀態是 HIGH/LOW? 既然是輸出用,你沒給
    digitalWrite(11,HIGH)之前,它的輸出就是 LOW,
    去讀取它的狀態當然永遠為 LOW,反而 2 經過
    開關接到 11 的話,開關 ON 時連帶 2 也一樣會被
    拉低(但2 被拉低你又沒做任何事...)

    整個看起來,就是你對 I/O 的使用有觀念上的問題 ^^"

    給你一個建議,去掉 2,宣告 10、11為輸入用且 PULL HIGH,
    流向/流速開關一端接 10/11,一端接地,這樣只要開關 OFF
    就是 HIGH,開關 ON 就是 LOW
    void setup()
    {
    // put your setup code here, to run once:
    pinMode(10,INPUT_PULLUP);
    pinMode(11,INPUT_PULLUP);
    for ( i=5; i<10; i++)
        pinMode( i, OUTPUT );
    }
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    求助,用l298n模块控制电机转速,老是无缘无故的转动怎么...
    求助,用l298n模块控制电
    代码如下:int state1=0; int state2=0; void setup() { pinMode(9,OUTPUT); pinMode(
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    绑定github账号,免费增加设备额度
    绑定github账号,免费增加
    免费增加blinker设备额度的方法: 1.登录点灯管理台( https://admin.diandeng.tech/
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表