0

在 Tinkercad 上完成的项目图片

我正在尝试为 arduino 制作秒表和计数器项目。除了代码,这接线正确吗?

上面的按钮是启动秒表,第二个是启动计数器的按钮(每按一次就增加一个),下面的按钮应该是重置它们中的任何一个。绿灯表示已选择秒表,蓝色表示已选择计数器。液晶显示器是为了清楚地显示一切。另外,学习编码的最佳方法是什么,需要多长时间?谢谢。

4

2 回答 2

1

这是根据您的要求的代码。我已经按照上述连接定义了引脚。计数器模式有分钟和秒,它不包含毫秒,因为我遇到了实现它的问题。如果你有任何方法,你可以建议我。计数器模式选择按钮与将用于递增计数器的按钮相同。

    
    #include <LiquidCrystal.h> 
    LiquidCrystal mylcd(7,6,5,4,3,2);
    
    int counter_sel=12,stopwatch_sel=11,reset1=10,stopwatch_led=9,counter_led=8;
    
    void setup() 
    {
        mylcd.begin(16,2);
        mylcd.setCursor(0,0);
        mylcd.print("Counter and ");
        mylcd.print("Stopwatch");
        delay(1000);
     
        pinMode(counter_sel,INPUT);
        pinMode(stopwatch_sel, INPUT);
        pinMode(reset1, INPUT);
        pinMode(counter_led,OUTPUT);
        pinMode(stopwatch_led, OUTPUT);
    }
    
    void loop() 
    {     int state1=digitalRead(counter_sel);
          int state2=digitalRead(stopwatch_sel);
          if (state1==0) {delay(300); counter();  } // call counter function
          else if (state2==0) {delay(300); stopwatch(); } // call stopwatch function
          
    }
    void counter()
    {     mylcd.clear();
          digitalWrite(counter_led,1);
          mylcd.setCursor(0,0);
          mylcd.print("Counter Mode :");
          short int i=0;
          while(1)
          {
            int rst=digitalRead(reset1);
              if (rst==0) { delay(300); break;}
            int state1=digitalRead(counter_sel);
            if (state1==0) { i++; delay(200);}
            mylcd.setCursor(0,1);
            mylcd.print(i);
          }
          digitalWrite(counter_led,0);
    }
    void stopwatch()
    {
          mylcd.clear();
          digitalWrite(stopwatch_led,1);
          long int ms=millis();
          byte sec=0, mins=0;
          mylcd.setCursor(0,0);
          mylcd.print("Stopwatch Mode : ");
          while(1)
          { 
            mylcd.setCursor(0,1);
            int state1=digitalRead(reset1);
            if (state1==0){delay(300); break; } 
              if (sec==59) {mins++; sec=0;}
            if ((millis()-ms)>1000) {sec++; ms=millis(); }
            
            mylcd.print(mins);
            mylcd.setCursor(3,1);
            mylcd.print(":");
            mylcd.setCursor(5,1);
            mylcd.print(sec);
            mylcd.print(":");
            //mylcd.print(millis()-ms);
         } 
           digitalWrite(stopwatch_led,0); 
    }
于 2021-06-20T04:02:12.450 回答
0

据我所知,考虑到您上面解释的内容,连接是正确的。但问题是你需要尽可能地说清楚,因为由于LCD连接中有交叉点,调试和解决连接问题会非常困难,因为你必须让它整洁。要学习编写这些东西,没有火箭科学,只需运用你的智慧,然后开始阅读书籍、博客、关于 arduino ide(太简单太容易使用)、c 编程和微控制器的文章,以及 youtube 视频是很好的来源学习编码,你应该有少量的c编程经验,仅此而已。

于 2021-06-17T07:35:27.607 回答