DIY曝光机程式出错,请大家帮忙抓虫
本帖最后由 A050705072000 于 2013-6-30 17:10 编辑最近在用ARDUINO做曝光机,但是测试程式时一直出错,想请大家抓一下原因
下面是我的想法,我在面包版测试时用了一个七段显示器(4格的),两个按钮,一个可变电阻,七段显示器显示时间,按钮一个绿色开始一个红色紧急停止,可变电阻调整时间
现在发现问题出在转可变电阻到一个量时两个按钮的脚会自己变成HIGH,很诡异...
然后有时按一个按钮另外一个也会通,试过把线拔掉还是这样...下面是我的代码: /******7_seg******/
int seg_pin = {2,3,4,5,6,7,8,9};
//a=,b=,c=,d=,e=,f=,g=,dp,=
int com_pin = {10,11,12,13};
//com1=,com2=,com3=,com4=
byte seven_seg = { {0,0,0,0,0,0,1}, //0
{1,0,0,1,1,1,1}, //1
{0,0,1,0,0,1,0}, //2
{0,0,0,0,1,1,0}, //3
{1,0,0,1,1,0,0}, //4
{0,1,0,0,1,0,0}, //5
{1,1,0,0,0,0,0}, //6
{0,0,0,1,1,1,1}, //7
{0,0,0,0,0,0,0}, //8
{0,0,0,1,1,0,0}, //9
{1,1,1,1,1,1,1}, //no
};
int delay_time = 5;//ms
int num = {10,10,10,0};
/******7_seg******/
int buttom1=A0;//red
int buttom2=A1;//green
int vr_pin=A2;
int relay=A3;
int MaxTime=1200; //s
int setuptime;//s
void setup(){
Serial.begin(9600);
pinMode(seg_pin,OUTPUT);
pinMode(seg_pin,OUTPUT);
pinMode(seg_pin,OUTPUT);
pinMode(seg_pin,OUTPUT);
pinMode(seg_pin,OUTPUT);
pinMode(seg_pin,OUTPUT);
pinMode(seg_pin,OUTPUT);
pinMode(seg_pin,OUTPUT);
pinMode(com_pin,OUTPUT);
pinMode(com_pin,OUTPUT);
pinMode(com_pin,OUTPUT);
pinMode(com_pin,OUTPUT);
pinMode(buttom1,INPUT);
pinMode(buttom2,INPUT);
pinMode(vr_pin,INPUT);
pinMode(relay,OUTPUT);
for(int i=0;i<4;i++){
digitalWrite(com_pin,HIGH);
}
delay(1500);
}
void loop(){/*
if(digitalRead(buttom2) == HIGH){
if(digitalRead(relay) == LOW){
digitalWrite(relay,HIGH);
setuptime = num*600+num*60+num*10+num;
START();
}
}*/
//找到上面那段出错,所以把他拉出来看看,结果发现它会自动变成1
Serial.print(digitalRead(buttom2));
Serial.print(",");
Serial.print(digitalRead(vr_pin));
Serial.print(",");
Serial.println(digitalRead(buttom1));
VR();
SEG_LOOP(num,num,num,num);
}
void START(){
do{
int time = millis();//ms
int nowtime = (millis() - time)/1000; //s
//Serial.println(setuptime);
if(nowtime == setuptime || digitalRead(buttom1) == HIGH){
STOP();
break;
}
SEG_LOOP(num,num,num,num);
}while(1);
}
void STOP(){
digitalWrite(relay,LOW);
}
void VR(){
int val = analogRead(vr_pin)/10;
int time = map(val,0,102,0,MaxTime);
num = (time/60)/10;
num = (time/60)-(((time/60)/10)*10);
num = (time%60)/10;
num = (time%60)-(((time%60)/10)*10);
if(num==0){num=10;}
if(num==0){if(num==10){num=10;}}
if(num==0){if(num==10){num=10;}}
}
void SEG_LOOP(int number1,int number2,int number3,int number4){
THOUSAND(number1);
delay(delay_time);
HUNDRED(number2);
delay(delay_time);
TEN(number3);
delay(delay_time);
BITS(number4);
delay(delay_time);
}
void BITS(int number){
int run = 0;
digitalWrite(com_pin,HIGH);
digitalWrite(com_pin,LOW);
digitalWrite(com_pin,LOW);
digitalWrite(com_pin,LOW);
(num==0 && num==10)? digitalWrite(seg_pin,LOW):digitalWrite(seg_pin,HIGH);
for(int i=0;i<7;i++){
digitalWrite(seg_pin,seven_seg);
}
}
void TEN(int number){
digitalWrite(com_pin,LOW);
digitalWrite(com_pin,HIGH);
digitalWrite(com_pin,LOW);
digitalWrite(com_pin,LOW);
digitalWrite(seg_pin,HIGH);
for(int i=0;i<7;i++){
digitalWrite(seg_pin,seven_seg);
}
}
void HUNDRED(int number){
digitalWrite(com_pin,LOW);
digitalWrite(com_pin,LOW);
digitalWrite(com_pin,HIGH);
digitalWrite(com_pin,LOW);
if(num==10){digitalWrite(seg_pin,HIGH);}else{digitalWrite(seg_pin,LOW);}
for(int i=0;i<7;i++){
digitalWrite(seg_pin,seven_seg);
}
}
void THOUSAND(int number){
digitalWrite(com_pin,LOW);
digitalWrite(com_pin,LOW);
digitalWrite(com_pin,LOW);
digitalWrite(com_pin,HIGH);
digitalWrite(seg_pin,HIGH);
for(int i=0;i<7;i++){
digitalWrite(seg_pin,seven_seg);
}
}麻烦各位帮我抓看看问题在哪,可变电阻换了两三个了一样会出现在个问题(10K,100K,2M) 电路有问题吗? 按键有上拉或下拉电阻吗?软件中按键好像没有防抖处理。 把两个按钮上拉后就好了......明明没插线出去ARDUINO版还是会一直跳真奇怪... 呵呵,端口设为输入端,在按钮没按时就等于开路状态,端口就会因为感应而发生变化,接个电阻就降低了端口阻抗,避免了感应.
页:
[1]