Program pre Arduino
Moderátor: Moderátori
Program pre Arduino
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.
Vstup:1.....oneskorený
2....oneskorený
3.....okamžitý
4.....okamžitý
5......okamžitý
6.......okamžitý
Ďakujem.
0
Re: Program pre Arduino
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);
}
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
-
- Pokročilý člen
- Príspevky: 648
- Dátum registrácie: 06 Dec 2020, 11:46
- Bydlisko: Banska Stiavnica
- Vek: 38
Re: Program pre Arduino
Premennej MM nikde nemenis hodnotu, inak povedane nikde do nej nezapisujes, takze je stale true ako su ju zinicializoval.
1
1
"No pain, no gain." (KC238)
Re: Program pre Arduino
A ako by to malo správne vyzerať? Lebo skúšal som aj zadať premenu int=MM ale tiež neúspešne.
0
-
- Ultimate člen
- Príspevky: 2582
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: Program pre Arduino
Ešte jedna rada.
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.
Kód: Vybrať všetko
while (Serial.available()==0)
{
}
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
-
- Pokročilý člen
- Príspevky: 648
- Dátum registrácie: 06 Dec 2020, 11:46
- Bydlisko: Banska Stiavnica
- Vek: 38
Re: Program pre Arduino
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.
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)
Re: Program pre Arduino
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
-
- Ultimate člen
- Príspevky: 6221
- Dátum registrácie: 20 Júl 2007, 00:00
- Vek: 41
Re: Program pre Arduino
Mne sa paci takyto zapis
co znamena nefunguje?
posielas tam: MM\r\n
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);
}
}
posielas tam: MM\r\n
1
1
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.
-
- Pokročilý člen
- Príspevky: 648
- Dátum registrácie: 06 Dec 2020, 11:46
- Bydlisko: Banska Stiavnica
- Vek: 38
Re: Program pre Arduino
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
1
"No pain, no gain." (KC238)
Re: Program pre Arduino
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.
Seriovka by mala funguvať lebo pred tím som robil iné projekty s písaním textu.
0
-
- Pokročilý člen
- Príspevky: 648
- Dátum registrácie: 06 Dec 2020, 11:46
- Bydlisko: Banska Stiavnica
- Vek: 38
Re: Program pre Arduino
Skus dat hned za :
este
Malo by to odstranit biele znaky zo stringu LEDKA ktore tam funkcia readString() asi dava.
Kód: Vybrať všetko
LEDKA = Serial.readString();
Kód: Vybrať všetko
LEDKA.trim();
1
1
"No pain, no gain." (KC238)
-
- Pokročilý člen
- Príspevky: 648
- Dátum registrácie: 06 Dec 2020, 11:46
- Bydlisko: Banska Stiavnica
- Vek: 38
Re: Program pre Arduino
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.
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
1
Naposledy upravil/-a miso156 v 13 Jún 2022, 11:23, upravené celkom 1 krát.
"No pain, no gain." (KC238)
-
- Ultimate člen
- Príspevky: 6221
- Dátum registrácie: 20 Júl 2007, 00:00
- Vek: 41
Re: Program pre Arduino
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).
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
1
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.
-
- Pokročilý člen
- Príspevky: 648
- Dátum registrácie: 06 Dec 2020, 11:46
- Bydlisko: Banska Stiavnica
- Vek: 38
Re: Program pre Arduino
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.
Neviem, arduino konzolu nepouzivam, vyrastal som na klasickom windows terminaly kde sa enter mackat nemusel, hehe.
0
"No pain, no gain." (KC238)
-
- Ultimate člen
- Príspevky: 6221
- Dátum registrácie: 20 Júl 2007, 00:00
- Vek: 41
Re: Program pre Arduino
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...
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.
Re: Program pre Arduino
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);
}
#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);
}
0
- Mek
- Zaslúžilý člen
- Príspevky: 1279
- Dátum registrácie: 15 Okt 2015, 20:49
- Bydlisko: Žilina
- Vek: 37
- Kontaktovať používateľa:
Re: Program pre Arduino
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
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
Moja databaza suciastok: ELPARTS
Moj velky elektro projekt: MEGA TRANSISTOR CLOCK
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 20 Odpovedí
- 1331 Zobrazení
-
Posledný príspevok od používateľa jankrizan
-
- 0 Odpovedí
- 1682 Zobrazení
-
Posledný príspevok od používateľa marianv
-
- 4 Odpovedí
- 1197 Zobrazení
-
Posledný príspevok od používateľa lucky62
-
- 3 Odpovedí
- 1465 Zobrazení
-
Posledný príspevok od používateľa mirosne
-
- 11 Odpovedí
- 2611 Zobrazení
-
Posledný príspevok od používateľa mirosne