尝试用 arduino 构建 counter/stopwatch。接线正确吗?
Trying to build a counter/stopwatch with arduino. is this wired correctly?
我正在尝试为 arduino 制作秒表和计数器项目。除了代码,这是否正确连接?
最上面的按钮是启动秒表的按钮,第二个是启动计数器的按钮(每按一次加一),底部的按钮应该是重置其中任何一个。绿灯表示已选择秒表,蓝色表示已选择计数器。液晶显示器是显示一切obviusly。另外,学习编写此代码的最佳方法是什么,需要多长时间?谢谢
据我所见,缺点ide如您上面所解释的那样,连接是正确的。但问题是你要尽可能说清楚,因为LCD连接有交叉点,调试和解决连接问题会非常困难,所以你必须把它弄清楚。学习编写这些东西没有火箭科学,只需运用你的智慧,开始阅读关于 arduino ide(太简单也太有用)的书籍、博客、文章、c 编程和微控制器,以及 youtube videos 是学习编码的好资源,你应该有一些 c 编程经验,仅此而已。
这是您要求的代码。我已经按照上面的连接定义了引脚。计数器模式有分钟和秒,它不包含毫秒,因为我在实现它时遇到问题。如果你有任何办法,你可以建议我。计数器模式选择按钮与用于递增计数器的按钮相同。
#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);
}
我正在尝试为 arduino 制作秒表和计数器项目。除了代码,这是否正确连接?
最上面的按钮是启动秒表的按钮,第二个是启动计数器的按钮(每按一次加一),底部的按钮应该是重置其中任何一个。绿灯表示已选择秒表,蓝色表示已选择计数器。液晶显示器是显示一切obviusly。另外,学习编写此代码的最佳方法是什么,需要多长时间?谢谢
据我所见,缺点ide如您上面所解释的那样,连接是正确的。但问题是你要尽可能说清楚,因为LCD连接有交叉点,调试和解决连接问题会非常困难,所以你必须把它弄清楚。学习编写这些东西没有火箭科学,只需运用你的智慧,开始阅读关于 arduino ide(太简单也太有用)的书籍、博客、文章、c 编程和微控制器,以及 youtube videos 是学习编码的好资源,你应该有一些 c 编程经验,仅此而已。
这是您要求的代码。我已经按照上面的连接定义了引脚。计数器模式有分钟和秒,它不包含毫秒,因为我在实现它时遇到问题。如果你有任何办法,你可以建议我。计数器模式选择按钮与用于递增计数器的按钮相同。
#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);
}