Program pre Arduino

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

seto
Pokročilý člen
Pokročilý člen
Príspevky: 555
Dátum registrácie: 20 Jan 2011, 00:00
Bydlisko: Niekde pri Modre

Program pre Arduino

Príspevok od používateľa seto » 18 Sep 2019, 18:57

Vedel by mi niekto zhotoviť program domáceho alarmu pre Arduino Uno. Lcd display klavesnica poprípade aj RFID čítačka.Výstup relé a piezo signalizácia.Poprosil by som cenu.
Vstup:1.....oneskorený
2....oneskorený
3.....okamžitý
4.....okamžitý
5......okamžitý
6.......okamžitý
Ďakujem.
0

Používateľov profilový obrázok
McSmekac
Stály člen
Stály člen
Príspevky: 137
Dátum registrácie: 16 Sep 2020, 20:10

Re: Program pre Arduino

Príspevok od používateľa McSmekac » 13 Jún 2022, 05:42

Zdravim páni učím sa programovať a začal som teda s arduinom. Spravil som si malý projekt kde pri napísaní určitého textu (MM) má svietiť len jedna ledka a druhá nie a zase naopak. Len mi to nefunguje stále svieti len jedna nech napíšem hocičo, poradíte mi prečo?

String LEDKA;
int LED1 = 12;
int LED2 = 13;
boolean MM = true;

void setup() {
Serial.begin(9600);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
}

void loop() {
Serial.println("Prosim vlozte Led ");
while (Serial.available()==0)
{
}
LEDKA = Serial.readString();
if( Serial.available()==0)
{
}
if(MM == true)
{
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
}
if(MM == false)
{
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
}
Serial.print("Ledka ");
Serial.print(LEDKA);
}
0

miso156
Pokročilý člen
Pokročilý člen
Príspevky: 648
Dátum registrácie: 06 Dec 2020, 11:46
Bydlisko: Banska Stiavnica
Vek: 38

Re: Program pre Arduino

Príspevok od používateľa miso156 » 13 Jún 2022, 06:04

Premennej MM nikde nemenis hodnotu, inak povedane nikde do nej nezapisujes, takze je stale true ako su ju zinicializoval.
1
Obrázok 1
"No pain, no gain." (KC238)

Používateľov profilový obrázok
McSmekac
Stály člen
Stály člen
Príspevky: 137
Dátum registrácie: 16 Sep 2020, 20:10

Re: Program pre Arduino

Príspevok od používateľa McSmekac » 13 Jún 2022, 06:37

A ako by to malo správne vyzerať? Lebo skúšal som aj zadať premenu int=MM ale tiež neúspešne.
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2562
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Program pre Arduino

Príspevok od používateľa maskrtnik01 » 13 Jún 2022, 06:37

Ešte jedna rada.

Kód: Vybrať všetko

while (Serial.available()==0)
{
}
Takto zablokovať program len kvôli tomu, že chcem aby užívateľ niečo spravil, je cesta do pekiel. V tomto jednoduchom prípade to môže postačovať, ale až sa začne program rozširovať, prídu problémy. Veľmi často sa začiatočníci čudujú, prečo program reaguje na stisknutie tlačidla len raz za x sekúnd.

https://docs.arduino.cc/built-in-exampl ... erialEvent

Mimochodom, ako dlhú správu má v tomto prípade užívateľ poslať? Na jeden znak je to ako tak v pohode, na viac znakov ten cyklus nezaručuje, že už sme prijali všetko.
0

miso156
Pokročilý člen
Pokročilý člen
Príspevky: 648
Dátum registrácie: 06 Dec 2020, 11:46
Bydlisko: Banska Stiavnica
Vek: 38

Re: Program pre Arduino

Príspevok od používateľa miso156 » 13 Jún 2022, 07:18

Ak zadas retazec "MM" ledky sa prepnu, po zadani ineho retazca ako "MM" sa ledky prepnu naspat.
Pozn: Funkcia Serial.readString() ma timeout defaultne nastaveny na 1000ms, to znamena ze musis stihnut zadat druhe M do 1000ms po prvom M.

Nemam ardunino dosku takze za funkcnost nerucim.

Kód: Vybrať všetko

String LEDKA;
int LED1 = 12;
int LED2 = 13;

void setup() {
  	Serial.begin(9600);
  	pinMode(LED1, OUTPUT);
  	pinMode(LED2, OUTPUT);
}

void loop() {

	if (Serial.available() > 0) {
  		LEDKA = Serial.readString();  
  		
  		if(LEDKA == "MM") {  //porovnaj nacitany retazec
    			digitalWrite(LED1, HIGH);
    			digitalWrite(LED2, LOW);
  		} else {
    			digitalWrite(LED1, LOW);
    			digitalWrite(LED2, HIGH);
 		}
 		 
  		Serial.print("Ledka ");
  		Serial.print(LEDKA);
	}
}	
0
"No pain, no gain." (KC238)

Používateľov profilový obrázok
McSmekac
Stály člen
Stály člen
Príspevky: 137
Dátum registrácie: 16 Sep 2020, 20:10

Re: Program pre Arduino

Príspevok od používateľa McSmekac » 13 Jún 2022, 08:09

Nefunguje neviem či sme sa správne pochopili keď zadám na obrazovku MM má svietiť jedna led a keď zadám hocičo iné má svietiť druhá led.
0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6200
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: Program pre Arduino

Príspevok od používateľa pocitujlasku » 13 Jún 2022, 08:42

Mne sa paci takyto zapis

Kód: Vybrať všetko

String LEDKA;
int LED1 = 12;
int LED2 = 13;

void setup() {
  	Serial.begin(9600);
  	pinMode(LED1, OUTPUT);
  	pinMode(LED2, OUTPUT);
}

void loop() {

	if (Serial.available() > 0) {
  		LEDKA = Serial.readString();  
  		
  		bool mm =(LEDKA == "MM");
    	        digitalWrite(LED1,  mm);
    		digitalWrite(LED2, !mm);
 		 
  		Serial.print("Ledka ");
  		Serial.println(LEDKA);
	}
}	
co znamena nefunguje?
posielas tam: MM\r\n
1
Obrázok 1
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

miso156
Pokročilý člen
Pokročilý člen
Príspevky: 648
Dátum registrácie: 06 Dec 2020, 11:46
Bydlisko: Banska Stiavnica
Vek: 38

Re: Program pre Arduino

Príspevok od používateľa miso156 » 13 Jún 2022, 09:03

McSmekac napísal:
13 Jún 2022, 08:09
Nefunguje neviem či sme sa správne pochopili keď zadám na obrazovku MM má svietiť jedna led a keď zadám hocičo iné má svietiť druhá led.
Pred tym nez sa zacnes prcat so stringami by som odporucal si overit, ci ti vobec funguje seriovka. Trebarz jednoduche odoslanie znaku z PC a jeho opatovne vratenie naspat na obrazovku.

Kód: Vybrať všetko

if (Serial.available() > 0) {
  		znak = Serial.read();
                Serial.write(znak);
}                
1
Obrázok 1
"No pain, no gain." (KC238)

Používateľov profilový obrázok
McSmekac
Stály člen
Stály člen
Príspevky: 137
Dátum registrácie: 16 Sep 2020, 20:10

Re: Program pre Arduino

Príspevok od používateľa McSmekac » 13 Jún 2022, 09:28

Posielam MM a stale svieti len jedna led na pine č 13 nech napíšem hocičo.

Seriovka by mala funguvať lebo pred tím som robil iné projekty s písaním textu.
0

miso156
Pokročilý člen
Pokročilý člen
Príspevky: 648
Dátum registrácie: 06 Dec 2020, 11:46
Bydlisko: Banska Stiavnica
Vek: 38

Re: Program pre Arduino

Príspevok od používateľa miso156 » 13 Jún 2022, 09:55

Skus dat hned za :

Kód: Vybrať všetko

LEDKA = Serial.readString(); 
este

Kód: Vybrať všetko

LEDKA.trim();
Malo by to odstranit biele znaky zo stringu LEDKA ktore tam funkcia readString() asi dava.
1
Obrázok 1
"No pain, no gain." (KC238)

Používateľov profilový obrázok
McSmekac
Stály člen
Stály člen
Príspevky: 137
Dátum registrácie: 16 Sep 2020, 20:10

Re: Program pre Arduino

Príspevok od používateľa McSmekac » 13 Jún 2022, 11:01

Konečne funguje....... možeš mi prosím ťa vysvetliť ten príkaz trim?
0

miso156
Pokročilý člen
Pokročilý člen
Príspevky: 648
Dátum registrácie: 06 Dec 2020, 11:46
Bydlisko: Banska Stiavnica
Vek: 38

Re: Program pre Arduino

Príspevok od používateľa miso156 » 13 Jún 2022, 11:20

Funkcia readString() po timeoute prida na koniec stringu nejake znaky ako \n alebo \r (neviem presne).
To znamena ze zhoda LEDKA == "MM" nenastane, lebo stringy musia byt naprosto identicke.
trim() tieto znaky odstrani a stringy sedia.

Inak, nemyslim si funkcia readString() je stastne riesenie celkovo, ked uz tak pouzit readStringUntil() kde mozes nastavit ze na koniec stringu ktory chces zadat zadavas este trebarz ENTER alebo tak a tym sa funkcia ukonci a mozes so stringom dalej pracovat/komparovat (nemusis cakat na timeout).

Este lepsie riesenie je nacitavanie stringu po jednotlivych znakoch a triedit si to sam. Ale pre zaciatocnika na jednoduche preogramy sa da pouzit aj readString().

Proste Arduino je take lego kde si mozes pozliepat co ti arduinaci svojimi funkciami ponukaju.
1
Obrázok 1
Naposledy upravil/-a miso156 v 13 Jún 2022, 11:23, upravené celkom 1 krát.
"No pain, no gain." (KC238)

dan21
Ultimate člen
Ultimate člen
Príspevky: 3016
Dátum registrácie: 11 Apr 2007, 00:00
Bydlisko: ZA

Re: Program pre Arduino

Príspevok od používateľa dan21 » 13 Jún 2022, 11:21

0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6200
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: Program pre Arduino

Príspevok od používateľa pocitujlasku » 13 Jún 2022, 11:34

podla mna to tam pridava terminal. V Ccku je koniec stringu \0 ale ty ked posielas cez terminal, tak predpokladam, ze davas enter. a on to posle ako MM + enter (ascii 13).
ak sa da, nahrad MM iba za M a nie readstring, ale readchar. samozrejme uprav aj premenne. potom ti to bude menit hned, a nemusi cakat na timeout (default je 1s).
1
Obrázok 1
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

miso156
Pokročilý člen
Pokročilý člen
Príspevky: 648
Dátum registrácie: 06 Dec 2020, 11:46
Bydlisko: Banska Stiavnica
Vek: 38

Re: Program pre Arduino

Príspevok od používateľa miso156 » 13 Jún 2022, 11:48

Aj to moze byt. Ak v konzole musis na konci stringu stlacit ENTER tak odosle este aj \r a teda ho prida na koniec stringu.
Neviem, arduino konzolu nepouzivam, vyrastal som na klasickom windows terminaly kde sa enter mackat nemusel, hehe.
0
"No pain, no gain." (KC238)

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6200
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: Program pre Arduino

Príspevok od používateľa pocitujlasku » 13 Jún 2022, 12:12

arduino konzola ma checkbox, ci ma posielat \r\n
ja pouzivam putty, alebo nejaky speci terminal (nazov si teraz nespomeniem), ktory vie aj logovat a davkovo posielat...
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

Používateľov profilový obrázok
McSmekac
Stály člen
Stály člen
Príspevky: 137
Dátum registrácie: 16 Sep 2020, 20:10

Re: Program pre Arduino

Príspevok od používateľa McSmekac » 29 Jún 2022, 11:04

Zdravím prečo mi píše na display tie znaky za veľkým C? V programe to dokážem odstrániť len ak zvacsim medzeru čím posuniem tie znaky za okraj displaya.

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// pin, kde bude senzor zapojený
#define pin 7

// nastavení komunikace senzoru přes pin
OneWire oneWire(pin);
// převedeme onewire do Dallasu
DallasTemperature sensors(&oneWire);

void setup(void)
{
// nastavení rychlosti sériové komunikace
Serial.begin(9600);
// zapnutí senzoru
sensors.begin();
lcd.begin(16, 2);
}

void loop(void)
{
// požádáme senzor o hodnotu teploty
sensors.requestTemperatures();
lcd.setCursor(0,0);
lcd.print("Aktualna teplota");
// tento řádek je vysvětlený v článku
lcd.setCursor(0,1);
lcd.print(sensors.getTempCByIndex(0));
lcd.println(" C ");
delay(3000);
}
Prílohy
IMG_20220629_105856.jpg
0

Používateľov profilový obrázok
Mek
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1271
Dátum registrácie: 15 Okt 2015, 20:49
Bydlisko: Žilina
Vek: 37
Kontaktovať používateľa:

Re: Program pre Arduino

Príspevok od používateľa Mek » 29 Jún 2022, 12:25

Nepouzivam arduino, ale moj tip by bol, ze to su znaky CR a LF, teda zariadkovanie - lebo si pouzil println a nie print. Vyskusaj...
1
Obrázok 1
... byvaly spravca Hospudky u amplionu, Martinekk-ov brat. Nemam vystudovane elektro, je to len moje hobby. Povolanim som SW inzinier.
Moja databaza suciastok: ELPARTS
Moj velky elektro projekt: MEGA TRANSISTOR CLOCK

Používateľov profilový obrázok
McSmekac
Stály člen
Stály člen
Príspevky: 137
Dátum registrácie: 16 Sep 2020, 20:10

Re: Program pre Arduino

Príspevok od používateľa McSmekac » 29 Jún 2022, 13:15

Super diki mal si pravdu
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok