измеритель UV стерео сигнала
- Войдите на сайт для отправки комментариев
Ср, 04/11/2020 - 22:08

Добрый день
Одна линия - правый канал, другая - левый канал стереосигнала, =так нужно .
Но есть проблема, обе линии одновременно реагировать на подачу сигнала на один из входов.
Как их разделить?
// LCD Bar Graph v2, 16 blocks x 5 vertical lines
#include <LiquidCrystal.h> // internal LCD library
LiquidCrystal lcd(PA0, PA1, PA2, PA3, PA4, PA5); // LCD pins: RS, ENABLE, D4, D5, D6, D7
unsigned int val = 0;
unsigned int val_old = 1;
//////////
unsigned int val2 = 0;
unsigned int val2_old = 1;
//upper line
byte graphUpline [5][8] = {
// new LCD chars: |, ||, |||, ||||, |||||
{0x10, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00,}, // 1 vertical line
{0x18, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00,}, // 2 vertical lines
{0x1C, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00,}, // 3 vertical lines
{0x1E, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00,}, // 4 vertical lines
{0x1F, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00,} // 5 vertical lines
};
//lower line
byte graphLow [5][8] = {
// new LCD chars: |, ||, |||, ||||, |||||
{0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x10}, // 1 vertical line
{0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x18}, // 2 vertical lines
{0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x1C}, // 3 vertical lines
{0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x1C}, // 4 vertical lines
{0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x1F} // 5 vertical lines
};
//---------------------------------------------------------------------------------------------------------
void setup() {
pinMode(PA6, INPUT);
pinMode(PB0, INPUT);// pin A0 as input
lcd.begin(16, 2); // LCD initialization
for (byte k = 0; k < 5; k++)
lcd.createChar(k, graphUpline[k]); //upper line
for (byte d = 0; d < 5; d++)
lcd.createChar(d, graphLow[d]); //lower line
}
//---------------------------------------------------------------------------------------------------------
void loop() {
val = analogRead(PA6);
if (val_old != val) {
lcd.setCursor(0, 0);
lcd.print(val);
lcd.print(" ");
draw_bar(val / 3.5 + 1);
val_old = val;
}
val2 = analogRead(PB0);
if (val2_old != val2) {
lcd.setCursor(0, 1);
//lcd.print(val2);
lcd.print(" ");
draw_bar2(val2 / 3.5 + 1);
val2_old = val2;
}
}
//---------------------------------------------------------------------------------------------------------
// bar val
void draw_bar(unsigned int m_val) {
byte a; // block
byte b; // lines in block
byte m; // local counter
lcd.setCursor(0, 0);
a = m_val / 64; // 1024 / 16, black blocks
for (m = 0; m < a; m++)
lcd.write(4);
b = (10 * (m_val - a * 64)) / 128; // (64 / 5) * 10, last box: vertical lines
if (b > 0)
lcd.write(b - 1);
else
lcd.write(' '); // blank block
for (m = a + 1; m < 16; m++) // blank left spaces
lcd.write(' ');
}
// bar val2
void draw_bar2(unsigned int m_val2) {
byte a; // block
byte b; // lines in block
byte m; // local counter
lcd.setCursor(0, 1);
a = m_val2 / 64; // 1024 / 16, black blocks
for (m = 0; m < a; m++)
lcd.write(4);
b = (10 * (m_val2 - a * 64)) / 128; // (64 / 5) * 10, last box: vertical lines
if (b > 0)
lcd.write(b - 1);
else
lcd.write(' '); // blank block
for (m = a + 1; m < 16; m++) // blank left spaces
lcd.write(' ');
}
//////////////////
Если две одинаковые, но независимые процедуры на выходе дают эквивалентный результат, это означает, что на вход к ним попадают одни и те же данные.
подаю на один вход сигнал - PA6, второй на землю - PB0
проблема где то здесь
for (byte k = 0; k < 5; k++) lcd.createChar(k, graphUpline[k]); //upper line for (byte d = 0; d < 5; d++) lcd.createChar(d, graphLow[d]); //lower lineподаю на один вход сигнал - PA6, второй на землю - PB0
шо? 8)