极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17069|回复: 12

哪位大侠把程序给我简化简化。

[复制链接]
发表于 2015-8-22 22:54:09 | 显示全部楼层 |阅读模式
int x=0;
void setup() {
Serial.begin(9600);
  Serial.flush();
  pinMode(4,INPUT);
}

void loop()
{
char A1[8]={0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x01};//1
char A2[8]={0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x02};//2
char A3[8]={0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x03};//3
char A4[8]={0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x04};//4
char A5[8]={0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x05};//5
char A6[8]={0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x06};//6
char A7[8]={0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x07};//7
char A8[8]={0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x08};//8
char A9[8]={0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x09};//9
char A10[8]={0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x0A};//10
  if(digitalRead(4)==LOW)
          {  
             delay(500);
              x++;
            if(x==1)
            { Serial.write(&A1[0],8);     }
            if(x==2)
             {Serial.write(&A2[0],8);      }
            if(x==3)
            { Serial.write(&A3[0],8);     }
           if(x==4)
           {Serial.write(&A4[0],8);      }
            if(x==5)
            { Serial.write(&A5[0],8);     }
            if(x==6)
           {Serial.write(&A6[0],8);      }
             if(x==7)
           { Serial.write(&A7[0],8);     }
           if(x==8)
           { Serial.write(&A8[0],8);     }
           if(x==9)
            { Serial.write(&A9[0],8);     }
            if(x==10)
             { Serial.write(&A10[0],8);x=0;    }
   }  
}

怎么才能显示999.大侠赐教。






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-8-23 07:17:52 | 显示全部楼层
看你标题就不会有人给你做这事儿
回复 支持 反对

使用道具 举报

发表于 2015-8-23 15:07:29 | 显示全部楼层
给钱就做
回复 支持 反对

使用道具 举报

发表于 2015-8-24 11:12:56 | 显示全部楼层
二维数组,然后通过下标,就不需要这么多if..else了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-24 21:47:12 | 显示全部楼层
whtech 发表于 2015-8-24 11:12
二维数组,然后通过下标,就不需要这么多if..else了

小弟技术不行,也是刚刚入门。给个样例
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-24 21:48:21 | 显示全部楼层
maxims 发表于 2015-8-23 07:17
看你标题就不会有人给你做这事儿

怎么能简化。给个思路
回复 支持 反对

使用道具 举报

发表于 2015-8-24 23:25:44 | 显示全部楼层
乐乐2365 发表于 2015-8-24 21:48
怎么能简化。给个思路

霸气测漏,没人会理你{:3_42:}
回复 支持 反对

使用道具 举报

发表于 2015-8-25 10:08:31 | 显示全部楼层
不需要简化了吧
回复 支持 反对

使用道具 举报

发表于 2015-8-25 12:00:14 | 显示全部楼层
拿去!!!!
i
nt x=0;//初使化加数变量
int addKey =4;//定义按键为第4引脚
int buttonState = 0; //初使化按键暂存值,为了和addKey类型保持一致用int;
/*数码管用二维数组表达看起来简洁一些*/
/*
PS:初使化数组没必要放loop里面,楼主可能需要搞清楚step()和loop()的工作方式*/
unsigned char showNumber[10][8] ={
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x01},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x02},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x03},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x04},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x05},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x06},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x07},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x08},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x09},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x0A}};

void setup() {
Serial.begin(9600);//串口波特率设置
Serial.flush();//初使化串口
pinMode(addKey,INPUT);//初使化物理按键输入
}

void loop()
{
buttonState = digitalRead(addKey);//将第4脚的电平赋予按键变量
if (buttonState == LOW){     
delay(10);
if (buttonState == LOW)//机械式延时去抖
x++;//按键后变量加1;
while(!digitalRead(addKey));//等待松开按键结束,按键弹起算一次有效值
}

switch(x)
{
case 1:
Serial.write(&showNumber[0][0],8);
break;
case 2:
Serial.write(&showNumber[1][0],8);
break;
case 3:
Serial.write(&showNumber[2][0],8);
break;
case 4:
Serial.write(&showNumber[3][0],8);
break;
case 5:
Serial.write(&showNumber[4][0],8);
break;
case 6:
Serial.write(&showNumber[5][0],8);
break;
case 7:
Serial.write(&showNumber[6][0],8);
break;
case 8:
Serial.write(&showNumber[7][0],8);
break;
case 9:
Serial.write(&showNumber[8][0],8);
break;
case 0:
Serial.write(&showNumber[9][0],8);
x=0;
break;
default:
break;
}
}

回复 支持 反对

使用道具 举报

发表于 2015-8-25 18:04:20 | 显示全部楼层
乐乐2365 发表于 2015-8-24 21:47
小弟技术不行,也是刚刚入门。给个样例

9楼 + 回复就可以了
回复 支持 反对

使用道具 举报

发表于 2015-9-7 21:46:29 | 显示全部楼层
邓维安 发表于 2015-8-25 12:00
拿去!!!!
i
nt x=0;//初使化加数变量

为什么添加这个程序上边的对比程序不管用了


else
  {
if (buttonState == LOW)
  {     
   delay(10);
    if (buttonState == LOW)//机械式延时去抖
    j++;//按键后变量加1;
    while(!digitalRead(addKey));//等待松开按键结束,按键弹起算一次有效值
    }


液晶屏串口程序
int incomingByte =  0;
int ledpin = 8; //定义数字接口
unsigned char HEXFD1[9] = {0xA5, 0x5A, 0x06, 0x83, 0x00,0x00, 0x01,0x00, 0x01};
unsigned char HEXFD2[9] = {0xA5, 0x5A, 0x06, 0x83, 0x00,0x00, 0x01,0x00, 0x02};
unsigned char HEXFD3[9] = {0xA5, 0x5A, 0x06, 0x83, 0x00,0x00, 0x01,0x00, 0x03};
unsigned char HEXFD4[9] = {0xA5, 0x5A, 0x06, 0x83, 0x00,0x00, 0x01,0x00, 0x04};
unsigned char HEXFD5[9] = {0xA5, 0x5A, 0x06, 0x83, 0x00,0x00, 0x01,0x00, 0x05};
unsigned char HEXFD6[9] = {0xA5, 0x5A, 0x06, 0x83, 0x00,0x00, 0x01,0x00, 0x06};
unsigned char HEXFD7[9] = {0xA5, 0x5A, 0x06, 0x83, 0x00,0x00, 0x01,0x00, 0x07};
unsigned char HEXFD8[9] = {0xA5, 0x5A, 0x06, 0x83, 0x00,0x00, 0x01,0x00, 0x08};
unsigned char HEXFD9[9] = {0xA5, 0x5A, 0x06, 0x83, 0x00,0x00, 0x01,0x00, 0x09};
unsigned char HEXFD10[9] = {0xA5, 0x5A, 0x06, 0x83, 0x00,0x00, 0x01,0x00, 0x0A};
int j=0;//初使化加数变量
int addKey =4;//定义按键为第4引脚
int buttonState = 0; //初使化按键暂存值,为了和addKey类型保持一致用int;
unsigned char showNumber[10][8] ={
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x01},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x02},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x03},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x04},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x05},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x06},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x07},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x08},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x09},
{0xA5,0x5A,0x05,0x82,0x00,0x10,0x00,0x0A}};
int x = 0;
int CheckSumX1 = 0;
int CheckSumX2 = 0;
int CheckSumX3 = 0;
int CheckSumX4 = 0;
int CheckSumX5 = 0;
int CheckSumX6 = 0;
int CheckSumX7 = 0;
int CheckSumX8 = 0;
int CheckSumX9 = 0;
int CheckSumX10 = 0;
void setup()
{
  Serial.begin(9600);
  pinMode(ledpin, OUTPUT);
  pinMode(addKey,INPUT);
}

void loop()
{
  // Serial.write(hexdata,7);
   buttonState = digitalRead(addKey);//
  if (Serial.available() > 0)
  {
    incomingByte = Serial.read();
    Serial.print(incomingByte, HEX);

    if (HEXFD1[x] == incomingByte) {
      CheckSumX1++;
    }
    if (HEXFD2[x] == incomingByte) {
      CheckSumX2++;
    }
     if (HEXFD3[x] == incomingByte) {
      CheckSumX3++;
    }
    if (HEXFD4[x] == incomingByte) {
      CheckSumX4++;
    }
     if (HEXFD5[x] == incomingByte) {
      CheckSumX5++;
    }
    if (HEXFD6[x] == incomingByte) {
      CheckSumX6++;
    }
     if (HEXFD7[x] == incomingByte) {
      CheckSumX7++;
    }
    if (HEXFD8[x] == incomingByte) {
      CheckSumX8++;
    }
     if (HEXFD9[x] == incomingByte) {
      CheckSumX9++;
    }
    if (HEXFD10[x] == incomingByte) {
      CheckSumX10++;
    }
   
   
   
    x++;
    if (x == 9) {
      if (CheckSumX5 == 9) {
        digitalWrite(ledpin, HIGH); //点亮数字13 口LED。
        delay(5000);
      }
      if (CheckSumX7 == 9) {
        digitalWrite(ledpin, LOW); //熄灭数字13 口LED
        delay(5000);
      }
      x = 0;
      CheckSumX5 = 0;
      CheckSumX7 = 0;
    }
  }
  else
  {
if (buttonState == LOW)
  {     
   delay(10);
    if (buttonState == LOW)//机械式延时去抖
    j++;//按键后变量加1;
    while(!digitalRead(addKey));//等待松开按键结束,按键弹起算一次有效值
    }
      switch(j)
{
case 1:
Serial.write(&showNumber[0][0],8);
break;
case 2:
Serial.write(&showNumber[1][0],8);
break;
case 3:
Serial.write(&showNumber[2][0],8);
break;
case 4:
Serial.write(&showNumber[3][0],8);
break;
case 5:
Serial.write(&showNumber[4][0],8);
break;
case 6:
Serial.write(&showNumber[5][0],8);
break;
case 7:
Serial.write(&showNumber[6][0],8);
break;
case 8:
Serial.write(&showNumber[7][0],8);
break;
case 9:
Serial.write(&showNumber[8][0],8);
break;
case 10:
Serial.write(&showNumber[9][0],8);
j=0;
break;
default:
break;

}
  }
}
   
回复 支持 反对

使用道具 举报

发表于 2015-9-7 22:23:14 | 显示全部楼层
首先,你什么都不要做,直接把这两行加到串口,下载到arduino看一下串口输出的是什么值?你再去比较你想跟哪个变量做比较的值( if (HEXFD7[x] == incomingByte) ),看一样吗?
incomingByte = Serial.read();
Serial.print(incomingByte, HEX);
回复 支持 反对

使用道具 举报

发表于 2015-9-8 07:59:39 | 显示全部楼层
本帖最后由 李超然2365 于 2015-9-8 08:17 编辑

比较返回程序没有问题有单独测试。就是加上你给我的这套程序。上边的比较程序好像不工作了。LED没有反应





这是原程序我改了改没有问题。把你给我那个程序拼到一块。他这个就没有反应了。你那个能正常工作。什么原因大侠。
int incomingByte =  0;
int ledpin = 8; //定义数字接口13
unsigned char hexdata[7] = {0xA5, 0x5A, 0x04, 0x83, 0x10, 0x00, 0x01};
unsigned char HEXHEX[9] = {0xA5, 0x5A, 0x08, 0x83, 0x10, 0x01, 0x01, 0x4E, 0x2B};
unsigned char HEXFDS[9] = {0xA5, 0x5A, 0x08, 0x83, 0x10, 0x01, 0x00, 0x8F, 0xEB};
int x = 0;
int CheckSumX = 0;
int CheckSumC = 0;

void setup()
{
  Serial.begin(9600);
  pinMode(ledpin, OUTPUT);
}

void loop()
{
  // Serial.write(hexdata,7);
  // delay(500);
  if (Serial.available() > 0)
  {
    incomingByte = Serial.read();
    Serial.print(incomingByte, HEX);

    if (HEXHEX[x] == incomingByte) {
      CheckSumX++;
    }
    if (HEXFDS[x] == incomingByte) {
      CheckSumC++;
    }
    x++;
    if (x == 9) {
      if (CheckSumX == 9) {
        digitalWrite(ledpin, HIGH); //点亮数字13 口LED。
        delay(500);
      }
      if (CheckSumC == 9) {
        digitalWrite(ledpin, LOW); //熄灭数字13 口LED
        delay(500);
      }
      x = 0;
      CheckSumX = 0;
      CheckSumC = 0;
    }
  }
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 05:42 , Processed in 0.049548 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表