Индикатор уровня 0-1023 на светодиодах и 74HC595

mastech
Offline
Зарегистрирован: 16.10.2016

Добрый день! Пожалуйста помогите со следующим тех.заданием:

Написать программу для Ардуино, которая будет отображать на линейке светодиодов из 8 штук уровень напряжения на аналоговом входе, к которому подключен переменный резистор. При уровне 0 индикатор не светится. На уровне 512 светится 4 из 8 светодиодов. Все светодиоды светятся при уровне равном 1023.
Буду благодарен за скетч и схему подключения.

Все переискал на форуме и не только, а ответа на свой вопрос не нашёл.
Спасибо заранее!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вам сюда.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

код не проверен.

/*
#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);
  }
}
mastech
Offline
Зарегистрирован: 16.10.2016

qwone, спасибо большое за ответ! Буду собирать, проверять.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Зачэм ардуино, можно так и еще дешевле.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
inspiritus пишет:
Зачэм ардуино
 
Затем, что студенту дали задание сделать это на Ардуино, а он вместо того, чтобы хоть чему-нибудь научиться, решил прявить хитрозадость, припёрся сюда и потребовал
 
mastech пишет:
скетч и схему подключения.
 
Очень жаль, что некоторые из наших коллег, ведутся и делают задания за таких "завтрашних инженеров", прости Господи, способствуя тем самым (надеюсь, неумышленно) дебилизации России и скатыванию её в каменный век.
 
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ЕвгенийП пишет:

Очень жаль, что некоторые из наших коллег, ведутся и делают задания за таких "завтрашних инженеров", прости Господи, способствуя тем самым (надеюсь, неумышленно) дебилизации России и скатыванию её в каменный век.
А вот ,хрен он будет инженером. Сейчас не социализм, а капитализм. Диплом ему нарисуют, а вот место рабочее не предоставят. В любой маломальской организации берут по умениям, а без умений он вылетит с работы еще быстрее, чем с института.
mastech
Offline
Зарегистрирован: 16.10.2016

Добрый день! А я не студент, уже давно как (лет 15 наверное). У меня не техническое образование. "Тех.заданием" я это так "по-советски" назвал. Интересно разобраться в Ардуино, этот пример мне поможет понять что к чему. "Бегущие огоньки" на сдвиговом регистре не имеют для меня никакой практической пользы. Спасибо.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

mastech Вот еще какое дело. В русском языке есть 33 буквы, есть какая-то граматика, и изложение. Но у каждого получается разное, стихи, проза, тех.документация или юридический документ. Все зависит от человека и характера его работы. И хотя Ардуина и язык Си вроде действуют по конкретным правилам, но программы получаюся разные, даже если задание одно и тоже. Так что разбирать надо разные стили написания программы и вырабатывать свой. Иначе при собраной из разных скетчей программа превратится в пестрой через раз работающее одеяло. Я пишу свой код под меня, и только потому что мне так легче выявлять ошибки и модефицировать программу. И даже на эту программу пошли куски из других моих же кусков программ. Вот и вам надо составлять свою библиотеку своих наработок, отделяя их от чужих, даже если они работают похоже, и может быть лучше.

mastech
Offline
Зарегистрирован: 16.10.2016

qwone, спасибо  большое, я всё понимаю. Стараюсь учиться, так как это интересно всё: и читать, и программы анализировать, и своё делать. Попробовал Ваш код - к сожалению, не работает: светодиоды загораются в разном порядке, на переменный резистор нет реакции в принципе. Собрал всё правильно, проверил на бегущих огнях, пины разумеется перенумеровывал, как того требует скетч.
 

mastech
Offline
Зарегистрирован: 16.10.2016

Уважаемый qwone, скетч заработал, доска с дырками и проводками была еще раз перебрана с нуля! Спасибо большое Вам за помощь и дельные советы!