как оптимизировать ?
- Войдите на сайт для отправки комментариев
Пт, 21/10/2016 - 19:19
int a0 = analogRead(A0)/4;// читаю число
float y = 0.05076142*a0; // считаю сколько светодиодов из 10 должно гореть
float v =y; приравниваю
delay(150);
a0 = analogRead(A0)/4; \\беру новое значение
y = 0.05076142*a0; // считаю сколько светодиодов из 10 должно гореть
if (v<=y) { \\ по циклу каждый раз включаю и выключаю
for (int i = 1; i<=v; i++){
digitalWrite(i, HIGH);
}
}else{
for (int i = (int) v; i>=y; i--){
digitalWrite(i, LOW);
}
что за устройство ? Идея в том ,что я меняю сопротивление на ризисторе, ардуин высчитывает это и выдает значения на светодиодной шкале от 1 до 10.Сталкнулся с тако проблеммой что если к этой программе еще что -то дописывать, то она жудко лагать начинает,думаю это из за того ,что цикл долго выполнеться.
Помогите оптимизировать .Зарание спасибо .
Самая большая проблема в том, что вы дилетант. А раз вы дилетант, то
1- делаете то что не надо делать.
2- не делаете того что надо делать.
3 - вообще даже не с того конца зашли.
Вот вариант,но там на 74HC595
/* #1 переменый резистор +5V -> +5V R1-> A0 (R1_pin) GND -> GND #2 DATA ->8 (Data_pin) CLK ->7 (CLK_pin) LATCH ->4 (LATCH_pin) D0->Led1;D1->Led2;D3->Led3;D4->Led4;D5->Led5;D6->Led6;D7->Led7;D8->Led8; GND -> GND 1 горит / 0 нет */ //#1 const int R1_pin = A0; uint16_t R1_value = 0; //#2 const int Latch_pin=4; const int CLK_pin =7; const int Data_pin =8; const int Value_Step =1023/9; // норми коэф мах уровень на 9 состояний (ничего не горит и горят все 8) // матрица уровней .... .... , .... ...0, -, 0000 0000 const byte LEVEL_MAP[] = {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; // вывод на светодиоды void WriteLevel(int Value){ digitalWrite(Latch_pin,0); shiftOut(Data_pin, CLK_pin, MSBFIRST, LEVEL_MAP[Value/Value_Step]); digitalWrite(Latch_pin,1); } void setup() { //#1 //#2 pinMode(Latch_pin,OUTPUT); pinMode(CLK_pin,OUTPUT); pinMode(Data_pin,OUTPUT); } void loop() { static uint32_t MILLIS ; MILLIS = millis() ; //#1 непрерывно сьем уровня с потенциометра R1_value = analogRead(R1_pin); //#2 раз в 0,100 сек выдача уровня на светодиоды static uint32_t future2 = 0 ; if (MILLIS >= future2) { future2 = MILLIS + 100 ; WriteLevel(R1_value); } }ПС: в вашем случае еще проще.
/* #1 переменый резистор +5V -> +5V R1-> A0 (R1_pin) 0...1023 GND -> GND #2 светодиоды led1-10 ->2,3,4,5,6,7,8,9,10,11 горит 0/ не горит 1 второй вывод через R=1кОм-> Ucc */ //#1 const int R1_pin = A0; uint16_t R1_value = 0; //#2 const byte Led_pin[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; // пины светодиодов const int quantity_led = 9; // количество светодиодов начиная с нуля 0...9 uint8_t i, level; // счетчик цикла и сколько светодиодов надо зажечь const uint16_t normalization = 1024 / 10; // нормирование максимум отображение на кол-во светодиодов void setup() { //#1 //#2 for ( i = 0; i <= quantity_led; i++) { // инициализировать и погасить светодиоды pinMode(Led_pin[i], OUTPUT); digitalWrite(Led_pin[i], 1); } } void loop() { static uint32_t MILLIS ; MILLIS = millis() ; //#1 непрерывно сьем уровня с потенциометра R1_value = analogRead(R1_pin); //#2 раз в 0,100 сек выдача уровня на светодиоды static uint32_t future2 = 0 ; if (MILLIS >= future2) { future2 = MILLIS + 100 ; level = R1_value / normalization; for ( i = 0; i <= quantity_led; i++) digitalWrite(Led_pin[i], (i >= level)); } }74HC595 имеет всего 8 пинов на выход,есть что то похожее но на 10 пинов ?
74HC595 имеет всего 8 пинов на выход,есть что то похожее но на 10 пинов ?
Возмите две 74HC595 и ног будет 16. http://meandr.org/archives/5107
или так https://goo.gl/Mw2pLh
функцией map не получится?