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
I2C-Scanner
05.01.2019, 20:03
Beitrag #1
I2C-Scanner
Hallo zusammen,
suche mal wieder Hilfe.
Ich habe mir ein kleines Modul gebaut,um mir von div. I2C-Bauelementen die Adresse anzuzeigen.Das funktioniert auch soweit ganz prima.Nun möchte ich aber die im Modul verbauten I2C-Adressen ( 0x3c für OLED-Display , 0x58 und 0x68 für das RTC ) nicht mit anzeigen lassen.
Habe schon so einiges ausprobiert aber irgendwie klappt das nicht richtig.
Bis jetzt schaffe ich es nur,dass eine Adresse nicht angezeigt wird.Ich habe es auch schon mit einer UND Anweisung versucht,aber ohne erfolg.
Im Bild wird z.B. die Adresse 0x58 nicht mit angezeigt.

Code:
/*

Bernd_HF


*/

#include "U8glib.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Time.h>       // Time Manipulation
#include <DS1307RTC.h>  // DS1307 RTC
#include <Wire.h>

//________________________________________________________________________________​____________________

float temperature;
char temperatureString[10] = "-";
char timebuf[10];       // Time
char datebuf[12];       // Date
int year2digit;         // 2 digit year
int year4digit;         // 4 digit year
char adress[2];
const int SwitchTime = 10000; //switching time in millis

byte error, address;
int nDevices;

//________________________________________________________________________________​_____________________

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);    // OLED-Display mit i2C-Bus

//________________________________________________________________________________​___________________

void anzeigeDisplay(void)
{
   u8g.setFont(u8g_font_9x18);
   u8g.drawStr(0,10,"Bernd HF-Tech.");
   u8g.setFont(u8g_font_9x18);
   u8g.drawLine(0, 15, 127, 15);
   u8g.setFont(u8g_font_6x12);
   u8g.setPrintPos(0, 64);        // set position 1 Spalte und Zeile 64
   u8g.print(timebuf);            // display Zeit
   u8g.setFont(u8g_font_6x12);    // set position
   u8g.drawStr(70,64,datebuf);    // display Datum
   u8g.setFont(u8g_font_9x18);    // set position

   nDevices = 0;
   int posi = 0;
for(address = 1; address < 120; address++ )
  {
// Der i2c-Scanner verwendet den Rückgabewert 7 der Wire.endTransmission,
//um festzustellen, ob ein Gerät die Adresse bestätigt hat.    
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    
if (error == 0)
    {
      u8g.setFont(u8g_font_9x18);///
      u8g.drawStr(0,31,"I2C found Hex");
//***********************************************      
      if (address == 0x57)     // 0x3c,,0x57,0x68 sollen nicht angezeigt werden
      {
        address++;
        nDevices++;
      }
      else    
        {
      sprintf(adress, "%02x",address);
      u8g.setFont(u8g_font_9x18);
      u8g.drawStr(posi,50,adress);
      nDevices++;
      posi = posi + 25;
        }
    }
  }
}

//________________________________________________________________________________​_____________________
void setup(void)
{
  Serial.begin(9600);
  
}

//________________________________________________________________________________​_____________________

void loop()
{
// RTC-Zeit und Datum einlesen
tmElements_t tm;
if (RTC.read(tm))
{
year2digit = tm.Year - 30;  // 2 digit für Jahr
//year4digit = tm.Year + 1970;  // 4 digit für Jahr

sprintf(timebuf, "%02d:%02d:%02d",tm.Hour, tm.Minute, tm.Second); // Format für die Zeit
sprintf(datebuf, "%02d.%02d.%02d",tm.Day, tm.Month, year2digit);  // format für Datum

/********************************************/
  u8g.firstPage();  
  do {  
      anzeigeDisplay ();                            // Ausgabe von Zeit und Datum auf OLED
    
     }
     while( u8g.nextPage() );

}
  delay(1000);  // Delay
    
}
// Ende


Angehängte Datei(en) Thumbnail(s)
   

Es gibt Tage , da verlierst Du und es gibt Tage , da gewinnen die anderen .
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2019, 20:26
Beitrag #2
RE: I2C-Scanner
Ich würde es genau andersrum machen:
Code:
if (address != 0x57 && address != 0x3c && address != 0x68)     // 0x3c,,0x57,0x68 sollen nicht angezeigt werden
        {
      sprintf(adress, "%02x",address);
      u8g.setFont(u8g_font_9x18);
      u8g.drawStr(posi,50,adress);
      nDevices++;
      posi = posi + 25;
        }

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2019, 20:34 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2019 20:39 von BerndHF.)
Beitrag #3
RE: I2C-Scanner
Hallo Tommy56 ,
danke für die schnelle Antwort.Werde es gleich mal versuchen.
Gruß Bernd

Hallo Tommy56,
leider auch kein Erfolg.Es werden wieder alle 3 Adressen angezeigt.

Es gibt Tage , da verlierst Du und es gibt Tage , da gewinnen die anderen .
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2019, 20:51 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2019 20:52 von Tommy56.)
Beitrag #4
RE: I2C-Scanner
(05.01.2019 20:34)BerndHF schrieb:  Hallo Tommy56 ,
danke für die schnelle Antwort.Werde es gleich mal versuchen.
Gruß Bernd

Hallo Tommy56,
leider auch kein Erfolg.Es werden wieder alle 3 Adressen angezeigt.
Dann lass Dir mal in einem Serial.println(address,HEX) den Wert vor und in der Bedingung ausgeben.

Gruß Tommy

Edit: Fehler gesehen:
Du hast char address[2];
Richtig wäre byte address;

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2019, 21:15
Beitrag #5
RE: I2C-Scanner
Hallo Tommy56,
ich habe char address[2] in byte address[2] geändert.Leider ohne Erfolg.
Auszug aus Serial.print.

vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49
vor 57 , vor 68 , vor 3C , vor 48 , in 49

Gruß Bernd

Es gibt Tage , da verlierst Du und es gibt Tage , da gewinnen die anderen .
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2019, 21:30
Beitrag #6
RE: I2C-Scanner
Nein, nicht in byte adress[2] sondern einfach in byte adress;
Die Adresse ist nur ein einzelnes Byte, kein Array.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2019, 21:40
Beitrag #7
RE: I2C-Scanner
Leider ohne Erfolg.

call of overloaded 'drawStr(int&, int, char&)' is ambiguous

Gruß Bernd

Es gibt Tage , da verlierst Du und es gibt Tage , da gewinnen die anderen .
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2019, 21:51
Beitrag #8
RE: I2C-Scanner
Das ist ja auch Unsinn. Du musst unterscheiden zwischen der Adresse (byte) und ihrer Zeichenkettenrepräsentation. Das kannst Du nicht in die gleiche Variable packen.
Code:
sprintf(adress, "%02x",address);
Du weist einer byte-Variable eine Zeichenkette zu. Schau Dir mal ein paar Grundlagen an, da hapert es bei Dir heftig.
Du musst dafür eine neue Zeichenkettenvariable nehmen:
Code:
char addressStr[3];  // 3 weil 2 Nutzzeichen + '\0' als Abschlusszeichen
sprintf(adressStr, "%02x",address);
...
u8g.drawStr(posi,50,adressStr);
Schau Dir mal ein paar Grundlagen zu Zeichenketten an.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Scanner für I2C-Adressen? alpenpower 2 10.442 11.09.2013 18:39
Letzter Beitrag: alpenpower

Gehe zu:


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