• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Optymalizacja Kodu o 1% Arduino Uno
#2
Kod bardzo długi więc musiałem podzielić na dwie częsci:
Kod:
void submenu_doseslow()
{
  lcd.setCursor(3,1);
  lcd.print(minspeed);
  submenuon=1;
  while(submenuon)
            {
           
              if(analogRead(A0) < noSWpressed)
                {
               delay(10);
               a0value= analogRead(A0);
                if((a0value >= SW1-swtolerance && a0value <= SW1+swtolerance)||(a0value >= SW5-swtolerance && a0value <= SW5+swtolerance))
                {
                  button_off(SW1);
                  button_off(SW5);
                  a0value= analogRead(A0);
                  EEPROM.put(address_minspeed, minspeed);
                  menuupdate=1;
                  submenuon=0;
                
                }
                if(a0value >= SW2-swtolerance && a0value <= SW2+swtolerance)
                {
                  minspeed =speed_change_acc(SW2, minspeed, 1.0, 3, 1);
                  button_off(SW2);

                  }
                 
         
               
                }
                if(a0value >= SW3-swtolerance && a0value <= SW3+swtolerance)
                {
                  minspeed =speed_change_acc(SW3, minspeed, -1.0, 3, 1);
                  button_off(SW3);
                 
                 
                 
                  }
                 
                }
              }

void submenu_rampstart()
{
  lcd_print_weight(startramp,3, 1);
  submenuon=1;
  while(submenuon)
            {
           
              if(analogRead(A0) < noSWpressed)
                {
               delay(10);
               a0value= analogRead(A0);
                if((a0value >= SW1-swtolerance && a0value <= SW1+swtolerance)||(a0value >= SW5-swtolerance && a0value <= SW5+swtolerance))
                {
                  button_off(SW1);
                  button_off(SW5);
                  a0value= analogRead(A0);
                  EEPROM.put(address_startramp, startramp);
                  menuupdate=1;
                  submenuon=0;
                
                }
                if(a0value >= SW2-swtolerance && a0value <= SW2+swtolerance)
                {
                  startramp =  weight_change_acc(SW2,startramp, 0.001,0.01, 3, 1);
                  button_off(SW2);

                  }
                 
         
               
                }
                if(a0value >= SW3-swtolerance && a0value <= SW3+swtolerance)
                {
                  startramp = weight_change_acc(SW3,startramp,-0.001,-0.01, 3, 1);
                  button_off(SW3);
                  }
                 
                }
              }



void submenu_rampend()
{
  lcd_print_weight(endramp,3, 1);
  submenuon=1;
  while(submenuon)
            {
           
              if(analogRead(A0) < noSWpressed)
                {
               delay(10);
               a0value= analogRead(A0);
                if((a0value >= SW1-swtolerance && a0value <= SW1+swtolerance)||(a0value >= SW5-swtolerance && a0value <= SW5+swtolerance))
                {
                  button_off(SW1);
                  button_off(SW5);
                  a0value= analogRead(A0);
                  EEPROM.put(address_endramp, endramp);
                  menuupdate=1;
                  submenuon=0;
                
                }
                if(a0value >= SW2-swtolerance && a0value <= SW2+swtolerance)
                {
                  endramp =  weight_change_acc(SW2,endramp, 0.001,0.01, 3, 1);
                  button_off(SW2);

                  }
                 
         
               
                }
                if(a0value >= SW3-swtolerance && a0value <= SW3+swtolerance)
                {
                  endramp = weight_change_acc(SW3,endramp,-0.001,-0.01, 3, 1);
                  button_off(SW3);
                  }
                 
                }
              }

void submenu_tolerance()
{
  lcd_print_weight(tolerance,3, 1);
  submenuon=1;
  while(submenuon)
            {
           
              if(analogRead(A0) < noSWpressed)
                {
               delay(10);
               a0value= analogRead(A0);
                if((a0value >= SW1-swtolerance && a0value <= SW1+swtolerance)||(a0value >= SW5-swtolerance && a0value <= SW5+swtolerance))
                {
                  button_off(SW1);
                  button_off(SW5);
                  a0value= analogRead(A0);
                  EEPROM.put(address_tolerance, tolerance);
                  menuupdate=1;
                  submenuon=0;
                
                }
                if(a0value >= SW2-swtolerance && a0value <= SW2+swtolerance)
                {
                  tolerance =  weight_change_acc(SW2,tolerance, 0.001,0.01, 3, 1);
                  button_off(SW2);

                  }
                 
         
               
                }
                if(a0value >= SW3-swtolerance && a0value <= SW3+swtolerance)
                {
                  tolerance = weight_change_acc(SW3,tolerance,-0.001,-0.01, 3, 1);
                  button_off(SW3);
                  }
                 
                }
              }

void submenu_reset()
{
          strcpy_P(PufferChar, (char *)pgm_read_word(&(str_ask[Language])));
          lcd.print(PufferChar);
          submenuon=1;
          while(submenuon)
          {
            if(analogRead(A0) < noSWpressed)
              {
              delay(10);
              a0value= analogRead(A0);
              if(a0value >= SW1-swtolerance && a0value <= SW1+swtolerance)
              {
                button_off(SW1);
                a0value= analogRead(A0);
                menuupdate=1;
                submenuon=0;
               
              }
              if(a0value >= SW5-swtolerance && a0value <= SW5+swtolerance)
              {
                button_off(SW5);
                lcd.clear();
                for(int c=0; c<=255; c++)
                {
                EEPROM.put(c, 0);
                }//end of for
                lcd.setCursor(0,0);
                lcd.print(F("reset finished"));
                lcd.setCursor(0,1);
                lcd.print(F("unplug loader"));
                while(1)
                {
                 }
              }
              }
          }
}


void submenu_language()
{
            submenuon=1;
            new_Language=Language;
            while(submenuon)
            {
                          lcd.clear();
                          lcd.setCursor(1,0);
                          lcd.print(menu[menuentry]);
                          lcd.setCursor(0,1);
                          lcd.print(F(">"));
                          submenuupdate=0;
                          if(new_Language<0){new_Language=number_languages-1;}
                          if(new_Language>(number_languages-1)){new_Language=0;}
                          if(new_Language==0)
                          {
                          strcpy_P(PufferChar, (char *)pgm_read_word(&(str_english[Language])));
                          }
                          else if (new_Language==1)
                          {
                          strcpy_P(PufferChar, (char *)pgm_read_word(&(str_2ndlanguage[Language])));
                          }
                          else
                          {
                          strcpy_P(PufferChar, (char *)pgm_read_word(&(str_3ndlanguage[Language])));
                          }
                          lcd.print(PufferChar);
                         
              while(submenuon && !submenuupdate)  
              {      
              if(analogRead(A0) < noSWpressed)
                {
               delay(10);
               a0value= analogRead(A0);
                if((a0value >= SW1-swtolerance && a0value <= SW1+swtolerance)||(a0value >= SW5-swtolerance && a0value <= SW5+swtolerance))
                {
                  if (Language!=new_Language)
                  {
                  Language=new_Language;
                  EEPROM.put(address_Language, Language);
                  language();
                  }
                  button_off(SW1);
                  button_off(SW5);
                  a0value= analogRead(A0);
                 
                  menuupdate=1;
                  submenuon=0;
                }
                if(a0value >= SW2-swtolerance && a0value <= SW2+swtolerance)
                {
                  button_off(SW2);
                  new_Language++;
                  submenuupdate=1;
                
                  }

                if(a0value >= SW3-swtolerance && a0value <= SW3+swtolerance)
                {
                  button_off(SW3);
                  new_Language--;
                  submenuupdate=1;
                 
                  }
                 
                }
              }
              }


 
}





void lcd_print_weight(float weight,byte lcd_cursor, byte lcd_line) //prints a weight with unit, limits it , 8 spaces needed
{
if(scaleunit==0||scalecalib>0)
  {
  if(weight>99.999){weight = 99.999;}
  if(weight<-9.999){weight = -9.999;}
  show_dec=3;
  lcd.setCursor(lcd_cursor+6,lcd_line);
  lcd.print(F(" g"));

}
else
{
  if(weight>999.99){weight = 999.99;}
  if(weight<-99.99){weight = -99.99;}
  show_dec=2;
  lcd.setCursor(lcd_cursor+6,lcd_line);
  lcd.print(F("gn"));
}
dtostrf(weight, 6, show_dec,PufferChar);
lcd.setCursor(lcd_cursor,lcd_line);
lcd.print(PufferChar);
}

void button_off(int sw) // waits until the button is released
{
while(!((a0value > sw+swtolerance) || (a0value < sw-swtolerance)))
{a0value= analogRead(A0);}
//delay(10);
//a0value= analogRead(A0);
}
 
 
Odpowiedź
  


Wiadomości w tym wątku
Optymalizacja Kodu o 1% Arduino Uno - przez Panjarek - 26-11-2024, 09:01
RE: Optymalizacja Kodu o 1% Arduino Uno - przez Panjarek - 26-11-2024, 09:07

Skocz do:


Przeglądający: 1 gości