INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
arduino nano und 1602lcd als (mono)bargraph
06.01.2015, 10:29
Beitrag #1
arduino nano und 1602lcd als (mono)bargraph
Guten Tag,

ich bin neu auf dem Gebiet Arduino, und hab gleich mal eine interessante Idee bei der bei der ich einfach nicht weiterkomme obwohl ich schon einige ähnliche Projekt in irgendwelchen Youtube Videos gesehen habe.

Also folgendes:

ich möchte an einem Audio Ausgang (Klinke 3,5mm) den Arduino Nano anschließen den Signalpegel anhand der Spannung messen.
Befehl wäre wohl "analog read"
dann soll der gemessene Wert auf ein 1602LCD ausgegeben werden aber nicht als Zahlenwert sondern vorrangig als Balken (nicht unbedingt nur eine Zeile sonder gleich beide also als mono Bargraph)
die Auflösung ist ja relativ gut es sind ja ausreichend Blöcke mit je fünf vertikalen Linien vorhanden.

Ich denke das man den Messwert dann irgendwie in Relation zu den Linien setzen muss die man zur Verfügung hat.
Außerdem muss das Display ja mit einer Bibliothek angebunden werten Liquid crystal h ?

Am Eingang muss bestimmt eine Spannungsbegrenzung oder ein Teiler rein.

Ihr seht also, die Idee ist da aber es hapert am Wissen zur Umsetzung.

Ich wäre über Hilfe und Code dankbar.

Beste Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2015, 11:12
Beitrag #2
RE: arduino nano und 1602lcd als (mono)bargraph
hallo Zorg

danke für den Link,

im Grunde ist das schon richtig, nur schreibt der Verfasser selber das der Code nicht ganz rund läuft also irgendwo kleine Fehler drin sind.

Zudem würde bestimmt 2/3 des Codes genügen weil ich ja nur ein Kanal benötige.
Mit dem rauskürzen ist so eine Sache weil mir manchmal die Querverbindungen im Code nicht ganz klar sind.

Also ich würds mal so machen:
ich mops mir den Code mal und kürze raus was ich nicht benötige
also statt L und R nur ein Kanal.

ich würd den Code dann mal hier einfügen und um kritischen Blick bitten
wills ja eben nicht irgendwie hinwurschteln sonder auch verstehen bzw. nachvollziehen können.

Also die Hardware ist vorhanden, evtl müsste ich noch mal eine Adapterplatine mit Anschlüssen und Trimmer für das Lcd zum aufstecken per Pfostenleiste am Lcd fertigen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2015, 11:56
Beitrag #3
RE: arduino nano und 1602lcd als (mono)bargraph
so ich hab einen teil des codes schon mal mit Bemerkungen versehen
wie ich ändern würde bzw was ich lösche oder stehen lassen würde

beim rest muss ich noch etwas länger nachdenken
könnte mal jemand schauen ob es soweit ok ist wie ich Bemerkungen angefügt habe?

danke

//Arduino Mono Bargraph 1602LCD Analoger Eingang A2, Code von L R Kanal auf Ein Kanal kürzen

#include <LiquidCrystal.h>

//speciale caracters
byte p3[8] = {
B11111,
B00000,
B10000,
B10000,
B10000,
B10000,
B00000,
B11111
};

byte p4[8] = {
B11111,
B00000,
B11000,
B11000,
B11000,
B11000,
B00000,
B11111
};

byte p5[8] = {
B11111,
B00000,
B11100,
B11100,
B11100,
B11100,
B00000,
B11111
};

byte p6[8] = {
B11111,
B00000,
B11110,
B11110,
B11110,
B11110,
B00000,
B11111
};

byte p7[8] = {
B11111,
B00000,
B11111,
B11111,
B11111,
B11111,
B00000,
B11111
};

byte L[8] = {
B11111,
B00000,
B11111,
B10000,
B10000,
B10000,
B00000,
B11111
};

byte R[8] = {
B11111,
B00000,
B11111,
B00101,
B00101,
B11010,
B00000,
B11111
};

byte K[8] = {
B11100,
B11110,
B11111,
B11111,
B11111,
B11111,
B11110,
B11100
};

byte LEEG[8] = {
B11111,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B11111
};

int leftChannel = 0; // linker kanaal input Ersetzen durch AudioChannel = 0; Audio Eingang
int rightChannel = 0; // rechter kanaal input Zeile löschen

int left,left2,right,right2; //variabelen Ersetzen durch - int Audio
const int numReadings = 3; //5 lezingen voor data ??????

int readings[numReadings]; // aantal lezingen kann bleiben
int index = 0; // index van de momentele lezing kann bleiben
int total= 0; //totaal op nul zetten kann bleiben
int maxi=0; kann bleiben
int index2 = 0; // index van de momentele lezing (2) löschen
int total2= 0; // hoogste getal in de lezingen löschen
int maxi2=0; löschen
int inputPin = A2; //ingangspin links kann bleiben erklärung ersetzen durch Eingangspin Audio
int inputPin2 = A4; //ingangspin rechts löschen
int volL=0; Ersetzen durch int volAudio=0;
int volR=0; löschen
int carL=0; Ersetzen durch int carAudio=0;
int carR=0; löschen
int vul; kann bleiben
int vul2; löschen
int laad;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //lcd configuratie

void setup() {

Serial.begin(9600);
lcd.begin(16, 2); //bepaling grootte van de lcd
for (int thisReading = 0; thisReading < numReadings; thisReading++)
readings[thisReading] = 0;

lcd.createChar(1, p3);
lcd.createChar(2, p4);
lcd.createChar(3, p5);
lcd.createChar(4, p6);
lcd.createChar(5, p7);
lcd.createChar(6, L);
lcd.createChar(7, R);
lcd.createChar(8, K);
lcd.createChar(9, LEEG);



for(vul=0;vul<80;vul++)
{
for(laad=0;laad<vul/5;laad++)
{
lcd.setCursor(laad, 1);
lcd.write(5);
}
if(laad<1)
{
lcd.setCursor(0, 1);
lcd.write(5);
}

lcd.setCursor(laad+1, 1);
lcd.write((vul-vul/5*5)+1);
for(laad=laad+2;laad<16;laad++)
{
lcd.setCursor(laad, 1);
lcd.write(9);
}
lcd.setCursor(0, 0);
lcd.print("loading.........");
delay(50);
}
lcd.clear();
delay(500);





}

void loop()

{
lcd.setCursor(0, 0); //L en R worden op het scherm gezet
lcd.write(6);
lcd.setCursor(0, 1);
lcd.write(7);
lcd.setCursor(15, 0); //kapjes worden op het scherm gezet
lcd.write(8);
lcd.setCursor(15, 1);
lcd.write(8);

total=analogRead(inputPin);
if(total > maxi)
{
maxi=total;
}

index++;

if (index >= numReadings) //Na 5 lezingen gaan we naar 0
{
index = 0;
left=maxi;
maxi=0;
}


total2=analogRead(inputPin2);
if(total2 > maxi2)
{
maxi2=total2;
}

index2++;

if (index2 >= numReadings) //Na 5 lezingen gaan we naar 0
{
index2 = 0;
right=maxi2;
maxi2=0;
}



volR=right/3;


if(volR>14)
{
volR=14;
}
for(vul = 0 ; vul < volR ; vul++)
{
lcd.setCursor(vul+1, 1);
lcd.write(5);
}

for(vul = volR+1 ; vul < 15 ; vul++)
{
lcd.setCursor(vul, 1);
lcd.write(9);
}


volL=left/3;

if(volL>14)
{
volL=14;
}
for(vul2 = 0 ; vul2 < volL ; vul2++)
{
lcd.setCursor(vul2+1, 0);
lcd.write(5);
}

for(vul2 = volL+1 ; vul2 < 15 ; vul2++)
{
lcd.setCursor(vul2, 0);
lcd.write(9);
}
Serial.println(left);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2015, 12:16
Beitrag #4
RE: arduino nano und 1602lcd als (mono)bargraph
Hi,
ich halte es für unwahrscheinlich, dass sich jemand durch das Coding kämpfen möchte. Probier's doch einfach mal aus.
Das einzige, was vorher sicher gestellt sein sollte ist dass der analoge Eingang keine negativen Spannungen abbekommt und auch nichts über 5V.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2015, 17:52
Beitrag #5
RE: arduino nano und 1602lcd als (mono)bargraph
Hallo bernte_one,
anbei mal ein Code der die Pegel als Balken auf beiden Zeilen inklusive Peakwert ausgibt. Eingang kann 0 - 5 V haben. Ich habe den Code mal ein bisschen bzgl. Speicher getrimmt. Der Code sollte ohne Faxen laufen.
Grüße Ricardo
Code:
#include <LiquidCrystal.h>

const uint8_t IN_LEVEL = 0;  // Eingangspin

LiquidCrystal lcd( 12, 11, 5, 4, 3, 2);

const uint8_t T_REFRESH  =  100;            // msec Refreshrate
const uint8_t T_PEAKHOLD =  3*T_REFRESH;    // msec Haltezeit für Peakwerte

const byte  fill[6] = { 0x20, 0x00, 0x01, 0x02, 0x03, 0xFF }; // Character aktueller Pegel
const byte  peak[7] = { 0x20, 0x00, 0x04, 0x05, 0x06, 0x07, 0x20 }; // Character Peakwert
int   lmax[2];                                        // Array max. Level rechts / links - könnte theoretisch auf einen Wert reduziert werden. Dann müsste Funktion bar aber umgeschrieben werden
int   dly[2];                                         // delay und Geschwindigkeit für Peakwert - Reset

byte block[8][8] =
{
  { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 }, // define character for fill the bar
  { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 },
  { 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C },
  { 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E },

  { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 }, // define character for peak level
  { 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04 },
  { 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02 },
  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
};

void  setup  ( void )
{
  lcd.begin( 16, 2 );
  for ( int i = 0 ; i < 8 ; i++ )
    lcd.createChar( i, block[i] );
}

unsigned long  lastT = 0;

void  loop  ( void )
{
  if ( millis() < lastT )
    return;
  lastT += T_REFRESH;
  int Level = map( sqrt( analogRead( IN_LEVEL  ) * 16 ), 0, 128, 0, 80 ); // Quadratwurzel für lineare Anzeige
  bar( 0, Level );
  bar( 1, Level );
}

void  bar  ( int row, int lev )
{
  lcd.setCursor( 0, row );
  lcd.write( row ? 'R' : 'L' );
  for ( uint8_t i = 1 ; i < 16 ; i++ )
  {
    int f = constrain( lev      - i * 5, 0, 5 );
    int p = constrain( lmax[row] - i * 5, 0, 6 );
    if ( f )
      lcd.write( fill[ f ] );
    else
      lcd.write( peak[ p ] );
  }
  if ( lev > lmax[row] )
  {
    lmax[row] = lev;
    dly[row]  = -(T_PEAKHOLD) / T_REFRESH;              // Start delay Wert. Negativ -> Peak nicht verändern
  }
  else
  {
    if ( dly[row] > 0 )
      lmax[row] -= dly[row];

    if ( lmax[row] < 0 )
      lmax[row] = 0;
    else
      dly[row]++;
  }
}

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2015, 17:56
Beitrag #6
RE: arduino nano und 1602lcd als (mono)bargraph
(06.01.2015 17:52)rkuehle schrieb:  Der Code sollte ohne Faxen laufen.
...zumindest die ersten 49 Tage.

Zitat:
Code:
if ( millis() < lastT )
    return;
  lastT += T_REFRESH;

Das gehört so:
Code:
if ( millis() - lastT < T_REFRESH )
    return;
  lastT = millis();

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2015, 18:09
Beitrag #7
RE: arduino nano und 1602lcd als (mono)bargraph
Hallo,

für einen Bargraphen mit LCD gibt es eine Library, damit ist der Programmieraufwand geringer. Funktioniert auch gut (ich habe bereits ein bisschen damit rumgespielt).

http://playground.arduino.cc/Code/LcdBarGraph

Es sind auch passende Beispiele zum Abschauen dabei.

Gruß Rainer
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2015, 18:20 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2015 18:20 von rkuehle.)
Beitrag #8
RE: arduino nano und 1602lcd als (mono)bargraph
@Thorsten
RischtischExclamation
Habe ich schlicht gepennt Huh
Danke!
Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  TimerOne und I²C und Arduino Nano Mathias 0 25 Gestern 18:22
Letzter Beitrag: Mathias
  Arduino Nano --> ATtiny 84A Mathias 25 893 15.07.2016 16:26
Letzter Beitrag: hotsystems
  Programme vom UNO auf nano , mini Pro portieren Probleme anwo 19 1.175 17.04.2016 21:12
Letzter Beitrag: hotsystems
  I²C vom NANO zum PI Probleme mit High/Low Bit Tobias1984 4 331 29.02.2016 00:00
Letzter Beitrag: hotsystems
  Problem beim Upload auf Nano (vermutlich allgemein) Lemartes 9 836 01.02.2016 22:24
Letzter Beitrag: Lemartes
  Daten auf SD-Card werden nur geschrieben, wenn Nano am USB-Port hängt Nathea 6 481 24.01.2016 16:42
Letzter Beitrag: Nathea
  Ausgabeproblem mit 1602LCD I2C Treeshort 13 1.334 15.01.2016 18:31
Letzter Beitrag: rewa6358
  Meerwasser Überwachung mit Arduino-Nano Tim_171 30 2.359 13.01.2016 06:30
Letzter Beitrag: Bitklopfer
  16Bit PWM bei Uno bzw. Nano a.part 2 517 23.11.2015 20:32
Letzter Beitrag: a.part
  Arduino nano und ESP8266 Junano 1 1.088 17.11.2015 07:02
Letzter Beitrag: Junano

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste