Оптимизация кода
- Войдите на сайт для отправки комментариев
Играюсь с нелинейными соотношениями.
Есть две кнопки - первая режимы записи и чтения данных, вторая запись данных и два потенциометра. В режиме записи при нажатии на вторую кнопку запоминаются данные с потенциометров - 5 запомненных положений. При переходе в режим чтения при вращении первого потенциометра переменная меняется в зависимости от сохранённых значений, получается кривая из четырёх отрезков. Код работает, пока меня устраивает.
Вопрос в том, что нужно сохранять больше точек, допустим 50 шт, и расписывать простыни не хочется, а знаний как записать правильно, коротко и красиво, конечно если это возможно, ну не хватает. Прошу помощи.
На следующем этапе хочется предусмотреть возможность прекращения записи произвольно, например записал 35 точек из 50 возможных, и перехожу в режим чтения. Правда наверно прийдётся ещё кнопку добавлять.
#include <Bounce.h>
#define led 13
#define POT1 A1
#define POT2 A2
int valPOT1;
int valPOT2;
#define BUTTON_SAVE 8
#define BUTTON_READ 9
Bounce bouncerSAVE = Bounce( BUTTON_SAVE, 15 );
Bounce bouncerREAD = Bounce( BUTTON_READ, 15 );
int regim = 0;
int flagR = 0;
int flagS = 0;
int Mode = 0;
int count = 0;
int val;
int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
int pos1 = 0;
int pos2 = 0;
int pos3 = 0;
int pos4 = 0;
int pos5 = 0;
void Blink()
{
digitalWrite(led, HIGH );
delay(200);
digitalWrite(led, LOW );
delay(200);
digitalWrite(led, HIGH );
delay(200);
digitalWrite(led, LOW );
delay(200);
digitalWrite(led, HIGH );
delay(200);
digitalWrite(led, LOW );
delay(200);
digitalWrite(led, HIGH );
delay(200);
digitalWrite(led, LOW );
}
void setup()
{
pinMode(BUTTON_SAVE, INPUT);
pinMode(BUTTON_READ, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop()
{
bouncerSAVE.update ( );
bouncerREAD.update ( );
int valueSAVE = bouncerSAVE.read();
int valueREAD = bouncerREAD.read();
/////////////////////////////////////////////////////////// кнопка режимов записи и чтения
if ( valueREAD == HIGH && regim == 0 && flagR == 0 && count == 5)
{
flagR = 1;
regim = 1;
}
if ( valueREAD == HIGH && regim == 1 && flagR == 0 )
{
flagR = 1;
regim = 0;
}
if ( valueREAD == LOW && flagR == 1)
{
flagR = 0;
}
if(regim == 0)
{
Mode = 0;
}
if(regim == 1)
{
count = 0;
Mode = 1;
}
/////////////////////////////////////////////////////////////// кнопка записи
if ( valueSAVE == HIGH && regim == 0 && count == 0 && flagS == 0)
{
count = 1;
Blink();
pos1 = valPOT1;
val1 = valPOT2;
flagS = 1;
}
if ( valueSAVE == HIGH && regim == 0 && count == 1 && flagS == 0)
{
count = 2;
Blink();
pos2 = valPOT1;
val2 = valPOT2;
flagS = 1;
}
if ( valueSAVE == HIGH && regim == 0 && count == 2 && flagS == 0)
{
count = 3;
Blink();
pos3 = valPOT1;
val3 = valPOT2;
flagS = 1;
}
if ( valueSAVE == HIGH && regim == 0 && count == 3 && flagS == 0)
{
count = 4;
Blink();
pos4 = valPOT1;
val4 = valPOT2;
flagS = 1;
}
if ( valueSAVE == HIGH && regim == 0 && count == 4 && flagS == 0)
{
count = 5;
Blink();
pos5 = valPOT1;
val5 = valPOT2;
flagS = 1;
}
if ( valueSAVE == LOW && regim == 0 && flagS == 1)
{
flagS = 0;
}
///////////////////////////////////////////////////////////////////////////
if(Mode == 0)
{
valPOT1 = analogRead(POT1);
valPOT2 = analogRead(POT2);
}
if(Mode == 1)
{
valPOT1 = analogRead(POT1);
if(pos1 < pos5) valPOT1 = constrain(valPOT1, pos1, pos5);
if(pos1 > pos5) valPOT1 = constrain(valPOT1, pos5, pos1);
if(valPOT1 >= pos1 && valPOT1 <= pos2) val = map(valPOT1, pos1, pos2, val1, val2);
if(valPOT1 > pos2 && valPOT1 <= pos3) val = map(valPOT1, pos2, pos3, val2, val3);
if(valPOT1 > pos3 && valPOT1 <= pos4) val = map(valPOT1, pos3, pos4, val3, val4);
if(valPOT1 > pos4 && valPOT1 <= pos5) val = map(valPOT1, pos4, pos5, val4, val5);
if(valPOT1 >= pos2 && valPOT1 <= pos1) val = map(valPOT1, pos2, pos1, val2, val1);
if(valPOT1 > pos3 && valPOT1 <= pos2) val = map(valPOT1, pos3, pos2, val3, val2);
if(valPOT1 > pos4 && valPOT1 <= pos3) val = map(valPOT1, pos4, pos3, val4, val3);
if(valPOT1 > pos5 && valPOT1 <= pos4) val = map(valPOT1, pos5, pos4, val5, val4);
}
Serial.print(count);
Serial.print("\t");
Serial.print(regim);
Serial.print("\t");
Serial.print(valPOT1);
Serial.print("\t");
Serial.print(valPOT2);
Serial.print("\t");
Serial.println(val);
}