首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能用4箱以上的开关吗?

我能用4箱以上的开关吗?
EN

Stack Overflow用户
提问于 2021-12-24 09:08:37
回答 1查看 113关注 0票数 -3

我正在用Arduino mega 2560编写测试夹具的应用程序,它是基于菜单的程序,我使用的是开关箱,到目前为止我有6种情况,直到4种情况代码正常工作,一旦我进入第5选项或尝试从第5代码访问用例是从开关出来的。我试过用字符和整数变量作为标签,我在第1和第5处复制了第5大小写代码,在第1次中运行良好,我想强调的是,在第5种情况下,语句没有任何问题,这与我可以使用的情况数有关,基本上,每当我想转到第5种情况时,或者在第4种程序脱离开关之后,任何情况下都没有问题。有人能简单介绍一下吗?为了更好的理解,我正在添加串行终端的片段.感谢你的评论和回答

代码语言:javascript
复制
  #include<SPI.h>
//define the SPI and other pins
//SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). for Arduino Mega 2560
#define DATAOUT     51   //mosi
#define DATAIN      50   //miso
#define SPICLOCK    52   //sck
#define TXDSASS     53   //ss
const int RXDSA1SS  =  49;     // to make other digital i/o pins as a SS for multiple SPIs
const int RXDSA2SS  =  48;     // to make other digital i/o pins as a SS for multiple SPIs
const int BPFSS  =  47;       // to make other digital i/o pins as a SS for multiple SPIs
const int POTSS  =  46;       // to make other digital i/o pins as a SS for multiple SPIs

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  pinMode(DATAOUT,OUTPUT); // to declair the pinMode
  pinMode(DATAIN,INPUT);
  pinMode(SPICLOCK,OUTPUT);
  pinMode(TXDSASS,OUTPUT);
  pinMode(RXDSA1SS,OUTPUT);
  pinMode(RXDSA2SS,OUTPUT);
  pinMode(BPFSS,OUTPUT);
  pinMode(POTSS,OUTPUT);
  
  Serial.println("***Test Jig by Arduino Mega 2560 Welcomes you***");
  
SPI.begin();
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("*************Menu*************");
  Serial.println("1.Enter 1 for Tx_DSA");
  Serial.println("2.Enter 2 for Rx_DSA_1");
  Serial.println("3.Enter 3 for Rx_DSA_2");
  Serial.println("4.Enter 4 for TunableBPF");
  Serial.println("5.Enter 5 for Digital TrimPOT");
  //Serial.println("4.Enter 0 to Exit");

  while(Serial.available() == 0) {} //wait till user provide input on serial 
  if(Serial.available())
   {
      int UserInput = Serial.parseInt();
      Serial.println(UserInput);
      switch(UserInput)
      {
      case 1:   //**********Tx_DSA code**************//
             int choice1; 
             Serial.println("Welcome to Tx_DSA");
             do{          
             Serial.println("Enter Tx Attenuation in dB: ");
             while(Serial.available() == 0) {}//wait till user provide input on serial
             float Attn;
             Attn=Serial.parseFloat();
             Serial.print("Entered Tx Attenuation is: ");
             Serial.println(Attn);
             byte AttnToDSA;
             AttnToDSA = DataToSendDSA(Attn);
             Serial.print("DSA resistor to be set in Decimal: "); 
             Serial.println(AttnToDSA);
             //AttnToDSA = AttnToDSA<<2;
             SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
             digitalWrite(TXDSASS,LOW);
             SPI.transfer(AttnToDSA);
             digitalWrite(TXDSASS,HIGH);
             digitalWrite(TXDSASS,LOW);
             Serial.println("Enter 1 for setting Tx_DSA Attenuation");
             Serial.println("Enter 0 for Exit from Tx_DSA");
             while(Serial.available() == 0) {}//wait till user provide input on serial
             choice1 = Serial.parseInt();
             //Serial.println(choice);
             }while(choice1==1);
             break;
      case 2:  //**********Rx_DSA_1 code**************//
             int choice2; 
             Serial.println("Welcome to Rx_DSA_1");
             do{          
             Serial.println("Enter Rx_1 Attenuation in dB: ");
             while(Serial.available() == 0) {}//wait till user provide input on serial
             float Attn;
             Attn=Serial.parseFloat();
             Serial.print("Entered Rx_1 Attenuation is: ");
             Serial.println(Attn);
             byte AttnToDSA;
             AttnToDSA = DataToSendDSA(Attn);
             Serial.print("DSA resistor to be set in Decimal: "); 
             Serial.println(AttnToDSA);
             //AttnToDSA = AttnToDSA<<2;
             SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
             digitalWrite(RXDSA1SS,LOW);
             SPI.transfer(AttnToDSA);
             digitalWrite(RXDSA1SS,HIGH);
             digitalWrite(RXDSA1SS,LOW);
             Serial.println("Enter 1 for setting Rx_DSA_1 Attenuation");
             Serial.println("Enter 0 for Exit from Rx_DSA_1");
             while(Serial.available() == 0) {}//wait till user provide input on serial
             choice2 = Serial.parseInt();
             //Serial.println(choice);
             }while(choice2==1);
             break;
      case 3:  //**********Rx_DSA_2 code**************//
             int choice3; 
             Serial.println("Welcome to Rx_DSA_2");
             do{          
             Serial.println("Enter Rx_2 Attenuation in dB: ");
             while(Serial.available() == 0) {}//wait till user provide input on serial
             float Attn;
             Attn=Serial.parseFloat();
             Serial.print("Entered Rx_2 Attenuation is: ");
             Serial.println(Attn);
             byte AttnToDSA;
             AttnToDSA = DataToSendDSA(Attn);
             Serial.print("DSA resistor to be set in Decimal: "); 
             Serial.println(AttnToDSA);
             //AttnToDSA = AttnToDSA<<2;
             SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
             digitalWrite(RXDSA2SS,LOW);
             SPI.transfer(AttnToDSA);
             digitalWrite(RXDSA2SS,HIGH);
             digitalWrite(RXDSA2SS,LOW);
             Serial.println("Enter 1 for setting Rx_DSA_2 Attenuation");
             Serial.println("Enter 0 for Exit from Rx_DSA_2");
             while(Serial.available() == 0) {}//wait till user provide input on serial
             choice3 = Serial.parseInt();
             //Serial.println(choice);
             }while(choice3==1);
             break;
      case 4:    //**********BPF code**************//
             int choice4;
             word Freq = 0;
             String FreqHex;
             Serial.println("Welcome to TunableBPF");            
             do{ 
                Serial.println("Enter BPF Frequncy: ");
                while(Serial.available() == 0) {}//wait till user provide input on serial  
                Freq = Serial.parseInt();             
                Serial.print("Tx Frequncy: ");
                Serial.println(Freq);
                SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
                digitalWrite(BPFSS,LOW);
                SPI.transfer16(Freq);
                digitalWrite(BPFSS,HIGH);
                FreqHex =  String(Freq, HEX); 
                Serial.print("Frequncy to be set to Tunable Band Pass Filter in HexaDecimal: ");
                Serial.println(FreqHex); 
                Serial.println("Enter 1 for setting BPF Frequency");
                Serial.println("Enter 0 for Exit from BPF");
                while(Serial.available() == 0) {}//wait till user provide input on serial
                choice4 = Serial.parseInt();
               }while(choice4==1);
               break;
       case 5:     //**********Digital TrimPOT code**************//
              int choice5;
              int Voltage;
              SPI.beginTransaction(SPISettings(5000000, MSBFIRST, SPI_MODE0));
              digitalWrite(POTSS,LOW);
              SPI.transfer(0x1082);    //Set default value i.e. 28V in NV register
              SPI.transfer(0x30);      //Copy NV Register to Wiper Register (Default Value: 28V)
              digitalWrite(POTSS,HIGH);
              Serial.println("Welcome to Digital TrimPOT");            
              do{
                 Serial.println("Enter Voltage to set on Digital POT: ");
                 while(Serial.available() == 0) {}//wait till user provide input on serial 
                 Voltage = Serial.parseInt();
                 Serial.print("Entered Voltage: ");
                 Serial.println(Voltage);
                 float R3 = 1.65*((Voltage/1.7)-1);
                    Serial.println(R3);    
                 float RegValue = ((R3/50000)*256)*1000;
                    Serial.println(RegValue);                
                 digitalWrite(POTSS,LOW);
                 SPI.transfer16(RegValue); //Write to Wiper register
                 digitalWrite(POTSS,HIGH);           
                 Serial.print("Register value to be set in Wiper Register: ");
                 Serial.println(RegValue);
                 Serial.println("Enter 1 for setting Digital POT Voltage");
                 Serial.println("Enter 0 for Exit from Digital TrimPOT");
                 while(Serial.available() == 0) {}//wait till user provide input on serial
                 choice5 = Serial.parseInt();                                
               }while(choice5==1);
               break;
        case 6: Serial.println("In 6th case");
              break;
        default: Serial.println("Invalid Entry, Please enter valid choice");
    
      }
      Serial.println("out of Switch");
   
  }
}

int DataToSendDSA(float Attenuation)
 {
   int DSAAttn=0;
   String AttnHex;
     //int Attenuation=Attn;
     int Binary[]={32,16,8,4,2,1};
     float AttnStep[]={16,8,4,2,1,0.5};
     int i;
     for(i=0;i<6;i++)
     {
     if(AttnStep[i]==Attenuation)
      {
        DSAAttn=DSAAttn|Binary[i];
        break;
      }    
     else if(AttnStep[i]<Attenuation)
      {
        DSAAttn=DSAAttn|Binary[i];
        Attenuation=Attenuation-AttnStep[i];
      }
     }
      DSAAttn=DSAAttn<<2;
      AttnHex =  String(DSAAttn, HEX); 
      Serial.print("Attenuation to be set to DSA in HexaDecimal: "); //remove this print after development
      Serial.println(AttnHex); 
    return DSAAttn;
 }

EN

回答 1

Stack Overflow用户

发布于 2021-12-24 09:24:05

在一个开关语句中,可以有4种以上的情况。事实上,没有限制,除了你不能有重复的事实。

您的问题是在其他地方,在您的代码中,遗憾的是,您还没有发布。

我不确定这是否是您的问题,但我正在收到编译器警告:

代码语言:javascript
复制
sketch_dec24a:153: error: jump to case label [-fpermissive]

这是由在每个用例标签内声明变量引起的。我建议把它们砌成几块。

代码语言:javascript
复制
  case 3:  //**********Rx_DSA_2 code**************//
         {   // <---- add this
         int choice3; 
         Serial.println("Welcome to Rx_DSA_2");
         ... blah blah ...
         break;
         } // <---- add this

对其中包含变量声明的每个case标签执行此操作。或者,将声明移到开关语句之外。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70472188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档