Оптимизация кода
- Войдите на сайт для отправки комментариев
Играюсь с нелинейными соотношениями.
Есть две кнопки - первая режимы записи и чтения данных, вторая запись данных и два потенциометра. В режиме записи при нажатии на вторую кнопку запоминаются данные с потенциометров - 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); }