Je ne suis pas vraiment un codeur, donc je vous demande les gars, si vous savez comment pourrais-je résoudre mon problème. En arduino j'ai écrit un premier programme avec mon capteur DS18B20, qui affiche la température dans openHAB sur MQTT procotol. Deuxième programme est la même chose (openhab, mqtt) suffit de basculer la lampe, ce qui signifie que lorsque j'appuie sur le commutateur, la lampe ou la LED s'allume ou s'éteint sur la fonction de rappel dans Arduino. Séparément les deux programmes fonctionnent très bien, mais quand j'essaie de les joindre, ça ne marche pas comme je le voudrais. Il me semble que le problème est avec la fonction de boucle. Lorsque j'appuie sur ON ou OFF, parfois (rarement) je peux allumer ou éteindre la lampe. Donc, ma question est ... qu'est-ce qui ne va pas? Est-ce un problème avec loop, car arduino ne peut pas faire deux choses dans la boucle en même temps? Peut-il être résolu, je ne sais vraiment pas quoi faire ensuite. S'il vous plaît aidez-moi et merci d'avance!boucle arduino ne fonctionne pas avec deux processus
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <PubSubClient.h>
#include "WiFiEsp.h"
// Emulate Serial1 on pins 3/2 if not present
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
SoftwareSerial Serial1(3, 2); // RX, TX
#endif
char ssid[] = "SSID; // your network SSID (name)
char pwd[] = "password"; // your network password
float temp = 0;
byte server[] = { 192, 168, 1, 71 }; // IP Address of your MQTT Server
WiFiEspClient espClient;
PubSubClient client(espClient);
#define ONE_WIRE_BUS 4
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
void callback(char* topic, byte* payload, unsigned int length) {
Serial.println("Callback");
Serial.println(topic);
Serial.println(length);
Serial.write(payload,length);
Serial.println();
if (strcmp(topic,"home/luc")==0) {
if (payload[0] == '0')
{
digitalWrite(7, LOW);
delay(100);
client.publish("home/luc/state","OFF");
}
else if (payload[0] == '1')
{
digitalWrite(7, HIGH);
delay(100);
client.publish("home/luc/state","ON");
}
}
}
void temperaturni_senzor()
{
sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0);
Serial.print("Temperatura je: ");
Serial.println(temp); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
//Update value every 1 sec.
client.publish("home/temperature", String(temp).c_str(),TRUE);
delay(50);
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("connecting to mqtt...");
// Attempt to connect
if (client.connect("ESP8266 client")) {
Serial.println("connection good");
// ... and subscribe to topic
client.subscribe("home/luc");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup()
{
Serial1.begin(9600);
Serial.begin(9600); //Begin serial communication
WiFi.init(&Serial1);
WiFi.begin(ssid, pwd);
client.setServer(server, 1883);
client.setCallback(callback);
if (client.connect("arduinoClient"))
{
Serial.println ("mqqt is connected");
client.publish("outTopic","hsubscribello world");
client.subscribe("home/luc"); // Subscribe to all messages for this device
client.subscribe("home/temperature");
}
pinMode(7, OUTPUT);
digitalWrite(7, LOW);
sensors.begin();
}
void loop()
{
client.loop();
if (!client.connected())
{
reconnect();
}
temperaturni_senzor();
}
}
Modifier la question d'inclure le code que vous avez donc nous ne devons pas deviner – hardillb
Il n'y a pas de processus ** ** Arduino. Que voulez-vous dire par * "arduino ne peut pas faire deux choses dans le même temps" *? Arduino fait chaque chose ** séquentiellement **, dans l'ordre où vous les spécifiez. –