|
|
本帖最后由 A050705072000 于 2013-6-30 17:10 编辑
最近在用ARDUINO做曝光机,但是测试程式时一直出错,想请大家抓一下原因
下面是我的想法,我在面包版测试时用了一个七段显示器(4格的),两个按钮,一个可变电阻,七段显示器显示时间,按钮一个绿色开始一个红色紧急停止,可变电阻调整时间
现在发现问题出在转可变电阻到一个量时两个按钮的脚会自己变成HIGH,很诡异...
然后有时按一个按钮另外一个也会通,试过把线拔掉还是这样...下面是我的代码:- /******7_seg******/
- int seg_pin[8] = {2,3,4,5,6,7,8,9};
- //a=[0],b=[1],c=[2],d=[3],e=[4],f=[5],g=[6],dp,=[7]
- int com_pin[4] = {10,11,12,13};
- //com1=[0],com2=[1],com3=[2],com4=[3]
- byte seven_seg[11][7] = { {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[4] = {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[0],OUTPUT);
- pinMode(seg_pin[1],OUTPUT);
- pinMode(seg_pin[2],OUTPUT);
- pinMode(seg_pin[3],OUTPUT);
- pinMode(seg_pin[4],OUTPUT);
- pinMode(seg_pin[5],OUTPUT);
- pinMode(seg_pin[6],OUTPUT);
- pinMode(seg_pin[7],OUTPUT);
- pinMode(com_pin[0],OUTPUT);
- pinMode(com_pin[1],OUTPUT);
- pinMode(com_pin[2],OUTPUT);
- pinMode(com_pin[3],OUTPUT);
- pinMode(buttom1,INPUT);
- pinMode(buttom2,INPUT);
- pinMode(vr_pin,INPUT);
- pinMode(relay,OUTPUT);
- for(int i=0;i<4;i++){
- digitalWrite(com_pin[i],HIGH);
- }
- delay(1500);
- }
- void loop(){/*
- if(digitalRead(buttom2) == HIGH){
- if(digitalRead(relay) == LOW){
- digitalWrite(relay,HIGH);
- setuptime = num[0]*600+num[1]*60+num[2]*10+num[3];
- START();
- }
- }*/
- //找到上面那段出错,所以把他拉出来看看,结果发现它会自动变成1
- Serial.print(digitalRead(buttom2));
- Serial.print(",");
- Serial.print(digitalRead(vr_pin));
- Serial.print(",");
- Serial.println(digitalRead(buttom1));
- VR();
- SEG_LOOP(num[0],num[1],num[2],num[3]);
- }
- 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[0],num[1],num[2],num[3]);
- }while(1);
- }
- void STOP(){
- digitalWrite(relay,LOW);
- }
- void VR(){
- int val = analogRead(vr_pin)/10;
- int time = map(val,0,102,0,MaxTime);
- num[0] = (time/60)/10;
- num[1] = (time/60)-(((time/60)/10)*10);
- num[2] = (time%60)/10;
- num[3] = (time%60)-(((time%60)/10)*10);
- if(num[0]==0){num[0]=10;}
- if(num[1]==0){if(num[0]==10){num[1]=10;}}
- if(num[2]==0){if(num[1]==10){num[2]=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[0],HIGH);
- digitalWrite(com_pin[1],LOW);
- digitalWrite(com_pin[2],LOW);
- digitalWrite(com_pin[3],LOW);
- (num[3]==0 && num[2]==10)? digitalWrite(seg_pin[7],LOW):digitalWrite(seg_pin[7],HIGH);
- for(int i=0;i<7;i++){
- digitalWrite(seg_pin[i],seven_seg[number][i]);
- }
- }
- void TEN(int number){
- digitalWrite(com_pin[0],LOW);
- digitalWrite(com_pin[1],HIGH);
- digitalWrite(com_pin[2],LOW);
- digitalWrite(com_pin[3],LOW);
- digitalWrite(seg_pin[7],HIGH);
- for(int i=0;i<7;i++){
- digitalWrite(seg_pin[i],seven_seg[number][i]);
- }
- }
- void HUNDRED(int number){
- digitalWrite(com_pin[0],LOW);
- digitalWrite(com_pin[1],LOW);
- digitalWrite(com_pin[2],HIGH);
- digitalWrite(com_pin[3],LOW);
- if(num[1]==10){digitalWrite(seg_pin[7],HIGH);}else{digitalWrite(seg_pin[7],LOW);}
- for(int i=0;i<7;i++){
- digitalWrite(seg_pin[i],seven_seg[number][i]);
- }
- }
- void THOUSAND(int number){
- digitalWrite(com_pin[0],LOW);
- digitalWrite(com_pin[1],LOW);
- digitalWrite(com_pin[2],LOW);
- digitalWrite(com_pin[3],HIGH);
- digitalWrite(seg_pin[7],HIGH);
- for(int i=0;i<7;i++){
- digitalWrite(seg_pin[i],seven_seg[number][i]);
- }
- }
复制代码 麻烦各位帮我抓看看问题在哪,可变电阻换了两三个了一样会出现在个问题(10K,100K,2M) |
|