Strana 1 z 3

Program pre Arduino

Napísané: 18 Sep 2019, 18:57
od používateľa seto
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.

Re: Program pre Arduino

Napísané: 13 Jún 2022, 05:42
od používateľa McSmekac
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);
}

Re: Program pre Arduino

Napísané: 13 Jún 2022, 06:04
od používateľa miso156
Premennej MM nikde nemenis hodnotu, inak povedane nikde do nej nezapisujes, takze je stale true ako su ju zinicializoval.

Re: Program pre Arduino

Napísané: 13 Jún 2022, 06:37
od používateľa McSmekac
A ako by to malo správne vyzerať? Lebo skúšal som aj zadať premenu int=MM ale tiež neúspešne.

Re: Program pre Arduino

Napísané: 13 Jún 2022, 06:37
od používateľa maskrtnik01
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.

Re: Program pre Arduino

Napísané: 13 Jún 2022, 07:18
od používateľa miso156
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);
	}
}	

Re: Program pre Arduino

Napísané: 13 Jún 2022, 08:09
od používateľa McSmekac
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.

Re: Program pre Arduino

Napísané: 13 Jún 2022, 08:42
od používateľa pocitujlasku
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

Re: Program pre Arduino

Napísané: 13 Jún 2022, 09:03
od používateľa miso156
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);
}                

Re: Program pre Arduino

Napísané: 13 Jún 2022, 09:28
od používateľa McSmekac
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.

Re: Program pre Arduino

Napísané: 13 Jún 2022, 09:55
od používateľa miso156
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.

Re: Program pre Arduino

Napísané: 13 Jún 2022, 11:01
od používateľa McSmekac
Konečne funguje....... možeš mi prosím ťa vysvetliť ten príkaz trim?

Re: Program pre Arduino

Napísané: 13 Jún 2022, 11:20
od používateľa miso156
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.

Re: Program pre Arduino

Napísané: 13 Jún 2022, 11:21
od používateľa dan21

Re: Program pre Arduino

Napísané: 13 Jún 2022, 11:34
od používateľa pocitujlasku
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).

Re: Program pre Arduino

Napísané: 13 Jún 2022, 11:48
od používateľa miso156
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.

Re: Program pre Arduino

Napísané: 13 Jún 2022, 12:12
od používateľa pocitujlasku
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...

Re: Program pre Arduino

Napísané: 29 Jún 2022, 11:04
od používateľa McSmekac
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);
}

Re: Program pre Arduino

Napísané: 29 Jún 2022, 12:25
od používateľa Mek
Nepouzivam arduino, ale moj tip by bol, ze to su znaky CR a LF, teda zariadkovanie - lebo si pouzil println a nie print. Vyskusaj...

Re: Program pre Arduino

Napísané: 29 Jún 2022, 13:15
od používateľa McSmekac
Super diki mal si pravdu