|
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: Pon Nov 30, 2020 4:25 pm Naslov sporočila: Arduino programiranje |
|
|
Lepo pozdravljeni,
Po zelo dolgem času sem se ponovno lotil programiranja z ARDUINO ampak sem ugotovil, da je moje znanje programiranja izpred preteklih let že malce zarjavelo zato prosim za pomoč.
Zanima me ali je mogoče, da bi v ARDUINO program vključil 4 tipke in ob pritisku vsake tipke bi se pričel nov program oziroma nova VOID LOOP zanka, da niso povezano v en program ampak je ob vsakem pritisku posamezne tipke začne nov program, se pravi:
Tipka_1: Program_1
Tipka_2: Program_2
Tipka_3: Program_3
Tipka_4: Program_4
Tipke bi bile povezane isto ARDUINO NANO ploščo, takšno vrsto programa bi potreboval, da ne prihaja do zakasnitev saj če vse senzorje vključim v en program ne deluje kot bi želel.
Primer:
-Ob pritisku Tipka_1 bi z DHT11 meril temperaturo in vlago ter izpisoval na OLED zaslonu
-Ob pritisku Tipka_2 bi z bluetooth HC-05 krmilil RGB LED
-Ob pritisku Tipka_3 bi preko mikrofona krmilil RGB LED (pri določeni vrednosti ADC prižge LED)
-Ob pritisku Tipka_4 RGB LED
V naprej najlepša hvala za pomoč!
|
|
Nazaj na vrh |
|
|
Branez Moderator
Pridružen-a: Pon 14 Apr 2003 7:21 Prispevkov: 7768 Aktiv.: 34.98 Kraj: Koprivnica HR
|
Objavljeno: Pon Nov 30, 2020 5:15 pm Naslov sporočila: |
|
|
programming je napisal/a: |
... da ne prihaja do zakasnitev saj če vse senzorje vključim v en program ne deluje kot bi želel... |
Objavi ta program, ki ti dela kot bi želel. _________________ The true sign of intelligence is not knowledge but imagination.
Creativity is intelligence having fun!
Albert Einstein |
|
Nazaj na vrh |
|
|
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Pon Nov 30, 2020 5:42 pm Naslov sporočila: |
|
|
Trenutni program, podatki iz DHT11 so izpisani na OLED zaslonu mikrofon in RGB LED pa ne delujeta ves čas kot bi si želel. Če iz programa odstranim DHT11 in OLED deluje mikrofon in RGB LED brez problema. Zato želim v program vpeljat 4 različne TIPKE s katerim bi posamezno aktiviral posamezne programe samo ne vem kako točno naj to izpeljati, če je sploh mogoče? ali moram krmilit iz različnih plošč?
Koda: |
#include <FastLED.h>
#include "DHT.h" //knjižnica
#include "U8glib.h" //knjižnica
#define NUM_LEDS 25 //Število RGB LED 5x5
#define LED_PIN 5 //RGB LED 5X5 so povezane na digitalni izhod 5
#define DHTPIN 3 //DHT11 Senzor je povezan na digitalni vhod 3
#define DHTTYPE DHT11 // DHT 11 Senzor temperature in vlage
DHT dht(DHTPIN, DHTTYPE, 6);
CRGB led[NUM_LEDS];
char str[10];
const int soundpin=A0;
const int threshold=600; //mikrofon vrednost
const int buttonPin = 6; //TIPKA1
const int buttonPin2 = 7; //TIPKA2
const int buttonPin3 = 8; //TIPKA3
const int buttonPin4 = 9; //TIPKA4
int buttonState = 0; //VREDNOST STATUS TIPKE1
int buttonState2 = 0; //VREDNOST STATUS TIPKE2
int buttonState3 = 0; //VREDNOST STATUS TIPKE3
int buttonState4 = 0; //VREDNOST STATUS TIPKE4
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); //OLED
void drawTest(void) {
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 0, 25, "DOBRODOSLI");
}
void setup() {
Serial.begin(9600);
pinMode(soundpin,INPUT);
Serial.println("DHTxx test!");
dht.begin();
u8g.firstPage();
do {
drawTest();
} while( u8g.nextPage() );
pinMode(buttonPin, INPUT); //Tipka1 je digitalni vhodni signal
pinMode(buttonPin2, INPUT); //Tipka2 je digitalni vhodni signal
pinMode(buttonPin3, INPUT); //Tipka3 je digitalni vhodni signal
pinMode(buttonPin4, INPUT); //Tipka4 je digitalni vhodni signal
}
void loop() {
int soundsens=analogRead(soundpin); //Beri vrednost na mikrofonu
if (soundsens>=threshold) { //če je vrednost ADC nad 600
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //ZELENA BARVA RGB LED
for (int i = 0; i < NUM_LEDS; i++)
led[i] = CRGB(0, 1, 0);
FastLED.show();
delay(1000);
}
else{
FastLED.addLeds<NEOPIXEL, LED_PIN>(led, NUM_LEDS); //Izklopi RGB LED
for (int i = 0; i < NUM_LEDS; i++)
led[i] = CRGB(0, 0, 0);
FastLED.show();
}
delay(2000);
float h = dht.readHumidity(); //Preberi vlažnost okolja
float t = dht.readTemperature(); //preberi temperaturo v celzijah
float f = dht.readTemperature(true); //preberi temperaturo v stopinjah Fahrenheita
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
float hi = dht.computeHeatIndex(f, h);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hi);
Serial.println(" *F");
u8g.firstPage(); //do...while zanka
do {
u8g.setFont(u8g_font_helvB08);
u8g.drawStr( 0, 15, "Vlaga:");
u8g.drawStr( 90, 15, dtostrf(h, 5, 2, str));
u8g.drawStr( 120, 15, "%");
u8g.drawStr( 0, 30, "Temperatura:");
u8g.drawStr( 90, 30, dtostrf(t, 5, 2, str));
u8g.drawStr( 120, 30, "\260C");
u8g.drawStr( 90, 45, dtostrf(f, 5, 2, str));
u8g.drawStr( 120, 45, "\260F");
u8g.drawStr( 0, 60, "Toplotni indeks:");
u8g.drawStr( 90, 60, dtostrf(hi, 5, 2, str));
u8g.drawStr( 120, 60, "\260F");
} while( u8g.nextPage() );
} |
|
|
Nazaj na vrh |
|
|
sanko Neznanec
Pridružen-a: Pon 27 Mar 2017 9:19 Prispevkov: 4 Aktiv.: 0.05
|
Objavljeno: Tor Dec 01, 2020 9:07 am Naslov sporočila: |
|
|
Loop je en, lahko pa v njem glede na pritisnjeno tipko izvedeš le določeno kodo.
Najboljše, da napišeš ločeno funkcijo za vsako od štirih tipk, v glavnem loopu pa kličeš le željeno. |
|
Nazaj na vrh |
|
|
miharix Član
Pridružen-a: Tor 18 Dec 2012 9:59 Prispevkov: 403 Aktiv.: 2.94 Kraj: LJ
|
Objavljeno: Sre Dec 02, 2020 5:44 pm Naslov sporočila: |
|
|
Uporabljat boš mogel timer in ne dalay
Programirat moraš tako, da vsaka operacija vzame čim manj procesorskega časa (dalay ga vzame za čas spanja 100% -> res nič drugo ne more procesirat)
Če imaš zanke ki bi naj tekle vzporedno, jih realiziraj z if in ne z for, da ti nit programa čim manj visi znotraj ene operacije |
|
Nazaj na vrh |
|
|
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Čet Dec 03, 2020 10:27 am Naslov sporočila: |
|
|
sanko je napisal/a: |
Loop je en, lahko pa v njem glede na pritisnjeno tipko izvedeš le določeno kodo.
Najboljše, da napišeš ločeno funkcijo za vsako od štirih tipk, v glavnem loopu pa kličeš le željeno. |
Torej, če prav razumem naj vse štiri tipke uporabim v glavnem loop ter pod vsako napišem določeno kodo, da deluje samo tista katera je bila pritisnjena in se bo izvajala tako dolgo dokler ne bo pritisnjena druga tipka? Ostali del programa se v tem času ne bo izvajal glede na to da bi bil napisan vzporedno? Lahko prosim kakšen primer kode? hvala |
|
Nazaj na vrh |
|
|
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Čet Dec 03, 2020 10:29 am Naslov sporočila: |
|
|
miharix je napisal/a: |
Uporabljat boš mogel timer in ne dalay
Programirat moraš tako, da vsaka operacija vzame čim manj procesorskega časa (dalay ga vzame za čas spanja 100% -> res nič drugo ne more procesirat)
Če imaš zanke ki bi naj tekle vzporedno, jih realiziraj z if in ne z for, da ti nit programa čim manj visi znotraj ene operacije |
Timer? Je to pravilni ukaz saj mi ga arduino ne prepozna ali se mogoče na kakšed drug način uporablja? lahko prosim za primer kode? hvala |
|
Nazaj na vrh |
|
|
sanko Neznanec
Pridružen-a: Pon 27 Mar 2017 9:19 Prispevkov: 4 Aktiv.: 0.05
|
Objavljeno: Čet Dec 03, 2020 11:20 am Naslov sporočila: |
|
|
programming je napisal/a: |
sanko je napisal/a: |
Loop je en, lahko pa v njem glede na pritisnjeno tipko izvedeš le določeno kodo.
Najboljše, da napišeš ločeno funkcijo za vsako od štirih tipk, v glavnem loopu pa kličeš le željeno. |
Torej, če prav razumem naj vse štiri tipke uporabim v glavnem loop ter pod vsako napišem določeno kodo, da deluje samo tista katera je bila pritisnjena in se bo izvajala tako dolgo dokler ne bo pritisnjena druga tipka? Ostali del programa se v tem času ne bo izvajal glede na to da bi bil napisan vzporedno? Lahko prosim kakšen primer kode? hvala |
Tako ja. Lahko je v loopu navaden switch statement in potem štiri funkcije, katere kličeš glede na pritisnjen gumb. "gumbNo" pa definiraš kot globalno variablo (zunaj loopa), tako da bo med zagoni loopa ohranjala vrednost. Settaš ga le ob pritisku gumba.
Koda: |
switch (gumbNo) {
case 1:
//prvi gumb...
funkcija1(...);
break;
case 2:
//do something when var equals 2
funkcija2(...);
break;
default:
// if nothing else matches, do the default
// default is optional
break;
} |
|
|
Nazaj na vrh |
|
|
miharix Član
Pridružen-a: Tor 18 Dec 2012 9:59 Prispevkov: 403 Aktiv.: 2.94 Kraj: LJ
|
|
Nazaj na vrh |
|
|
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Tor Dec 29, 2020 10:35 am Naslov sporočila: |
|
|
Najlepša hvala vsem za odgovore, program deluje kot sem si zamislil imam pa še vedno eno težavico in sicer gre za izpisovanje podatkov iz DHT11 (temperatura in vlaga) na OLED zaslonu saj prihaja do manjših zakasnitev in moti glavno glavno programsko kodo, kjer je zelo pomembno, da program ves čaš bere podatke iz mikrofona in ni drugih zakasnitev. (če DHT11 IN OLED odstranim iz programa deluje brez problema)
Prosil bi za pomoč pri pisanju kode za DHT11 in OLED I2C 1.32inch 128×96
*OPCIJA 1: da bi se ta vklopila samo ob pritisku TIPKE in bi nato izklopila.
ali bolje:
*OPCIJA 2: da se podatki DHT11 preberejo in izpišejo na OLED samo 1x ob vklopu napajanja nato pa ostali program deluje brez zakasnitev.
|
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 610 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Tor Dec 29, 2020 6:47 pm Naslov sporočila: |
|
|
programming je napisal/a: |
OPCIJA 2: da se podatki DHT11 preberejo in izpišejo na OLED samo 1x ob vklopu napajanja nato pa ostali program deluje brez zakasnitev. |
Samo iz Loop zanke premakni na konec Setup zanke. |
|
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
|