Wäre es möglich diese beiden codes in ein programm bzw. auf ein arduino zu laden?
1 code (Smart home steuerung):
#define relay_1 4
#define relay_2 5
#define relay_3 6
#define relay_4 7
int state = 0;
void setup() {
Serial.begin(9600);
pinMode(relay_1, OUTPUT);
pinMode(relay_2, OUTPUT);
pinMode(relay_3, OUTPUT);
pinMode(relay_4, OUTPUT);
// Ininially all relay pin HIGH because relay active LOW
digitalWrite(relay_1, HIGH);
digitalWrite(relay_2, HIGH);
digitalWrite(relay_3, HIGH);
digitalWrite(relay_4, HIGH);
}
void loop() {
if (Serial.available() > 0)
{
state = Serial.read();
}
if (state == 'A')
{
digitalWrite(relay_1, HIGH); // relay_1 turn OFF
state = 0;
}
else if (state == '1')
{
digitalWrite(relay_1, LOW); // relay_1 turn ON
state = 0;
}
else if (state == 'B')
{
digitalWrite(relay_2, HIGH); // relay_2 turn OFF
state = 0;
}
else if (state == '2')
{
digitalWrite(relay_2, LOW); // relay_2 turn ON
state = 0;
}
else if (state == 'C')
{
digitalWrite(relay_3, HIGH); // relay_3 turn OFF
state = 0;
}
else if (state == '3')
{
digitalWrite(relay_3, LOW); // relay_3 turn ON
state = 0;
}
else if (state == 'D')
{
digitalWrite (relay_4, HIGH); // relay_4 turn OFF
state = 0;
}
else if (state == '4')
{
digitalWrite(relay_4, LOW); // relay_4 turn ON
state = 0;
}
}
Code ( DHT11 Sensor):
// DHT11 Temperature and Humidity Via Bluetooth
// By keuwlsoft: www.keuwl.com 26th Sept 2015
// cc Attribution-ShareAlike
// The DHT11 returns 5 bytes of data:
// Bytes 1 & 2 are Humidity, Bytes 3 & 4 are Temperature
// and Byte 5 is the checksum (ignored in this demo).
// Since sensor is only 8-bit resolution, we ignore bytes 2 and 4.
// Internal 20k pullup on Arduino used, so no external 5k resistor needed.
// Powered from digital output lines so no breadboard/cables required.
int data_pin = 9;
int vcc_pin=8;
int gnd_pin=10;
boolean result[41]; //holds the result
int interval=2000; //Sample every 2 seconds
unsigned int temp; //in celcius
unsigned int humidity; //in %RH
void setup() {
//Supply power to DHT11 (Uses upto 2.5mA)
pinMode(gnd_pin, OUTPUT);
pinMode(vcc_pin, OUTPUT);
digitalWrite(gnd_pin,LOW);
digitalWrite(vcc_pin,HIGH);
//Initiate Serial for Bluetooth Communication
Serial.begin(9600);
}
void loop() {
//Pause before taking next measurement
delay(interval);
//Trigger reading by holding data pin low for 18ms
pinMode(data_pin, OUTPUT);
digitalWrite(data_pin,LOW);
delay(18);
digitalWrite(data_pin,HIGH);
pinMode(data_pin, INPUT_PULLUP);
//read 41 bits of signal
for(int i=0;i<=40;i++){
result[i]=(pulseIn(data_pin, HIGH)>40);
}
//Extract Humidity (from byte 1)
humidity=0;
for (int i=1;i<=8;i++){
humidity=humidity<<1;
if (result[i]) humidity|=1;
}
//Extract Temperature (from Byte 3)
temp=0;
for (int i=17;i<=24;i++){
temp=temp<<1;
if (result[i]) temp|=1;
}
//Send data over Bluetooth
Serial.print("*T"+String(temp)+"*");
Serial.print("*H"+String(humidity)+"*");
}
Du musst einen Code schreiben, in dem beide Funktionalitäten quasi scheibchenweise nacheinander abgearbeitet werden.
mal die eine, mal die andere.
Scheint mir lösbar, nur gibs für dich am Uno kein "Multitasking" und kein "parallel". Schnell hintereinander - das kannst machen und wird scheinbar auch so funktionieren wie du dir das vorstellst.
Klar geht das, hat aber nix mit "Multitasking" zu tun.
Du musst deine Tele so zusammen setzen, dass keine doppelten Namen der Variablen und Funktionen auftreten.
Die 2. loop kann auch als Funktion eingesetzt werden.
Einfach probieren, die IDE meckert, wenn etwas falsch ist.
Solange Du delay() benutzt, wird Das extrem schwer (combie bekäme Das wohl trotzdem hin ... ).
Sonst kannst Du die Funktion loop() des einen Sketch doch loop1() nennen, oder?
Die loop() des 2.ten Sketch loop2() - dann hättest Du zwei Funktionen, Die eigenständig sind und, sofern nur lokale Variablen benutzen, Nichts miteinander zu tun haben.
Nun musst Du 'nur' in der neneen loop() diese beiden Funktionen aufrufen.
Und zumindest in loop2() etwas Basteln, damit Du von delay() weg kommst.
Stichwort Endlicher Automat/State-Maschine/Schritt-Kette
Suchwort 'Nahctwächter-Erklärung' hier im Forum.
Davon ab ist der DHT11 noch schuntiger als der DHT22 und von Dem liest man nicht viel Gutes.
Für Luftfeuchte ist ein BME280 um Welten besser/stabiler.
(Der kann auch noch ein Bisschen mehr, also Umrechnen von relativer Feuchte auf absolute Feuchte geht mit den Werten - z.B. für eine Keller/Garagen-Belüftung interessant, daß wirklich trockene Luft reingeblasen wird.)
postmaster-ino:
Sonst kannst Du die Funktion loop() des einen Sketch doch loop1() nennen, oder?
Die loop() des 2.ten Sketch loop2() - dann hättest Du zwei Funktionen, Die eigenständig sind und, sofern nur lokale Variablen benutzen, Nichts miteinander zu tun haben.
Nun musst Du 'nur' in der neneen loop() diese beiden Funktionen aufrufen.
Kannst du den skech sicken so wie du es meinst. bin noch anfänger
Klar KANN ich Das - aber warum sollte ich Dir den Kram vorkauen?
Was verstehst Du nicht daran, die loop() aus Sketch 1 in loop1() umzubenennen?
Klar: Dann hast Du keine loop() mehr - Die solltest (MUSST) Du wieder erstellen, also:
void loop(void){
loop1();
}
Da Das kein wirkliches Hexenwerk ist, hätte ich Das wohl auch im Mittelalter ohne Scheiterhaufen überlebt.
/**
* Basisprogramm:
* Das Blink Beispiel aus der Arduino IDE
*
* Zusaetzliche nebenlaeufige Funktionalitaet:
* Eine Ablaufsteuerung
*
* Nach betaetigen des Schalters startet die Absaugung und danach
* die Maschine. Nach abschalten stoppt erst die Maschine und danach die
* Absaugung
*
*
* Ablaufdiagramm - Zeitdiagramm
*
* schalter _----------_____ Schalterstellung
* absaugung _-------------__ Verzoegertes abschalten
* maschine ____-------_____ Verzoegertes einschalten
*
* Der Schalter arbeitet invers und ist entprellt
*
*
*/
#include <CombieTimer.h>
#include <CombiePin.h>
#include <CombieTypeMangling.h>
using namespace Combie::Pin;
using namespace Combie::Timer;
using namespace Combie::Millis;
TasterGND<2> schalter; // zwischen Pin und GND(invertierend)
OutputPin<3> absaugung;
OutputPin<4> maschine;
EntprellTimer entprell { 20_ms}; // Schalter entprellen
RisingEdgeTimer ton {500_ms}; // steigende Flanke wird verzoegert
FallingEdgeTimer toff {500_ms}; // abfallende Flanke wird verzoegert
void setup(void)
{
schalter.initPullup();
absaugung.init();
maschine.init();
pinMode(LED_BUILTIN, OUTPUT); // unveraendert aus Blink.ino
}
void yield(void)
{
bool schalterMerker = entprell = schalter;
absaugung = toff = schalterMerker;
maschine = ton = schalterMerker;
}
void loop(void) // unveraendert aus Blink.ino
{
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Du darfst auch kein Auto ohne Führerschein auf öffentlichem Gelände fahren.
Nicht alles was hinkt, ist ein Vergleich. An einem Arduino darfst du rumbasteln wie du willst. Und dabei so tief in Details einsteigen wie du willst und kannst.
Aus diesem verunglückten Thread kannst du schonmal lernen:
"Multitasking" ist wohl nicht die Lösung.
"bin Anfänger, kannst du mir den Sketch machen" funktioniert hier nicht so wie du dir das wünschst.
Ein Beispiel finden und feststellen "geht nicht" ist deutlich zu wenig Eigeninitiative.