26-11-2024, 09:07
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);
}

