查看: 668|回復: 14
打印 上一主題 下一主題

[未解決] 求大神教下怎么重復實現這個while循環

[復制鏈接]
回帖獎勵 64 金幣 回復本帖可獲得 2 金幣獎勵! 每人限 1 次
  • TA的每日心情
    奮斗
    2020-1-6 09:46
  • 簽到天數: 123 天

    [LV.7]常住居民III

    跳轉到指定樓層
    樓主
    發表于 2019-10-26 19:42 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
    void loop()
    {
    int sensorValue = digitalRead(ASignal);
      Serial.print("soil exploration=");
      Serial.println(sensorValue);

    if(sensorValue==0)
    {

    while(y<70)
    {
       digitalWrite(p1, HIGH);
            digitalWrite(p2, LOW);
            digitalWrite(p3, HIGH);
            digitalWrite(p4, LOW);

            digitalWrite(p5, HIGH);
            digitalWrite(p6, LOW);
            digitalWrite(p7, HIGH);
            digitalWrite(p8, LOW);
         delay(2);
            digitalWrite(p1, LOW);
            digitalWrite(p2, HIGH);
            digitalWrite(p3, HIGH);
            digitalWrite(p4, LOW);

            digitalWrite(p5, LOW);
            digitalWrite(p6, HIGH);
            digitalWrite(p7, HIGH);
            digitalWrite(p8, LOW);
          delay(2);
            digitalWrite(p1, LOW);
            digitalWrite(p2, HIGH);
            digitalWrite(p3, LOW);
            digitalWrite(p4, HIGH);


    digitalWrite(p5, LOW);
            digitalWrite(p6, HIGH);
            digitalWrite(p7, LOW);
            digitalWrite(p8, HIGH);
       delay(2);
            digitalWrite(p1, HIGH);
            digitalWrite(p2, LOW);
            digitalWrite(p3, LOW);
            digitalWrite(p4, HIGH);

            digitalWrite(p5, HIGH);
            digitalWrite(p6, LOW);
            digitalWrite(p7, LOW);
            digitalWrite(p8, HIGH);
             delay(2);
             y++;

    }


    }

    if(sensorValue==1)
    {

      while(x<70)
    {
       digitalWrite(p3, HIGH);
            digitalWrite(p4, LOW);
            digitalWrite(p1, HIGH);
            digitalWrite(p2, LOW);

            digitalWrite(p7, HIGH);
            digitalWrite(p8, LOW);
            digitalWrite(p5, HIGH);
            digitalWrite(p6, LOW);
         delay(2);
            digitalWrite(p3, LOW);
            digitalWrite(p4, HIGH);
            digitalWrite(p1, HIGH);
            digitalWrite(p2, LOW);

            digitalWrite(p7, LOW);
            digitalWrite(p8, HIGH);
            digitalWrite(p5, HIGH);
            digitalWrite(p6, LOW);
          delay(2);
            digitalWrite(p3, LOW);
            digitalWrite(p4, HIGH);
            digitalWrite(p1, LOW);
            digitalWrite(p2, HIGH);


    digitalWrite(p7, LOW);
            digitalWrite(p8, HIGH);
            digitalWrite(p5, LOW);
            digitalWrite(p6, HIGH);
       delay(2);
            digitalWrite(p3, HIGH);
            digitalWrite(p4, LOW);
            digitalWrite(p1, LOW);
            digitalWrite(p2, HIGH);

             digitalWrite(p7, HIGH);
            digitalWrite(p8, LOW);
            digitalWrite(p5, LOW);
            digitalWrite(p6, HIGH);
             delay(2);
             x++;
       
    }

    }
    }
    我想的是sensorValue是1的時候執行x循環是0的時候執行y循環,但是我發現只能執行一次x和y循環,如何重復根據sensorValue1,0狀態的不同時候多次執行的x,y循環,而不是一次

  • TA的每日心情
    開心
    2020-1-6 11:03
  • 簽到天數: 430 天

    [LV.9]以壇為家II

    沙發
    發表于 2019-10-26 20:46 | 只看該作者

    回帖獎勵 +2 金幣

    本帖最后由 lwq1947 于 2019-10-26 20:50 編輯

    在void loop()中if(sensorValue==0)之前增加int x=0;int y=0;不然的話x,y增到70后就不變了.
  • TA的每日心情
    奮斗
    2020-1-6 09:46
  • 簽到天數: 123 天

    [LV.7]常住居民III

    板凳
     樓主| 發表于 2019-10-26 23:45 | 只看該作者
    lwq1947 發表于 2019-10-26 20:46
    在void loop()中if(sensorValue==0)之前增加int x=0;int y=0;不然的話x,y增到70后就不變了. ...

    這樣會一直循環,我希望的是就跟有個開關似的,sensorvalue=0循環70次停止,然后就停止,等sensorvalue再次=0的時候,又繼續循環70,而不是一直的循環
  • TA的每日心情
    開心
    2020-1-6 11:03
  • 簽到天數: 430 天

    [LV.9]以壇為家II

    地板
    發表于 2019-10-27 05:55 | 只看該作者
    本帖最后由 lwq1947 于 2019-10-27 06:12 編輯

    在y++;語句下添加x=0;在x++;語句下添加y=0;
  • TA的每日心情
    開心
    2020-1-7 01:06
  • 簽到天數: 1006 天

    [LV.10]以壇為家III

    5#
    發表于 2019-10-27 13:30 | 只看該作者

    回帖獎勵 +2 金幣

    a976764010 發表于 2019-10-26 23:45
    這樣會一直循環,我希望的是就跟有個開關似的,sensorvalue=0循環70次停止,然后就停止,等sensorvalue再 ...

    除了自己編程識別sensorvalue短時間內有無變化外,最簡單的方法就是利用中斷上升沿和下降沿觸發你所需的子程序
  • TA的每日心情
    慵懶
    2019-11-6 08:30
  • 簽到天數: 4 天

    [LV.2]偶爾看看I

    6#
    發表于 2019-10-28 15:51 | 只看該作者

    回帖獎勵 +2 金幣

    void loop()
    {
    int sensorValue = digitalRead(ASignal);
      Serial.print("soil exploration=");
      Serial.println(sensorValue);

    if(sensorValue==0)
    {
    x=0;
    while(y<70)
    {
       digitalWrite(p1, HIGH);
            digitalWrite(p2, LOW);
            digitalWrite(p3, HIGH);
            digitalWrite(p4, LOW);

            digitalWrite(p5, HIGH);
            digitalWrite(p6, LOW);
            digitalWrite(p7, HIGH);
            digitalWrite(p8, LOW);
         delay(2);
            digitalWrite(p1, LOW);
            digitalWrite(p2, HIGH);
            digitalWrite(p3, HIGH);
            digitalWrite(p4, LOW);

            digitalWrite(p5, LOW);
            digitalWrite(p6, HIGH);
            digitalWrite(p7, HIGH);
            digitalWrite(p8, LOW);
          delay(2);
            digitalWrite(p1, LOW);
            digitalWrite(p2, HIGH);
            digitalWrite(p3, LOW);
            digitalWrite(p4, HIGH);


    digitalWrite(p5, LOW);
            digitalWrite(p6, HIGH);
            digitalWrite(p7, LOW);
            digitalWrite(p8, HIGH);
       delay(2);
            digitalWrite(p1, HIGH);
            digitalWrite(p2, LOW);
            digitalWrite(p3, LOW);
            digitalWrite(p4, HIGH);

            digitalWrite(p5, HIGH);
            digitalWrite(p6, LOW);
            digitalWrite(p7, LOW);
            digitalWrite(p8, HIGH);
             delay(2);
             y++;

    }


    }

    if(sensorValue==1)
    {
    y=0;
      while(x<70)
    {
       digitalWrite(p3, HIGH);
            digitalWrite(p4, LOW);
            digitalWrite(p1, HIGH);
            digitalWrite(p2, LOW);

            digitalWrite(p7, HIGH);
            digitalWrite(p8, LOW);
            digitalWrite(p5, HIGH);
            digitalWrite(p6, LOW);
         delay(2);
            digitalWrite(p3, LOW);
            digitalWrite(p4, HIGH);
            digitalWrite(p1, HIGH);
            digitalWrite(p2, LOW);

            digitalWrite(p7, LOW);
            digitalWrite(p8, HIGH);
            digitalWrite(p5, HIGH);
            digitalWrite(p6, LOW);
          delay(2);
            digitalWrite(p3, LOW);
            digitalWrite(p4, HIGH);
            digitalWrite(p1, LOW);
            digitalWrite(p2, HIGH);


    digitalWrite(p7, LOW);
            digitalWrite(p8, HIGH);
            digitalWrite(p5, LOW);
            digitalWrite(p6, HIGH);
       delay(2);
            digitalWrite(p3, HIGH);
            digitalWrite(p4, LOW);
            digitalWrite(p1, LOW);
            digitalWrite(p2, HIGH);

             digitalWrite(p7, HIGH);
            digitalWrite(p8, LOW);
            digitalWrite(p5, LOW);
            digitalWrite(p6, HIGH);
             delay(2);
             x++;
    }

    }
    }
    換這個程序試試應該是你想要的

  • TA的每日心情
    奮斗
    2020-1-6 09:46
  • 簽到天數: 123 天

    [LV.7]常住居民III

    7#
     樓主| 發表于 2019-10-29 16:55 | 只看該作者
    張朝飛 發表于 2019-10-28 15:51
    void loop()
    {
    int sensorValue = digitalRead(ASignal);

    我試過了這樣雖然可以重復觸發,但是不會70停止,觸發了就會一直轉下去
  • TA的每日心情
    開心
    2020-1-6 11:03
  • 簽到天數: 430 天

    [LV.9]以壇為家II

    8#
    發表于 2019-10-29 18:48 | 只看該作者
    本帖最后由 lwq1947 于 2019-10-29 18:49 編輯

    觸發后若是x和y都在轉的話就說明sensorvalue不穩定在0,1之間跳變.否則一定會70停止,
  • TA的每日心情
    奮斗
    2020-1-6 09:46
  • 簽到天數: 123 天

    [LV.7]常住居民III

    9#
     樓主| 發表于 2019-10-29 20:14 | 只看該作者
    lwq1947 發表于 2019-10-29 18:48
    觸發后若是x和y都在轉的話就說明sensorvalue不穩定在0,1之間跳變.否則一定會70停止, ...

    不是x和y都轉,是觸發x轉之后會一直轉,而不是轉70圈停止,我希望的是每次觸發轉到70就停止
  • TA的每日心情
    開心
    2020-1-6 11:03
  • 簽到天數: 430 天

    [LV.9]以壇為家II

    10#
    發表于 2019-10-29 22:54 | 只看該作者
    本帖最后由 lwq1947 于 2019-10-29 22:57 編輯

      我編了一個示范程序一個開關接在5口且接10K上拉電阻來替代 sensorValue,  arduino上電工作完全能達到你的要求,請對照你的程序找出問題所在.
       int x=0;
       int y=0;
    void setup() {
       int x;
       int y;
       pinMode(5,INPUT);
       pinMode(8,OUTPUT);
       pinMode(9,OUTPUT);
        }
    void loop() {
    int sensorValue = digitalRead(5);
      if(sensorValue==LOW)
    {

    while(y<70) {
    digitalWrite(8, HIGH);
    delay(100);
    digitalWrite(8, LOW);
    delay(100);
    y++;
    x=0;
    }
    }
      if(sensorValue==HIGH)
    {
      while(x<70) {
    digitalWrite(9, HIGH);
    delay(100);
    digitalWrite(9, LOW);
    delay(100);
    x++;
    y=0;
    }
    }
    }
    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    熱門推薦

    [限時福利]5分鐘帶你快速了解新一代開發板:M5STACK
    [限時福利]5分鐘帶你快速
    一、什么是M5Stack M5Stack是一種模塊化、可堆疊擴展的開發板,每個模塊
    【Arduino】168種傳感器系列實驗(140)---KY-027魔術光環模塊
    【Arduino】168種傳感器系
    37款傳感器與模塊的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是
    【Arduino】108種傳感器系列實驗(39)---18B20溫度傳感器模塊
    【Arduino】108種傳感器系
    37款傳感器與模塊的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是
    vscode 編譯Arduino 很慢
    vscode 編譯Arduino 很慢
    用 vscode 編譯 Arduino 程序 很慢,然后提示這個警告,請問有什么方法可以加快編譯速
    終于完成了客廳燈的小愛控制,更新于12月29日,更新完成
    終于完成了客廳燈的小愛控
    完成了小愛同學控制的客廳燈,用的是esp8266,附上視頻 http://v.youku.com/v_show/id
    Copyright   ©2015-2016  Arduino中文社區  Powered by©Discuz!   
    快速回復 返回頂部 返回列表
    3d每天组六27个号必中