|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Ned Dec 04, 2022 4:39 pm Naslov sporočila: Preklapljanje med dvema različnima programoma na eni plošči |
|
|
Zdravo,
Imam delujoč program arduino pri katerem gre za odčitavanje ADC vrednosti iz mikrofona in sicer ko ADC preseže določeno vrednost se sproži RGB LED lučka. Meritve se tekoče izvajajo ves čas od vklopa ESP8266 D1 mini plošče. Vse deluje odlično, sedaj pa sem programu želel dodati še povezavo do WIFI kjer bi na daljavo z mobilnim telefonom upravljal z RGB LED lučko, kar je sicer tudi uspelo ampak prihaja do prekinitev pri odčitavanju vrednosti ADC iz mikrofona ali do prekinitve WIFI. Torej, če programu dodam samo upravljanje prek WIFI deluje brezhibno ali če programu dodam samo mikrofon in RGB prav tako deluje, ko pa oboje združim ne deluje več pravilno.
Zanima me ali je mogoče nekako prekljapljati med dvema različnima programoma na isti plošči (ESP8266 D1 MINI)? Se pravi da se povežem z WIFI omrežjem samo ob pritisku tipke in ostanem povezan dokler se ne prekine WIFI povezava. Drugače pa mora program ves čas odčitavati vrednosti ADC, tudi takrat, ko je povezava WIFIizključena. Je to izvedljivo?
Hvala.
Koda: |
#include <ESP8266WiFi.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define BUTTON_PIN D3
#define PIXEL_PIN D1
#define PIXEL_COUNT 7
const char* ssid = "********";
const char* password = "********";
Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
WiFiServer server(80);
const int soundpin = A0; //mikrofon
const int vrednost = 780; //vrednost sprožitve RGB
void setup() {
Serial.begin(115200);
delay(10);
pinMode(soundpin, INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
strip.begin();
strip.show();
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
String req = client.readStringUntil('\r');
Serial.println(req);
int soundsens = analogRead(soundpin);
Serial.println(soundsens);
if (soundsens >= vrednost) {
colorWipe(strip.Color( 0, 0, 255), 1); // RGB Modra barva
delay(1000);
colorWipe(strip.Color( 0, 0, 0), 1); // Izklopi RGB
}
int tipka = digitalRead(BUTTON_PIN);
if(tipka == LOW) {
colorWipe(strip.Color(255, 0, 0), 1); // Rdeča
delay(1000);
colorWipe(strip.Color( 0, 0, 0), 1); // Izklopi RGB
delay(1000);
}
int val;
if (req.indexOf("/BLUE") != -1)
{
colorWipe(strip.Color( 0, 0, 255), 50);
delay(1000);
colorWipe(strip.Color( 0, 0, 0), 1); // Izklopi RGB
}
String web = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
client.print(web);
client.flush();
}
void colorWipe(uint32_t color, int wait) {
for(int i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, color);
strip.show();
delay(wait);
}
}
|
|
|
Nazaj na vrh |
|
|
SimonS Član
Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4580 Aktiv.: 20.63 Kraj: Kobarid
|
Objavljeno: Ned Dec 04, 2022 6:49 pm Naslov sporočila: |
|
|
Mogoče bi bral ADC im prižigal LED preko prekinitev. V tem primeru ga wifi nebi smel motit _________________ Lep dan
Simon |
|
Nazaj na vrh |
|
|
Proteus Član
Pridružen-a: Sre 15 Jun 2005 10:03 Prispevkov: 1781 Aktiv.: 8.02
|
Objavljeno: Pon Dec 05, 2022 11:50 am Naslov sporočila: |
|
|
Najprej pri večopravilnosti se ne uporablja Delay(nn).
Lahko sicer uporabiš prekinitve, kot je predlagal SimonS a niso temu namenjene.
Običajno se na mc-jih za večopravilnost uporablja FSM način programiranja:
https://www.codeproject.com/Articles/1275479/State-Machine-Design-in-C
V tvojem primeru lahko narediš tudi dve funkciji med katerima potem v loop() zanki preklapljaš glede na tvoje pogoje. |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 48 dni
Powered by phpBB © 2001, 2005 phpBB Group
|