Arduino Wert aus Tabelle?

Guten Tag,

ich habe ein kleines Problem mit meinem Arduino Code... Ich weiß leider nicht weiter.

ich habe hier schon mal angefangen ein Programm zu schreiben das mir mein Arduino Mega alle 2 sec. eine Temperatur anhand eines Ohm wertes aus gibt.

das Problem liegt jetzt aber dabei das ich den Ohm wert nicht in die Temperatur umwanden kann.

Ich habe mir eine Tabelle erstellt die angibt bei welchem Ohm wert welche Temperatur angezeigt werden soll.

Nun die Frage: Wie gleicht mir der Arduino die Gemessenen werte mit den vorhandenen ab und zeigt mir dann auf meinem OLED Display meine Temperatur an?

ich bedanke mich schon mal recht Herzlich für die antworten.

MfG Dennis

PS: falls es fragen gibt bitte melden!!

Das wäre der Bisher funktionierende Code

#include <GyverOLED.h>

GyverOLED<SSH1106_128x64> oled;

const uint8_t bitmap_32x32[] PROGMEM = {

 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0x70, 0x70, 0x30, 0x30, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF0, 0x70, 0x30, 0x30, 0x20, 0x00, 0x00,

 0x00, 0x30, 0x78, 0xFC, 0x7F, 0x3F, 0x0F, 0x0F, 0x1F, 0x3C, 0x78, 0xF0, 0xE0, 0xC0, 0x80, 0x80, 0x80, 0x40, 0xE0, 0xF0, 0xF8, 0xFC, 0xFF, 0x7F, 0x33, 0x13, 0x1E, 0x1C, 0x1C, 0x0E, 0x07, 0x00,

 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF9, 0xF7, 0xEF, 0x5F, 0x3F, 0x7F, 0xFE, 0xFD, 0xFB, 0xF1, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x1E, 0x33, 0x33, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x1F, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00,

};

int analogPin = 0;

int raw = 0;

int Vin = 5;

float Vout = 0;

float R1 = 330000;

float R2 = 0;

float buffer = 0;

void setup() {

 Serial.begin(9600);

 oled.init();

  

 oled.clear();

 oled.setScale(1);

 oled.update();

}

void loop() {

 raw = analogRead(analogPin);

 if(raw){

  buffer = raw * Vin;

  Vout = (buffer)/1024.0;

  buffer = (Vin/Vout) - 1;

  R2= R1 * buffer;

  delay(2000);

oled.home();

 oled.print("Temp1:");

 oled.update();

 oled.setCursor(5, 2);

 oled.update();

 oled.print(R2);

 oled.update();

 }

}

Bild zum Beitrag
Arduino, arduino mega
ESP8266-12F mit MPU6050?

Hallo, ich versuche gerade mit einem ESP-12F einen MPU6050 auszulesen. Der Sensor ist über IO04 und IO05 angeschlossen. Mit einem i2c Scanner wurde dieser auch erkannt mit der Adresse 0x68. Wenn ich den Sensor nun auslesen möchte, bekomme ich nur 0en oder -1en ausgegeben für Lage und Beschleunigung. Anderen Sensor und esp habe ich bereits ausprobiert.

Auf dem Bild der Aufbau. Ich benutze einen Programmiersockel für die ESPs.

Hier der Code:

#include <Wire.h>

const int MPU_addr = 0x68;

int16_t Acc_rawX, Acc_rawY, Acc_rawZ, Tmp, Gyr_rawX, Gyr_rawY, Gyr_rawZ;

void setup() {
  delay(1000);
  Wire.begin();
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B);
  Wire.write(0);
  Wire.endTransmission(true);
  Serial.begin(115200);
}

void loop() {
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr, 14, true);

  Acc_rawX = Wire.read() << 8 | Wire.read();
  Acc_rawY = Wire.read() << 8 | Wire.read();
  Acc_rawZ = Wire.read() << 8 | Wire.read();
  Tmp = Wire.read() << 8 | Wire.read();
  Gyr_rawX = Wire.read() << 8 | Wire.read();
  Gyr_rawY = Wire.read() << 8 | Wire.read();
  Gyr_rawZ = Wire.read() << 8 | Wire.read();

  Serial.print (Acc_rawX);
  Serial.print (" ");
  Serial.print (Acc_rawY);
  Serial.print (" ");
  Serial.print (Acc_rawZ);
  Serial.print (" ");
  Serial.print (Gyr_rawX);
  Serial.print (" ");
  Serial.print (Gyr_rawY);
  Serial.print (" ");
  Serial.println (Gyr_rawZ);
}
Bild zum Beitrag
Arduino, I2C, ESP8266
Spannungsteiler mit Signalen?

Hallo,

Ich habe eine Frage zu einer Schaltung die ich erstellen will. Ich bin mir noch nicht sicher ob diese so funktioniert wie ich mir das denke. Hier habe ich mal eine Zeichnung gemacht ich hoffe man kann alles erkennen.

Also ich habe ein Zähler Gerät das ans Stromnetz angeschlossen ist. Dieser Zähler (rechts) hat einen Pin an dem er Signale empfängt und immer wenn ein Signal kommt hoch zählt. Ich denke das ist Flanken basiert. Zusätzlich hat der Zähler 2 Pins + und - an dem man den Signalgeber anschließt und diesen mit Stromversorgt. Dieser ist bei mir der Sensor links. Er ist wie schon gesagt am Zähler angeschlossen. Der Zähler empfängt Spannungen ab 15V als Positiv, der sensor gibt ungefähr 20V Signale. Der Zähler ist bis her direkt mit dem Sensor verbunden und funktioniert perfekt. Jetzt will ich das Signal des Sensors zusätzlich noch mit einem Arduino nutzen. Da habe ich mir gedacht ich schalte parallel zur Signal Leitung ein Spannungsteiler damit ich 5V Signale bekomme anstatt 20V da der Arduino ja keine 20V Signale erträgt. Jetzt meine Frage kann ich diese Scjaltung so nutzen oder funktioniert das nicht ?

Wenn nicht wie kann ich das sonst umsetzten (wichtig ich will den Zähler weiterhin nutzen er benötigt min. 15V Signale und ZUSÄTZLICH den Arduino anschließen).

Ich hoffe man konnte alles verstehen.

Vielen Dank im voraus

Bild zum Beitrag
Technik, Elektronik, Elektrik, Elektrotechnik, Arduino, Elektrizität, Physik, Techniker, Technologie
Arduino Library hinzufügen verursacht Fehler?

Ich grüße euch!

Kurz und knapp: Wenn ich

#include "SD.h"
#include <SPI.h>
#include "DHT.h" 

oder gar nur

#include "SD.h"

in mein Projekt inkludieren will, findet es mein Display nicht mehr!

Ich möchte zwei Programme zusammenfassen: Temperatur + Data Logger und Display. Einzeln funktioniert es, doch wenn ich beim Display "Programm" die Library von der SD-Karte hinzufügen möchte, findet er kein Display mehr (SSD1306 allocation failed).

Ich bin am Ende meines Wissensschatzes und hoffe, ihr könnt helfen.

Programm vom Temperatur Datalogger
https://microcontrollerslab.com/dht22-data-logger-arduino-micro-sd-card/?fbclid=IwAR3eXzNh_y7-6tNhh7Qoh_wpzHY-_6lM7BwR1HcT2MaBO7rzwuswTJzs34A

Programm vom Display

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define SCREEN_ADDRESS 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

#define NUMFLAKES   10 // Number of snowflakes in the animation example
#define LOGO_HEIGHT  16
#define LOGO_WIDTH  16

static const unsigned char PROGMEM logo_bmp[] =
{
  0b00000000, 0b11000000,
  0b00000001, 0b11000000,
  0b00000001, 0b11000000,
  0b00000011, 0b11100000,
  0b11110011, 0b11100000,
  0b11111110, 0b11111000,
  0b01111110, 0b11111111,
  0b00110011, 0b10011111,
  0b00011111, 0b11111100,
  0b00001101, 0b01110000,
  0b00011011, 0b10100000,
  0b00111111, 0b11100000,
  0b00111111, 0b11110000,
  0b01111100, 0b11110000,
  0b01110000, 0b01110000,
  0b00000000, 0b00110000
};

void setup()
{
  Serial.begin(9600);
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  
  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));

    for(;;); // Don't proceed, loop forever
  }

  // Show initial display buffer contents on the screen --
  // the library initializes this with an Adafruit splash screen.
  display.display();
  delay(2000); // Pause for 2 seconds
  // Clear the buffer
  display.clearDisplay();
  // Draw a single pixel in white
  display.drawPixel(10, 10, SSD1306_WHITE);
  delay(20000);
  display.clearDisplay();
  // Show the display buffer on the screen. You MUST call display() after
  // drawing commands to make them visible on screen!
  display.display();
  delay(2000);
}

void loop()
{
}
Computer, programmieren, Arduino, Arduino Uno
Arduino Stepper Motor mit TMC2208 ansteuern?

Hallo,

ich versuche gerade meinen Stepper Motor mit dem Arduino anzusteuern dazu nutze ich den Stepper Motor Treiber TMC2208. Ich habe jetzt das Problem, dass ich keine Ahnung habe wie ich den ansteuern kann. Im Internet habe ich jetzt schon lange gesucht viele machen das einfach mit der Stepper.h Bibliothek. Die die das machen haben aber alle nicht den Stepper Treiber.

Dann habe ich explizit nach Codes mit diesem Treiber gesucht und das gefunden:

#define EN_PIN    13 								
#define STEP_PIN  54 								

#include <TMC2208Stepper.h>							
TMC2208Stepper driver = TMC2208Stepper(&Serial);														

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

	pinMode(EN_PIN, OUTPUT);
	pinMode(STEP_PIN, OUTPUT);

	driver.pdn_disable(1);							
	driver.I_scale_analog(0);						
	driver.rms_current(500);						
	driver.toff(0x2);								

	digitalWrite(13, LOW);			
}

void loop() {
	digitalWrite(STEP_PIN, !digitalRead(STEP_PIN));
	delay(10);
}

Diesen Code habe ich dann auch mal drauf geladen es hat alles funktioniert, das heißt der Stepper dreht sich durchgehend (Geschwindigkeit je nach delay Einstellung).

Mein Problem ist ich verstehe diesen Code nicht wirklich. Ich weiß, dass sich der Motor dreht weil der Zustand des StepPins ständig hin und her wechselt weiß aber nicht warum das so sein muss. Es wäre auch gut wenn mir jemand die Zeilen die mit driver. beginnen erklären könnte :D

Da ich den Code nicht richtig verstehe, kann ich ihn nicht nutzen um ihn auf meine Anforderungen umzubauen. Zum Beispiel , dass er nur zu einer Bedingung dreht und nur eine gewisse Zeit lang oder eine gewisse Anzahl an Steps. Kann mir jemand sagen wie ich das umsetzten könnte?

Geht das vielleicht auch komplett ohne die Treiber Bibliothek? (Nur mit der Stepper Bibliothek? Oder ganz ohne?)

Ich weiß das ist womöglich eine komplexe Frage wäre aber sehr dankbar wenn sie mir jemand beantworten könnte.

PS. Ich habe die Stepper und Treiber im Moment nicht bei mir bin aber was das Thema angeht recht im Stress deshalb muss ich versuchen den Code zu schreiben ohne ihn direkt ausprobieren zu können.

Vielen Dank :D

Computer, Technik, Programm, Elektronik, programmieren, Elektrotechnik, Motor, Arduino, Technologie
Game Controller selber bauen / programmieren?

Wie kann ich mir einen Gamecontroller selber bauen? Evt. mit einem Arduino ?

Mein Vorhaben ist (siehe Bild) meinem Laptop seitlich ein paar Griffe (3d-Gedruckt) zu verpassen und dort hinein in den Griff, die Controllersteuerung einzubauen. Ähnlich wie bei der Switch vom Konzept. Nun brauch ich ein System oder Bauteile mir einen Custom Controller zu bauen. Ziel sollte sein, vom Umfang die Funktion eines Xbox oder PS Controllers ab zu bilden.

Ähnlich wie das Steamdeck soll das teil später genutzt werden.

Mein erstes Versuch war es einen Xbox Controller zu schlachten und diese Technik zu verwenden, dafür ein 3d-gedrucktes Gehäuse in der die Knöpfe und Steuersticks passen und per USB ein zu stecken, jedoch sind diese alle auf einer Platine und somit nicht lageunabhängig.

Ich habe mal aufgezeichnet wie die Knöpfe angeordnet sein sollte, ich suche hier die Technik für in das Gehäuse. Das Gehäuse selbst kann Dank 3D-Druck beliebig konstruiert werden.

Der Laptop hat unter anderem Touch, was sich dafür eignet bequem Windows zu bedienen.

Ich hoffe ihr habt verstanden was ich suche, und ihr könnt mir helfen.

Vielen Dank :D

EDIT: Ich habe das ganze über einen Arduino Leonardo realisieren können, mit dem funktionsumfang eines Xbox Controllers. Der Leonardo kann einfach als USB-Device verwendet werden - z.B. um eine Tastatur oder Maus zu emulieren. Und das Zubehör kann auch easy über Berrybase, Alixpress...etc. beschafft werden.

Beim Code bin ich aktuell noch dran.

Bild zum Beitrag
Computer, Computerspiele, Technik, Elektronik, programmieren, Arduino, Technologie, Controller, 3D-Drucker, Raspberry Pi, Spiele und Gaming
mehrere Funktionen mit einem Taster ausführen?

Hallo

Ich möchte, dass ich wenn ich den Taster 1x drücke, die LEDs Weiss sind und wenn ich ihn 2x drücke, dass sie z.B. Blau sind. Wie kann ich so etwas machen?

Ich habe den Code, damit sie weiss sind schon einmal. Doch wie kann ich bei 2x drücken eine Funktion ausführen?



#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif




int tasterPin = 5; //taster an pin5






#define PIN        4 // An welchem Pin ist die LED angeschlossen


#define NUMPIXELS 60 // Anzahl LEDs




Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);


#define DELAYVAL 30 // Definiert, dass die Variabel DELAYVAL 30millisekunden pause bedeutet




void setup() {


  //
  Serial.begin(115200);
  Serial.println();
  Serial.println("ESP gestartet");


  pinMode(tasterPin, INPUT_PULLUP);
  //




  //einstellungen für LEDs
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // nur, falls man eine externe energiequelle hat


  pixels.setBrightness(255); // Helligkeit auf 50 - höchster wert : 255
  pixels.begin();
}
//einstellungen für LEDs ende


void loop() {




  if (digitalRead(tasterPin) == LOW) {
    Serial.println("Status: Taster Gedrückt");
    Serial.println("Effekt wird abgespielt...");
    delay(100);


    pixels.clear(); // Schaltet alle Pixel auf "OFF"


    for (int i = 0; i < NUMPIXELS; i++) { // Für jede LED...


      //Das ist ein RGB LED streifen das R steht für ROT G = Grün und B = Blau
      pixels.setPixelColor(i, pixels.Color(255, 255, 255));


      pixels.show();   // Sendet die geänderten LED farben zum LED Streifen (neue Farbe)


      delay(DELAYVAL); //pause
    } //...


    //
    delay(30000); //30000 Millisekunden weiss (wartet 10000 Millisekunden)
    //


    for (int i = 0; i < NUMPIXELS; i++) { // Für jede LED...


      pixels.setPixelColor(i, pixels.Color(0, 0, 0));


      pixels.show();


      delay(DELAYVAL); // Pause bevor es neu startet


    }


  } else {
    Serial.println("Status: Taster nicht Gedrückt");
    delay(100);
  }




}//...

Danke für die Antworten :)

LG

Computer, Technik, Elektronik, programmieren, Arduino, Technologie, taster, ESP8266, Spiele und Gaming, Arduino IDE
Arduino integer mit binärem Wert in decimal umwandeln?

// Probleme wurden gelöst. Teil des Problems war dass ich den Chip außversehen nach dem umprogrammieren eine Reihe zu weit nach Oben gemacht habe... Leichtsinnsfehler... :)

Hallo. Bin gerade an einem Projekt bei dem ich LED's mit einem 8Bit shift register zum leuchten bringen will.

1 bedeutet leuchten und 0 bedeutet aus.

Jetzt will ich einen Wert wie "10000001" angeben können und die LED's werden direkt so eingeschalten wie es im int aussieht.

Gerade im Moment probiere ich es so zu lösen dass ich der ShiftOut Funktion den decimalen Wert gebe welche diese dann wieder in decimal umwandelt und raus schiebt:

  int bits = 10000001;

  digitalWrite(latchPin, LOW);
  //Binary to decimal Versuch
  int decimal =
  (((bits / 10000000U) % 10) * 128)
  + (((bits / 1000000U) % 10) * 64)
  + (((bits / 100000U) % 10) * 32)
  + (((bits / 10000U) % 10) * 16)
  + (((bits / 1000U) % 10) * 8)
  + (((bits / 100U) % 10) *4)
  + (((bits / 10U) % 10) *2)
  + ((bits / 1U) % 10);

  shiftOut(dataPin, clockPin, MSBFIRST, decimal);

  digitalWrite(latchPin, HIGH);

Ich bin mir sicher dass man das wesentlich effizienter und schlauer lösen kann. Unter anderem funktioniert mein Code nicht mal... wenn ich ihn laufen lasse sind die LED's volgendermaßen angeschaltet: "00010000"...

Würde mich über Hilfe freuen und danke schon mal im Vorraus.

Liebe Grüße, Leo

Bild zum Beitrag
Computer, Technik, Programm, programmieren, Arduino, Code, Informatik, Technologie, binär, Integer, Spiele und Gaming

Meistgelesene Fragen zum Thema Arduino