На рисунке показана схема линейного индикатора уровня сигнала, уст-во основано на Arduino Nano, индикатор LCD 1602. Индикатор способен отображать 30 уровней входного сигнала, входной сигнал не должен превышать 1.1 В, так как вход АЦП имеет внутреннее опорное напряжение 1.1 В. При большом уровне входного сигнала используйте делитель напряжения.
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2);// RS,E,D4,D5,D6,D7 byte a1[8]={ 0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011}; byte a2[8]={ 0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000}; byte a3[8]={ 0b00011,0b00011,0b00011,0b00011,0b00011,0b00011,0b00011,0b00011}; byte znak_r[8]={ // R 0b00000,0b00000,0b11111,0b00101,0b00101,0b11010,0b00000,0b00000}; byte znak_l[8]={ // L 0b00000,0b00000,0b11111,0b10000,0b10000,0b10000,0b00000,0b00000}; int u_r,u_l,i=1,x,u_maxr,u_maxl,z,z1,u_r0[15],u_l0[15]; unsigned long time1; void setup(){ analogReference(INTERNAL); lcd.begin(16, 2);// LCD 16X2 lcd.createChar(0,a1); lcd.createChar(1,a2); lcd.createChar(2,znak_r); lcd.createChar(3,znak_l); lcd.createChar(4,a3); pinMode(A0,INPUT); pinMode(A2,INPUT); } void loop(){ lcd.setCursor(0,0);// R lcd.write((uint8_t)2); lcd.setCursor(0,1); lcd.write((uint8_t)3);// L u_r = analogRead(A0); // измерение R u_l = analogRead(A2); // измерение L for(int z=1,z1=0,z2=30;z<=15;z++,z1=z1+30,z2=z2+30){ // l+r if(u_l>z1){ lcd.setCursor(z,1); lcd.write((uint8_t)1); } if(u_r>z1){ lcd.setCursor(z,0); lcd.write((uint8_t)1); } if(u_l>z2){ lcd.setCursor(z,1); lcd.write((uint8_t)0); } if(u_r>z2){ lcd.setCursor(z,0); lcd.write((uint8_t)0); } } i++; if(i<=15){ u_l0[i]=u_l; u_r0[i]=u_r; } else{ i=1; } if(i==15){ u_maxr=0; u_maxl=0; for(x=1;x<=15;x++){ u_maxl=max(u_maxl,u_l0[x]); u_maxr=max(u_maxr,u_r0[x]); } } if(u_maxl<=u_l){ u_maxl=u_l; } if(u_maxr<=u_r){ u_maxr=u_r; } for(z=1,z1=0;z<=15;z++,z1=z1+30){ if(u_maxl > z1 && u_maxl <= z1+15){ lcd.setCursor(z,1); lcd.write((uint8_t)1); } if(u_maxl > z1+15 && u_maxl <= z1+30){ lcd.setCursor(z,1); lcd.write((uint8_t)4); } if(u_maxr > z1 && u_maxr <= z1+15){ lcd.setCursor(z,0); lcd.write((uint8_t)1); } if(u_maxr > z1+15 && u_maxr <= z1+30){ lcd.setCursor(z,0); lcd.write((uint8_t)4); } } delay(75); lcd.clear(); }
Могу я задать вам вопрос. Скачанный код не компилируется, что делать?
можешь помочь мне? Потому что я не умею программировать.
опубликуйте код ошибки