prog: aufgabe vom 24-11-25, inf: flanken code

PROGT:
- wie viel reiskörner auf jedem feld eines schachbrett ist und wie viel kg auf dem schachbrett ist
- primzahlrechner

INF:
code zum  mitschrieb von inf
This commit is contained in:
danielvici123
2024-11-21 10:48:26 +01:00
parent 889419c762
commit 3b725c575e
5 changed files with 165 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
#include <Wire.h>
#include "SSD1306Wire.h"
#define SCREEN_WIDTH 128 // OLED Display Breite, in Pixel
#define SCREEN_HEIGHT 64 // OLED Display Höhe, in Pixel
SSD1306Wire display(0x3c, 21, 22); // 21=SDA 22=SCL I2C-Bus Pins
// ***** globale Variablen *************************************************
long showtime;
int x, y; // Pixel-Koordinaten für das Display
// Variablen für die Eingabe
char name[100]; // Array für den Namen, maximal 99 Zeichen + null-terminierend
int i = 0; // Index für die Zeichen im Array
// ***** Initialisierung **************************************************
void setup() {
Serial.begin(9600); // Seriellen Monitor starten
display.init(); // Initialisierung des OLED
display.flipScreenVertically(); // Ausrichtung passend zur Platine
display.setFont(ArialMT_Plain_16); // Schriftgröße einstellen
display.drawString(0, 0, "INPUT NAME"); // Text auf OLED anzeigen
display.setTextAlignment(TEXT_ALIGN_CENTER); // Text zentrieren
display.display(); // Anzeige aktualisieren
delay(5000); // 5 Sekunden warten
display.setTextAlignment(TEXT_ALIGN_LEFT); // Text linksbündig setzen
x = 2; // Startposition setzen
y = 2;
}
// ***** Endlosschleife ***************************************************
void loop() {
if (Serial.available() > 0) {
char incomingByte = Serial.read(); // Ein Zeichen von der seriellen Schnittstelle lesen
if (incomingByte == '\n' || incomingByte == '\r') { // Wenn Enter (newline oder carriage return) gedrückt wurde
name[i] = '\0'; // Null-Terminierung für die Zeichenkette
Serial.print("Du heißt: ");
Serial.println(name); // Den Namen über den seriellen Monitor ausgeben
i = 0; // Den Index zurücksetzen, um für den nächsten Namen bereit zu sein
} else {
if (i < sizeof(name) - 1) { // Sicherstellen, dass die Länge des Namens nicht überschritten wird
name[i] = incomingByte; // Das Zeichen in das Array einfügen
i++; // Den Index erhöhen
}
}
}
}

View File

@@ -0,0 +1,47 @@
/* Auswertung eines Ultraschall-Abstandssensors (Testprogramm)
* Der HC-SR04 benötigt 5V Versorgungsspannung, der HS-SR04P läuft auch mit 3,3V
*
* Im Setup ist ein Test für die Umrechnung der gemessenen Zeit (in µs)
* Die erste Formel berechnet d = s/2 = (v * t) / 2 mit d in cm, v in cm/s und t in s
* Die zweite Formel berechnet den Abstand mit dem ausmultiplizierten Faktor
* Die dritte Formel berechnet den Abstand ganzzahlig mit einem gerundeten Faktor
*/
const int Trigger=14, Echo=27;
float fAbstand;
unsigned long Messwert, iAbstand, lastMillis;
// ***** Setup, Hardware initialisieren ***************************************************************
void setup( ) {
Serial.begin(115200);
pinMode ( Trigger, OUTPUT );
pinMode ( Echo, INPUT );
// an Stelle von Messwert = pulseIn( Echo, HIGH );
Messwert = 10000; // Simulation des Sensors durch bekannte Werte => 10ms = 3,43m Gesamt => 171,5cm Abstand
fAbstand = 34300.0 * Messwert / (1E6 * 2); // hier ist die Schallgeschwindigeit 343m/s = 34300cm/s lesbar enthalten
Serial.print( " Berechneter Abstand: ");
Serial.println( fAbstand );
fAbstand = Messwert / 58.3; // hier ist die Schallgeschwindigkeit nicht einfach anpassbar
Serial.print( " Berechneter Abstand mit /58.3: ");
Serial.println( fAbstand );
iAbstand = Messwert / 58; // Gerundeter Faktor, Fehler 0,2%, es kann mit Int gerechnet werden
Serial.print( " vereinfacht mit /58: ");
Serial.println( iAbstand );
}
// ***** Endlosschleife, Einlesen, Verarbeiten, Ausgeben *********************************************
void loop ( ) {
// Zeitsteuerung mit millis()
unsigned long currentMillis = millis();
// Messung 2x pro Sekunde
if(currentMillis - lastMillis >= 500) {
lastMillis = currentMillis;
// Trigger-Impuls mit 10µs Dauer erzeugen
digitalWrite(Trigger, HIGH);
delayMicroseconds(10);
digitalWrite(Trigger, LOW);
// Jetzt den High-Impuls am Echo-Eingang ausmessen
Messwert = pulseIn( Echo, HIGH );
fAbstand = 34300.0 * Messwert / (1E6 * 2); // hier ist die Schallgeschwindigeit 343m/s = 34300cm/s lesbar enthalten
Serial.printf( "Berechneter Abstand: %4.1f cm \n", fAbstand);
}
}