Bin am verzweifeln...Modellbaurakete

Hallo Freunde,
ich habe seit paar Tagen die Arduino/Adafruit Komponenten für mich entdeckt, da ich damals schon LEDs an meine Modellautos angeschraubt habe, glaubt ihr mich nicht wie faszinierend das ganze für mich ist. Allerdings bin ich noch komplett am Anfang und verstehe nur Bahnhof... :grin: Ich bin allerdings schon fleißig C & C++ am lernen damit ich die Basics verstehe und selbst schreiben kann.

Leider sinkt meine Motivation (kenne WIRKLICH alle Videos auf YT :rofl:) immer immer mehr, da ich selbst einfachste videos mit "Hello World" auf einem 0.96" Display nicht wiedergeben kann. Ich bin bei all den Videos auf ein Projekt gestoßen wovon ich wirklich begeistert bin. Es geht um eine Modellbau Rakete die mit einem Gyro System (MPU6050) und BMP280 gesteuert sind. Mir ist durchaus bewusst, dass es nicht viel Sinn macht allerdings finde ich das System überragend.
Folgendes ist geplant: Ich will mit dem System einen kleinen mini Computer selbst bauen (ausschmücken mit Acrylplatten und und und) das Diagramm wie alles angeschlossen ist hab ich aus dem YT Videos exakt genau so angeschlossen aber der zeigt mir die ganze Zeit den Fehlercode:

/var/folders/m_/thd4bfhs18jfgtxfjvjsn2jh0000gn/T/arduino_modified_sketch_831572/sketch_feb15d.ino:8:0: warning: "BMP280_ADDRESS" redefined
#define BMP280_ADDRESS 0x76

In file included from /var/folders/m_/thd4bfhs18jfgtxfjvjsn2jh0000gn/T/arduino_modified_sketch_831572/sketch_feb15d.ino:7:0:
/Users/dimitritschitshin/Documents/Arduino/libraries/Adafruit_BMP280_Library/Adafruit_BMP280.h:34:0: note: this is the location of the previous definition
#define BMP280_ADDRESS (0x77) /**< The default I2C address for the sensor. */

Ich weiß auch, dass es ziemlich dumm ist mit direkt so einem Projekt anzufangen aber dieses Projekt hat mich so gepackt, dass es als in meinem Kopf ist.

Ich bin mir nicht sicher ob den den YT Link zum Projekt bzw. denCode posten darf. Deshalb erstmal meine Fehlermeldung vielleicht hat jemand die Zeit und Lust mir kurz zu erklären was da genau gewollt ist von mir...und vorallem wie ich das Problem lösen kann.

Vielen Dank im Voraus

zeig mal den kompletten Sketch.

Dazu in der IDE auf BEARBEITEN - FÜR FORUM KOPIEREN
udn dann hier einfügen.

Update zum o.g. Fehlercode: Habe die BMP280 Adresse von 0x76 auf 0x77 und in Klammern gesetzt konnte den Sketch hochladen allerdings wird nur weiße Pixel auf dem Display gezeigt und nur ein Servo dreht sich :joy: (hab mich gefreut wie ein Kleinkind als der erfolgreich hochgeladen wurde :D)

hier ist der Code:

#include "U8glib.h"
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <Servo.h>
#include <SimpleKalmanFilter.h>
#include <Adafruit_BMP280.h>
#define BMP280_ADDRESS (0x77)
Adafruit_BMP280 bmp;

SimpleKalmanFilter pressureKalmanFilterx(1, 0.2, 0.3);
SimpleKalmanFilter pressureKalmanFiltery(1, 0.2, 0.3);
SimpleKalmanFilter pressureKalmanFilter(1, 0.2, 0.3);

Adafruit_MPU6050 mpu;
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);

int x1 = 0;
int y1 = 0;
int z1 = 0;


int x = 0;
int y = 0;
int z = 0;

Servo servo1; 
Servo servo2;
Servo servo3;
Servo servo4;

////////////////////////////////////////////////////////
 

  
  ////////////////////////////////////////////////////////////
int value  = 0;

void setup(void) {
  Serial.begin(115200);

  Serial.println("altitude, estimated_altitude");
  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP280 sensor, check wiring!");
    while (1);
 
}
  
  mpu.begin();

  // set accelerometer range to +-8G
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);

  // set gyro range to +- 500 deg/s
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);

  // set filter bandwidth to 21 Hz
  mpu.setFilterBandwidth(MPU6050_BAND_260_HZ);

  //delay(10);
  servo1.attach(7);
  servo2.attach(6); 
  servo3.attach(5); 
  servo4.attach(4); 

  servo1.write(90);
  servo2.write(90);
  servo3.write(90);
  servo4.write(90);

   if (u8g.getMode() == U8G_MODE_R3G3B2)
  {
    u8g.setColorIndex(255);     // white
  }
  else if (u8g.getMode() == U8G_MODE_GRAY2BIT)
  {
    u8g.setColorIndex(3);         // max intensity
  }
  else if (u8g.getMode() == U8G_MODE_BW)
  {
    u8g.setColorIndex(1);         // pixel on
  }
  else if (u8g.getMode() == U8G_MODE_HICOLOR)
  {
    u8g.setHiColorByRGB(255, 255, 255);
  }

  for (int a = 0; a < 30; a++)
  {
    u8g.firstPage();

    do
    {
      u8g.setFont(u8g_font_fub11);
      u8g.setFontRefHeightExtendedText();
      u8g.setDefaultForegroundColor();
      u8g.setFontPosTop();
      u8g.drawStr(4, a, "BMP280 Sensor");
    }
    while (u8g.nextPage());
  }

if (!bmp.begin())
  {
    u8g.firstPage();

    do
    {
      u8g.setFont(u8g_font_fub11);
      u8g.setFontRefHeightExtendedText();
      u8g.setDefaultForegroundColor();
      u8g.setFontPosTop();
      u8g.drawStr(4, 0, "BMP085 Sensor");
      u8g.drawStr(4, 20, " ERROR!");
    }
    while (u8g.nextPage());

    Serial.println("BMP085 sensor, ERROR!");

    while (1) {}
  }
}

void loop() {

   float altitude = bmp.readAltitude(1012.2);
  float estimated_altitude = pressureKalmanFilter.updateEstimate(altitude);

  u8g.firstPage();

  do
  {
     u8g.setFont(u8g_font_fub11);
    u8g.setFontRefHeightExtendedText();
    u8g.setDefaultForegroundColor();
    u8g.setFontPosTop();
    u8g.drawStr(2, 0, "Altitude(m)");
    u8g.setPrintPos(75, 0);
    u8g.drawStr(4, 20, "Sensed:");
    u8g.setPrintPos(75, 20);
    u8g.print(altitude);
   u8g.drawStr(4, 40, "Filtered:");
   u8g.setPrintPos(75, 40);
    u8g.print(estimated_altitude);
  }
  while (u8g.nextPage());
 

   
//  Serial.print(altitude); // this should be adjusted to your local forcase
//  Serial.print(" ");
//  Serial.println(estimated_altitude);
  


  /* Get new sensor events with the readings */
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  x1 = a.acceleration.x;
  y1 = a.acceleration.y;
  z1 = a.acceleration.z;

    float x = pressureKalmanFilterx.updateEstimate(x1);
    float y = pressureKalmanFiltery.updateEstimate(y1);



  
Serial.print(x);Serial.print(" ");Serial.println(y); 
if (x < 10 && x > 0 && y < 4 && y > -4){    //זה טוב
  Serial.println("up");
   int value1 = map(x,  0, 10, 90, 180);
   servo1.write(value1);
   int value2 = map(x,  0, 10, 90, 0);
   servo2.write(value2);
   
   Serial.print(value);
  }
else if (x > -10 && x < 0 && y < 4 && y > -4){
  Serial.println("down");
  int value3 = map(x,  -10, 0,0, 90);
  servo1.write(value3);
  int value4 = map(x,  -10, 0, 180, 90);
  servo2.write(value4);
  Serial.print(value);
  }

if (y < 10 && y > 0 && x < 4 && x > -4){ //זה טוב 
  Serial.println("Right");
  int value5 = map(y,  0, 10, 90, 180);
  servo3.write(value5);
  int value6 = map(y,  0, 10, 90, 0);
  servo4.write(value6);
  Serial.print(value);
  }
else if (y > -10 && y < 0  && x < 4 && x > -4){
  Serial.println("left");
  int value7 = map(y,  -10, 0, 0, 90);
  servo3.write(value7);
  int value8 = map(y,  -10, 0, 180, 90);
  servo4.write(value8);
  Serial.print(value);
  }

}

Dir fehlt im Setup

u8g2.begin();

Dadurch startet das Display nicht.
Habe dein Code nur überflogen.
was für Display ist das Link bitte sehe

u8g.setHiColorByRGB(255, 255, 255);

Hii Bist gut
Du hast ein SW Display deklariert willst aber in Farbe mansche Sachen darstellen :wink:
Ok im dem Fall wird das Display weiß. trotzt dem

Ziehe alles zurück Du nutzt ja die alte U8GLIB

Ja wie gesagt ich verstehe ehrlich gesagt fast Überhaut nichts.. mein Plan war eigentlich das Projekt so nachzubauen, dass alles genauso verbinden, Code den er online gestellt hat übernehmen und fertig. aber mir scheint das ist ein ziemlich großes Ding. hab es mir leichter vorgestellt... schade
Display ist von Amazon 0.96" OLED Display SSD1306

Das mit dem Display ist mir eben auch aufgefallen. RGB steht für verschieden Farben mein Display ist nur weiß.

Scheint so aussehen das im YT ein Farbdisplay nutzt wurde.
Geh in die U8g2 Lib dort sind Beispiele, bringe erst mall das Display zum laufen.
Danach langsam alles aufbauen.

Viele, sehr viele Tutorials, und Videos enthalten Fehler, wichtige Dinge sind nicht exakt erklährt oder Dinge als gegeben angesehen.

Du kannst aber uns fragen, Gemeinsam wissen wir alles.

Grüße Uwe

Gute Vorgehensweise.

Schliesse das Objekt (Display / Sensor) immer HINTER-EINANDER an.

Also MC-Board nehmen und das Display anklemmen. Dann die Libs laden und das kleinste Beispiel (bei einen Display das "Hello Word") laden und laufen lassen.

Das hat 2 Gründe.

  1. Wenn es Zeigt was es soll, ist man sicher das die Hardware sauber verbunden ist.
  2. Man schaut sich den Code an. Sieht wie der andere das gemacht hat, und erweitert dadurch sein Wissen.

Nun nimmt man das nächste Teil.
Baut es ein, Beispiel laden und schauen.

Grund wieso hintereinander.
Die Fehlersuche in der Hard- + Software ist so einfacher weil man gleich ein Verdächtigen hat.

Gruß

Pucki

ps. : Und alles ohne YT :wink: Ich mag diese Videos nicht, die meisten nerven.

Du kannst nicht mal mit dem Roller fahren, willst aber zum Mond fliegen? Ist das clever? An so einem Gyro System sind hier schon ein paar Leute gescheitert, Du wärst nicht der Erste.

Wenn Du das mit Leidensfähigkeit für Rückschläge und Durchhaltevermögen paarst, kannst Du Spaß und Erfolg haben.

Der Autor schreibt: "There will be no more development for U8glib. Please use u8g2." Das deutet auf ein veraltetes Programm hin. Du kannst

  1. das vorhandene Projekt aktualisieren. Dazu mußt Du das Programm verstehen lernen.
  2. Dir ein aktuelles Projekt suchen.

Was einfacher ist, hängt von vielen Faktoren ab, das vermag ich nicht einzuschätzen. Du hast die Qual der Wahl :wink:

was ist dein Display für ein Display. ??
Und was soll es anzeigen.

Wenn es ein 1306 Chip hat (wovon ich ausgehe) und nur Text anzeigen soll, reicht das völlig aus. Als Libs.

#include <Wire.h>
#include "SSD1306Ascii.h"   // Copyright (c) 2011..2023 Bill Greiman
#include "SSD1306AsciiWire.h"
#define oled_adresse 0x3C

SSD1306AsciiWire oled;

Gruß

Pucki

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.