Индикатор уровня 0-1023 на светодиодах и 74HC595
- Войдите на сайт для отправки комментариев
Вс, 16/10/2016 - 10:59
Добрый день! Пожалуйста помогите со следующим тех.заданием:
Написать программу для Ардуино, которая будет отображать на линейке светодиодов из 8 штук уровень напряжения на аналоговом входе, к которому подключен переменный резистор. При уровне 0 индикатор не светится. На уровне 512 светится 4 из 8 светодиодов. Все светодиоды светятся при уровне равном 1023.
Буду благодарен за скетч и схему подключения.
Все переискал на форуме и не только, а ответа на свой вопрос не нашёл.
Спасибо заранее!
Вам сюда.
код не проверен.
/* #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); } }qwone, спасибо большое за ответ! Буду собирать, проверять.
Зачэм ардуино, можно так и еще дешевле.
Добрый день! А я не студент, уже давно как (лет 15 наверное). У меня не техническое образование. "Тех.заданием" я это так "по-советски" назвал. Интересно разобраться в Ардуино, этот пример мне поможет понять что к чему. "Бегущие огоньки" на сдвиговом регистре не имеют для меня никакой практической пользы. Спасибо.
mastech Вот еще какое дело. В русском языке есть 33 буквы, есть какая-то граматика, и изложение. Но у каждого получается разное, стихи, проза, тех.документация или юридический документ. Все зависит от человека и характера его работы. И хотя Ардуина и язык Си вроде действуют по конкретным правилам, но программы получаюся разные, даже если задание одно и тоже. Так что разбирать надо разные стили написания программы и вырабатывать свой. Иначе при собраной из разных скетчей программа превратится в пестрой через раз работающее одеяло. Я пишу свой код под меня, и только потому что мне так легче выявлять ошибки и модефицировать программу. И даже на эту программу пошли куски из других моих же кусков программ. Вот и вам надо составлять свою библиотеку своих наработок, отделяя их от чужих, даже если они работают похоже, и может быть лучше.
qwone, спасибо большое, я всё понимаю. Стараюсь учиться, так как это интересно всё: и читать, и программы анализировать, и своё делать. Попробовал Ваш код - к сожалению, не работает: светодиоды загораются в разном порядке, на переменный резистор нет реакции в принципе. Собрал всё правильно, проверил на бегущих огнях, пины разумеется перенумеровывал, как того требует скетч.
Уважаемый qwone, скетч заработал, доска с дырками и проводками была еще раз перебрана с нуля! Спасибо большое Вам за помощь и дельные советы!