INA 219 if-Funktion bei I2C

Guten Abend !

Ich komme mit meinem Projekt einfach nicht wirklich weiter. Mir fehlt das Wissen und Können , nicht aber das Wollen.
Vielleicht ist hier jemand der mir bei einer “if” Funktion und I2C weiterhelfen kann.

Ich habe einen Sketch der soweit läuft und ich möchte mit der if-Funktion ab einem bestimmten Stromwert dass an Pin 13 eine LED auf HIGH gesetzt wird. So will ich die entfernte LED überwachen.

Das einfügen der Funktion gelingt mir nicht.

Ich versuche hier mal den Sketch einzubinden:

//Strommessung mit INA219 und OLED 1306. Dieser Sketch funtioniert und mißt den Strom meiner LED-Lampe mit ca 200mA bei 12V DC
// GitHub - adafruit/Adafruit_INA219: INA219 Current Sensor
// GitHub - adafruit/Adafruit_SSD1306: Arduino library for SSD1306 monochrome 128x64 and 128x32 OLEDs

#include <Wire.h>
#include <Adafruit_INA219.h>
#include <Adafruit_SSD1306.h>
Adafruit_INA219 ina219;

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

float shuntvoltage = 0;
float busvoltage = 0;
float current_mA = 0;
float power_mW = 0;

void setup() {

// initialize ina219 with default measurement range of 32V, 2A
ina219.begin();

// ina219.setCalibration_32V_2A(); // set measurement range to 32V, 2A (do not exceed 26V!)

ina219.setCalibration_32V_1A(); // set measurement range to 32V, 1A (do not exceed 26V!)
// ina219.setCalibration_16V_400mA(); // set measurement range to 16V, 400mA

// initialize OLED display
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);// alte adresse war 0x3C
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);// bestimmt die Schriftgröße
display.display();

}

void loop() {
// read data from ina219
shuntvoltage = ina219.getShuntVoltage_mV();
busvoltage = ina219.getBusVoltage_V();
current_mA = ina219.getCurrent_mA();
power_mW = ina219.getPower_mW();

// show data on OLED
display.clearDisplay();

display.setCursor(0, 0);
display.print(busvoltage);
display.print(" V");

display.setCursor(50, 0);
display.print(shuntvoltage);
display.print(" mV");

display.setCursor(0, 10);
display.print(current_mA);
display.print(" mA");

display.setCursor(0, 20);
display.print(power_mW);
display.print(" mW");

display.display();

}

Gruß Ronald

sketch_strommessung_INA219_mit_OLED_ok.ino (1.72 KB)

Wenn du den Sketch noch in Code-Tags postest, kann es los gehen. :wink:

Vielleicht ist hier jemand der mir bei einer "if" Funktion und I2C weiterhelfen kann.

Ich nicht, aber das nur, weil es keine IF Funktion gibt und auch, weil eine IF Anweisung hier unnötig ist.

void loop() {
   // read data from ina219
  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();
  digitalWrite(13, current_mA > 220.0);
// weiter wie gehabt.

Das einfügen der Funktion gelingt mir nicht.

Meinst du eventuell eine if Anweisung?

…ab einem bestimmten Stromwert dass an Pin 13 eine LED auf HIGH gesetzt wird

void loop() {
   // read data from ina219
  float current_mA = ina219.getCurrent_mA();
  if (current_mA > 12.34)
     digitalWrite(13,HIGH);
  else
     digitalWrite(13,LOW);
  display.setCursor(0, 10);
  display.print(current_mA);
  display.print(" mA  ");

}

so vielleicht?

Da ist immerhin ein deutlich sichtbares if drin. Auch wenn combie zeigt, dass man für die Aufgabe gar kein if braucht

(deleted)

Ich danke Euch erst einmal dafür dass Ihr Euch den Sketch überhaupt angesehen habt und geantwortet habt!

Ich soll den also in Teilen nochmals posten ? Gut kann ich machen, wollte aber zunächst mal eine Übersicht geben.

Mein Problem:

Wo bitte soll ich die if-Funktion einfügen? Und ich muss dabei doch einen Wert (shuntvoltage ?) als Grundlage für die Werte-überwachung bestimmen ? Einen InputPin habe ich ja nicht.

Hier die Loop

void loop() {
// read data from ina219
shuntvoltage = ina219.getShuntVoltage_mV();
busvoltage = ina219.getBusVoltage_V();
current_mA = ina219.getCurrent_mA();
power_mW = ina219.getPower_mW();

// show data on OLED
display.clearDisplay();

display.setCursor(0, 0);
display.print(busvoltage);
display.print(" V");

display.setCursor(50, 0);
display.print(shuntvoltage);
display.print(" mV");

display.setCursor(0, 10);
display.print(current_mA);
display.print(" mA");

display.setCursor(0, 20);
display.print(power_mW);
display.print(" mW");

display.display();

}

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

(deleted)

Hallo Peter !

Ihr werdet Euch sicherlich wundern, aber ich verstehe nur Bahnhof. Den Grenzwert festzulegen ist ja kein Problem , der liegt bei 50 mA , aber

ein pinMode(LED_BUILTIN,OUTPUT); programmieren da wäre ich für Hilfe sehr dankbar. Wo füge ich das ein und welche Werte ??

//Strommessung mit INA219 und OLED 1306. Dieser Sketch funtioniert und mißt den Strom meiner LED-Lampe mit ca 200mA bei 12V DC
// https://github.com/adafruit/Adafruit_INA219
// https://github.com/adafruit/Adafruit_SSD1306

#include <Wire.h>
#include <Adafruit_INA219.h>
#include <Adafruit_SSD1306.h>
Adafruit_INA219 ina219;

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

float shuntvoltage = 0;
float busvoltage = 0;
float current_mA = 0;
float power_mW = 0;


void setup() {
  pinMode(LED_BUILTIN,OUTPUT);  // <<<---- 
  // initialize ina219 with default measurement range of 32V, 2A
  ina219.begin();

  // ina219.setCalibration_32V_2A();    // set measurement range to 32V, 2A  (do not exceed 26V!)
 
  ina219.setCalibration_32V_1A();    // set measurement range to 32V, 1A  (do not exceed 26V!)
  // ina219.setCalibration_16V_400mA(); // set measurement range to 16V, 400mA

  // initialize OLED display
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);// alte adresse war 0x3C
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);// bestimmt die Schriftgröße
  display.display();


}

void loop() {
   // read data from ina219
  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();
  digitalWrite(LED_BUILTIN, current_mA > 50.0); // <<<----

  // show data on OLED
  display.clearDisplay();

  display.setCursor(0, 0);
  display.print(busvoltage);
  display.print(" V");

  display.setCursor(50, 0);
  display.print(shuntvoltage);
  display.print(" mV");

  display.setCursor(0, 10);
  display.print(current_mA);
  display.print(" mA");

  display.setCursor(0, 20);
  display.print(power_mW);
  display.print(" mW");

  display.display();

}

combie:

//Strommessung mit INA219 und OLED 1306. Dieser Sketch funtioniert und mißt den Strom meiner LED-Lampe mit ca 200mA bei 12V DC

// https://github.com/adafruit/Adafruit_INA219
// https://github.com/adafruit/Adafruit_SSD1306

#include <Wire.h>
#include <Adafruit_INA219.h>
#include <Adafruit_SSD1306.h>
Adafruit_INA219 ina219;

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

float shuntvoltage = 0;
float busvoltage = 0;
float current_mA = 0;
float power_mW = 0;

void setup() {
 pinMode(LED_BUILTIN,OUTPUT);  // <<<----
 // initialize ina219 with default measurement range of 32V, 2A
 ina219.begin();

// ina219.setCalibration_32V_2A();    // set measurement range to 32V, 2A  (do not exceed 26V!)

ina219.setCalibration_32V_1A();    // set measurement range to 32V, 1A  (do not exceed 26V!)
 // ina219.setCalibration_16V_400mA(); // set measurement range to 16V, 400mA

// initialize OLED display
 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);// alte adresse war 0x3C
 display.clearDisplay();
 display.setTextColor(WHITE);
 display.setTextSize(1);// bestimmt die Schriftgröße
 display.display();

}

void loop() {
  // read data from ina219
 shuntvoltage = ina219.getShuntVoltage_mV();
 busvoltage = ina219.getBusVoltage_V();
 current_mA = ina219.getCurrent_mA();
 power_mW = ina219.getPower_mW();
 digitalWrite(LED_BUILTIN, current_mA > 50.0); // <<<----

// show data on OLED
 display.clearDisplay();

display.setCursor(0, 0);
 display.print(busvoltage);
 display.print(" V");

display.setCursor(50, 0);
 display.print(shuntvoltage);
 display.print(" mV");

display.setCursor(0, 10);
 display.print(current_mA);
 display.print(" mA");

display.setCursor(0, 20);
 display.print(power_mW);
 display.print(" mW");

display.display();

}

Toll. Ein Beitrag, der Nur aus dem Zitat des vorherigen Beitrags besteht.
Was soll uns das sagen?

Gruß Tommy

combie:

//Strommessung mit INA219 und OLED 1306. Dieser Sketch funtioniert und mißt den Strom meiner LED-Lampe mit ca 200mA bei 12V DC

// https://github.com/adafruit/Adafruit_INA219
// https://github.com/adafruit/Adafruit_SSD1306

#include <Wire.h>
#include <Adafruit_INA219.h>
#include <Adafruit_SSD1306.h>
Adafruit_INA219 ina219;

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

float shuntvoltage = 0;
float busvoltage = 0;
float current_mA = 0;
float power_mW = 0;

void setup() {
 pinMode(LED_BUILTIN,OUTPUT);  // <<<----
 // initialize ina219 with default measurement range of 32V, 2A
 ina219.begin();

// ina219.setCalibration_32V_2A();    // set measurement range to 32V, 2A  (do not exceed 26V!)

ina219.setCalibration_32V_1A();    // set measurement range to 32V, 1A  (do not exceed 26V!)
 // ina219.setCalibration_16V_400mA(); // set measurement range to 16V, 400mA

// initialize OLED display
 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);// alte adresse war 0x3C
 display.clearDisplay();
 display.setTextColor(WHITE);
 display.setTextSize(1);// bestimmt die Schriftgröße
 display.display();

}

void loop() {
  // read data from ina219
 shuntvoltage = ina219.getShuntVoltage_mV();
 busvoltage = ina219.getBusVoltage_V();
 current_mA = ina219.getCurrent_mA();
 power_mW = ina219.getPower_mW();
 digitalWrite(LED_BUILTIN, current_mA > 50.0); // <<<----

// show data on OLED
 display.clearDisplay();

display.setCursor(0, 0);
 display.print(busvoltage);
 display.print(" V");

display.setCursor(50, 0);
 display.print(shuntvoltage);
 display.print(" mV");

display.setCursor(0, 10);
 display.print(current_mA);
 display.print(" mA");

display.setCursor(0, 20);
 display.print(power_mW);
 display.print(" mW");

display.display();

}

Es tut mir wirklich leid Tommy! Es ist keine Absicht. Im Eingabefenster hatte ich den Code mit den erforderlichen Zusätzen versehen.

Ich versuche das zu ändern. Bin halt nicht oft im Forum. Es ist keine Absicht.

#include <Wire.h>
#include <Adafruit_INA219.h>
#include <Adafruit_SSD1306.h>
Adafruit_INA219 ina219;

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

float shuntvoltage = 0;
float busvoltage = 0;
float current_mA = 0;
float power_mW = 0;


void setup() {
  
  // initialize ina219 with default measurement range of 32V, 2A
  ina219.begin();

  // ina219.setCalibration_32V_2A();    // set measurement range to 32V, 2A  (do not exceed 26V!)
  
  ina219.setCalibration_32V_1A();    // set measurement range to 32V, 1A  (do not exceed 26V!)
  // ina219.setCalibration_16V_400mA(); // set measurement range to 16V, 400mA

  // initialize OLED display
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);// alte adresse war 0x3C
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);// bestimmt die Schriftgröße 
  display.display();


}

void loop() {
   // read data from ina219
  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();

  // show data on OLED
  display.clearDisplay();

  display.setCursor(0, 0);
  display.print(busvoltage);
  display.print(" V");

  display.setCursor(50, 0);
  display.print(shuntvoltage);
  display.print(" mV");

  display.setCursor(0, 10);
  display.print(current_mA);
  display.print(" mA");

  display.setCursor(0, 20);
  display.print(power_mW);
  display.print(" mW");

  display.display();

}

Das wird ja nicht besser. Schreib doch einfach mal ohne Zitat, welche Probleme Du mit dem Posting von combie hast.

Gruß Tommy

Posted by der_elektrische
OK...
Und jetzt?

Combi Danke !!

Ich werde das mal ausprobieren und gebe dann ein Feedback. Das hilft mir weiter.

Wenn es funktioniert hätte ich aber noch Fragen.

Es funktioniert so wie es soll, danke!!

Nur wieso reicht digitalWrite (LED_BUILTIN, current_mA ...... ); aus ?

Das bedeutet doch ich erstelle einen digitalen Eingang ??

Tommy:

Ich muss hier öfter mitlesen und dann klappt das möglicherweise besser. Ich kann mich nur noch mal entschuldigen!

Aber ich möchte mich ausdrücklich bei den hilfreichen Usern für die Lösungsansätze und besonders bei combie bedanken.

Ronald