Fórum témák
- • Tranzisztorok helyettesítése
- • Nagyfeszültségű tápegység
- • Leválasztó transzformátor
- • Boombox javítás
- • USB 3.2 HUB modul
- • Borhűtő vezérlő panel
- • Dobozolási technikák, műszerdobozok
- • A műhely (bemutató topik, ahol az alkotások készülnek)
- • Rádióamatőrök topikja
- • Sprint-Layout NYÁK-tervező
- • Számítógép hiba, de mi a probléma?
- • Rádió áthangolása, OIRT - CCIR konverter
- • Suzuki Swift elektronika
- • PLC kérdések
- • Transzformátor készítés, méretezés
- • Fejhallgató erősítő
- • Hangváltók (készítése)
- • Elfogadnám, ha ingyen elvihető
- • Klíma szervizelés, javítás
- • Arduino
- • Erősítő mindig és mindig
- • Kondenzátor
- • Hűtőgép kompresszor
- • Kapcsolóüzemű tápegység
- • Videomagnó problémák
- • Opel Astra elektromos hibák
- • Analóg voltmérő (multiméter)
- • Mosogatógép hiba
- • Li-Ion saját akkucsomag készítése
- • Kaputelefon
- • Adatlapot keresek
- • CNC építése házi alkatrészekből az alapoktól
- • Autóriasztó és központi zár
- • Elektromos távirányítós kapunyitó
- • Analóg oszcilloszkóp javítása
- • LED szalag
- • Hangszórójavítás (otthon)
- • Mosógép vezérlők és általános problémáik
- • Érdekességek
- • Villanypásztor
- • IMI villanymotor
- • Digitális adatátvitel
- • 3-fázisú Modbus-os teljesítményszabályzó (SCR power controller)
- • Villanyszerelés
- • TDA7294 végerősítő
- • Klíma beszerelése, fűtés-hűtés házilag
- • Kombikazán működési hiba
- • Általános antennás kérdések, válaszok
- • Elektronikai témájú könyvek újságok
- • Elektromos vezérlésű pneumatika
- • Internetes rádióvevő
- • Alternativ HE találkozó(k)
- • 3D nyomtatás
- • Felajánlás, azaz ingyen elvihető
- • Akkumulátor töltő
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
(#) |
vyky hozzászólása |
Okt 28, 2018 |
![](/pic/post_ranknd.png) |
/ |
![](/pic/post_rankyd.png) |
|
A hiba kijavítva.Köszönöm az észrevételeket. De viszont abban kellene segíteni nagyon,hogy azt hogy tudom megoldani hogy a ciklus érték nem mindig ugyan az legyen,hanem választható 4 variációból? Pl: 15-15 centi,20-20 centi,20-40 centi.
Gondolom többen kellene,de az nagyon sötét folt nekem.
Ha lehetne valami példával mutassa meg nekem valaki.
Előre is köszönöm.
Addig próbálom magamtól megcsinálni.
Szia!
if (distance >= 10){
digitalWrite (led,HIGH);
}
gondolom itt kell az, hogy ne csak 10-re működjön. Egyszerű! Felveszel egy változót pluszban, majd értéket adsz neki pl a setup-ban. Legyen ennek a változónak a neve distance_max. Setup-ban ez vegyen fel 10-t.
Ide aza kód ami lekéri a gombok állapotát....
if (distance >=distance_max){
digitalWrite (led,HIGH);
}
Ha van még szabad lábad, akkor megteheted azt, hogy rápakolsz egy kapcsolót. A loop-ban lekérdezed ennek az állapotát, és ha az igaz, akkor ez a változó legyen 15. Egy másikra is teszel egy gombot, azm meg 20. és így tovább.
1 gombbal megteheted azt, hogy minden gombnyomásra növeli öttel, max 20-ig vagy ameddig akarod. Egy másikkal meg csökkented egy minimum értékig.
Potméterrel is megoldhatod szintén. Keypadról is beolvashatod, serial moitorról is beolvashatod, GSM modulról is megkaphatod, Wifin keresztül is. Rengeteg megoldás van, ki kell választanod a neked tetszőt!
A gombnyomásos megoldásnál figyelni kell a prell-re is. Én kiszervezném ezt is egy függvénybe.
Ha két érték között kell:
if (valami> valami_minimum ) ÉS (valami<valami_maximum)
akkor ez mikor fut le? ![](/pic/smile/smile.gif) Ehhez két plusz változó kell.
Sziasztok.
Tegnap vettem egy ESP-01 WI-FI modult adapterrel együtt.
És nagyon sokat olvasgattam az interneten de nem találtam semmilyen leírást hogy hogy kellene működésre bírni. Egyenlőre nincs vele semmi célom csak próbálgatás képpen szeretném a segítséget kérni. A későbbiekben szeretném majd használni élesbe de addig meg szeretném tanulni a működését csak hát kellene valami elindító hozzá.
Szép estét.
Erősen csodálkoznék, ha ne lenne 100 ezer találat az interneten ESP01 használatára. Mit szeretnél csinálni, amit nem találtál meg?
Osztom Tbarath véleményét.
De talán mint kezdőnek ajánlom az esp8266 wifi modul témát és egy espeasy firmware-t feltölteni rá.
Nem tudom csak próbálgatni akármit.
És nem találtam egy használható magyar cikket sem.
Ja hogy magyarul, az ritka eléggé, de ez igaz mindenre. Kicsi a magyar nyelvű piac, és aki olvasna ilyet az többnyire már rég megtalálta az adott tartalmat angolul.
Mindenesetre: Bővebben: Link
Az első pár oldalon találtam pár blogbejegyzést magyarul, bár nem olvastam át érdemben, de a semminél több. Illetve itt a fórumon is van topic, már linkelték is.
Köszi. Majd olvasgatok akkor még.
Üdv.
Ez egy angol nyelvű leírás, de a képek meg a letöltési linkek eléggé egyértelműek, nyelvtudás nélkül is. (Gondolom, Arduino IDE alatt akarod programozni, ha már ebbe a témakörben tetted fel a kérdést...)
Szia!
Az érintetlen modulokon valamelyik AT firmware szokott lenni gyárilag. Kipróbálni ki tudod akármelyik terminálprogrammal (pl. Putty). Az AT parancsokról van itt a HE fórumon egy cikk, de a teljes ide vonatkozó pdf dokumentum is letölthető a netről. Van egy ESPlorer nevű program, ami segít kiismerni ezt a fajta használatot. A legtöbben egyébként Arduinoval készítenek saját programot a modulhoz. Magyar nyelvű doksi kevés van sajnos, de angolból rengeteg. Érdemes ezeket is megnézni, a példaprogramokból rengeteget lehet tanulni. Az ESP-01 modulnak sajnos kevés a kivezetett GPIOja, ezért az alkalmazhatósága eléggé korlátozott. Szerintem más kontrollerrel együtt válik csak igazán használhatóvá.
Ehhez jut eszembe, hogy használta már valaki a XOD grafikus fejlesző/IDE programot Arduinohoz,
Látszólag egyszerűnek és rugalmasnak tűnik!
Sziasztok!
Még mindig a soros kommunikációval küzdök.
While ciklust még nem használtam sehol, viszont véleményetek szerint ez milyen hatással lesz a programra:
while (Serial.available() > 0) {
int inByte = Serial.read();
if (inByte == 'X') {
Serial.println("X vetel");
}
}
?
Ez semmilyennel, max. belassítja kicsit.
Ugyanis a soros porton kapott értéket kiolvasod a queue-ból egy változóba addig, amíg a queue ki nem ürül. Szóval később - a most nem látott kódban - fel tudod dolgozni a legutolsó kiolvasott karaktert, a többi input elveszett.
(#) |
vyky hozzászólása |
Okt 30, 2018 |
![](/pic/post_ranknd.png) |
/ |
![](/pic/post_rankyd.png) |
|
Sziasztok ismét.
Kicsit tovább írtam a kódot,annyit változtattam rajra,hogy a különböző méreteket kapcsolóval aktiválom,így amelyik kapcsoló be van kapcsolva annak az értékével nullázódik a led.
De a 2-4 métereset nem tudom megoldani.
Tudom lehetne szebben is csinálni,de nekem erre futja ![](/pic/smile/sad.gif)
Valaki ránézne? Köszönöm.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define outputA A2 //enkoder 1
#define outputB A3 //enkoder 2
int abutton =6;//1,5-1,5méter kiosztás
int bbutton =7;//2-2 méter kiosztás
int cbutton =8;//2-4 méter kiosztás
int astate =0;
int bstate =0;
int cstate =0;
int led = 10;// pisztolyszelep
int Pos = 0;
int State;
int LastState;
int minPos = 18;//ezt kellene beírni valahogy
int maxPos = 39;//és ezt is
const float pi = 3.14;
byte V = 1;
const int R = 7;//kerék átmérő
const int N = 22;//encodr osztása
float distance = 0;
void setup(){
lcd.begin(16,2);
pinMode(abutton, INPUT_PULLUP);
pinMode(bbutton, INPUT_PULLUP);
pinMode(cbutton, INPUT_PULLUP);
pinMode (led,INPUT);
pinMode (outputA,INPUT);
pinMode (outputB,INPUT);
digitalWrite(led,LOW);
lcd.begin(16 ,2);
lcd.print("Festőgép");
// Reads the initial state of the outputA
LastState = digitalRead(outputA);
}
void loop() {
State = digitalRead(outputA);
if (State != LastState){
if (digitalRead(outputB) != State) {
Pos ++;
}
else {
Pos --;
}
if (digitalRead(abutton)== LOW) {
distance = Pos+(2*pi*R)/N;
lcd.setCursor(0,1);
lcd.print("ertek");
lcd.println(distance);
lcd.println("cm");
lcd.setCursor(0,0);
lcd.print("1.5-1.5 meter");
if (Pos == 8){
V^= 1;
digitalWrite (led,V);
Pos = 0;
distance = (distance +1 );
LastState = State;}
}
if (digitalRead(bbutton)== LOW) {
distance = Pos+(2*pi*R)/N;
lcd.setCursor(0,1);
lcd.print("ertek");
lcd.println(distance);
lcd.println("cm");
lcd.setCursor(0,0);
lcd.print("2-2 meter ");
if (Pos == 18){
V^= 1;
digitalWrite (led,V);
Pos = 0;
distance = (distance +1 );
LastState = State;}
}
if (digitalRead(cbutton)== LOW) {
distance = Pos+(2*pi*R)/N;
lcd.setCursor(0,1);
lcd.print("ertek");
lcd.println(distance);
lcd.println("cm");
lcd.setCursor(0,0);
lcd.print("2-4 meter ");
if (Pos == minPos){
digitalWrite(led,HIGH);
}else{
digitalWrite (led,LOW);
Pos = 0;
distance = (distance +1 );
LastState = State;}
}
}
LastState = State;}
Első kanyarban az encoder ne outputA és B legyen, hanem mondjuk encA, encB! Ez csak esztétika, de félrevezető. Aztán a led az output legyen, ha már kimenet (29. sor).
Nézem tovább.
Amúgy szerintem elég egy kapcsoló, és ha egyszer megnyomod akkor az egyik méret, ha mégegyszer akkor a másik, aztán a harmadik lenne. Egyszerűbbnek tűnik mint enkóderrel. Ellenben nem oldottad meg a prell kérdését, valamint ha nyomva tartod a kapcsolót, akkor folyamtosan ismételgeetve végre fogja hajtani a benne foglaltakat. Ezt tovább kell még gondolni! A hozzászólás módosítva: Okt 30, 2018
Szia. A megnevezésed jogos ![](/pic/smile/wink.gif) Átírom,de a kapcsoló nem véletlen, mivel 3 kapcsoló lesz és mikor melyik van bekapcsolva azzal dolgozik. Az enkóder meg méri a távolságot,így annak maradnia kell.A prell még vissza van valóban
Még annyi, hogy a sok if {} helyett érdemesebb lenne így:
void loop()
{
if (kapcsolóA == LOW)
üzemmódA();
if (kapcsolóB == LOW)
üzemmódB();
if (kapcsolóC == LOW)
üzemmódC();
}
...
// Első kapcsolóhoz tartozó dolgok
void üzemmódA()
{
}
// Második kapcsolóhoz tartozó dolgok
void üzemmódB()
{
}
...
Sokkal áttekinthetőbb ha kiszervezed eljárásokba a hosszú és bonyolult dolgokat, ráadásul a vezérlő sem fog összekavarodni a sok feltétel miatt. Tudom, a vezérlő egyébként sem tenné, mindig a programozó kavarodik meg
Ez remek,köszönöm, Át is írom nyomban
Valamiért a loop ban lévő uzemmodA re hibát ír ki ,hogy nincs deklarálva.miközben alatta ott a viod uzemmodA :S Pedig úgy írtam ahogy te mutattad,csak ékezet nélkül. A hozzászólás módosítva: Okt 30, 2018
Idézet: „alatta”
Alatta, vagyis utána, ezért fogalma sincsen róla. A loop elé írj ennyit: Valamint kerüld az ékezetes karaktereket.
Plusz kérdés: Miért kell 3 kapcsoló? Már két kapcsolóval is 4 különböző működési módot tudsz beállítani.
Szia. Köszönöm a tanácsot,egyből nem kiabál miatta. Most a void uzemmodA -ra kiabál :S
Azért kell 3 kapcsoló mert menet közbeni rázkódásra is gondolok,nehogy átbillenjen.ez simán csak túlbiztosítás,
Arduino: 1.8.5 (Windows XP), Alaplap:"Arduino/Genuino Uno"
majdnem:77: error: variable or field 'uzemmodB' declared void
void uzemmodB{
^
majdnem:78: error: expected primary-expression before 'if'
if (digitalRead(kapcsoloB)== LOW) {
^
majdnem:78: error: expected '}' before 'if'
exit status 1
variable or field 'uzemmodB' declared void
Ennek a jelentésnek több információja lehetne
a "Bővebb kimenet mutatása fordításkor"
opció engedélyezésével a Fájl -> Beállítások-ban.
A hozzászólás módosítva: Okt 30, 2018
(#) |
vyky hozzászólása |
Okt 30, 2018 |
![](/pic/post_ranknd.png) |
/ |
![](/pic/post_rankyd.png) |
|
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define encoderA A2 //enkoder 1
#define encoderB A3 //enkoder 2
int kapcsoloA =6;//1,5-1,5méter kiosztás
int kapcsoloB =7;//2-2 méter kiosztás
int kapcsoloC =8;//2-4 méter kiosztás
int astate =0;
int bstate =0;
int cstate =0;
int led = 10;// pisztolyszelep
int Pos = 0;
int State;
int LastState;
int minPos = 18;//ezt kellene beírni valahogy
int maxPos = 39;//és ezt is
const float pi = 3.14;
byte V = 1;
const int R = 7;//kerék átmérő
const int N = 22;//encodr osztása
float distance = 0;
void setup(){
lcd.begin(16,2);
pinMode(kapcsoloA, INPUT_PULLUP);
pinMode(kapcsoloB, INPUT_PULLUP);
pinMode(kapcsoloC, INPUT_PULLUP);
pinMode (led,INPUT);
pinMode (encoderA,INPUT);
pinMode (encoderB,INPUT);
digitalWrite(led,LOW);
lcd.begin(16 ,2);
lcd.print("Festőgép");
// Reads the initial state of the outputA
LastState = digitalRead(encoderA);
}
void loop() {
if (kapcsoloA == LOW){
void uzemmodA();
}
if (kapcsoloB == LOW){
void uzemmodB();
}
if (kapcsoloC == LOW){
void uzemmodC();
}
State = digitalRead(encoderA);
if (State != LastState){
if (digitalRead(encoderB) != State) {
Pos ++;
}
else {
Pos --;
}
LastState = State;}
}
void uzemmodA(){
if (digitalRead(kapcsoloA)== LOW) {
distance = Pos+(2*pi*R)/N;
lcd.setCursor(0,1);
lcd.print("ertek");
lcd.println(distance);
lcd.println("cm");
lcd.setCursor(0,0);
lcd.print("1.5-1.5 meter");
if (Pos == 8){
V^= 1;
digitalWrite (led,V);
Pos = 0;
distance = (distance +1 );
LastState = State;
}
}
}
void uzemmodB{
if (digitalRead(kapcsoloB)== LOW) {
distance = Pos+(2*pi*R)/N;
lcd.setCursor(0,1);
lcd.print("ertek");
lcd.println(distance);
lcd.println("cm");
lcd.setCursor(0,0);
lcd.print("2-2 meter ");
if (Pos == 18){
V^= 1;
digitalWrite (led,V);
Pos = 0;
distance = (distance +1 );
LastState = State;}
}
}
void uzemmodC{
if (digitalRead(kapcsoloC)== LOW) {
distance = Pos+(2*pi*R)/N;
lcd.setCursor(0,1);
lcd.print("ertek");
lcd.println(distance);
lcd.println("cm");
lcd.setCursor(0,0);
lcd.print("2-4 meter ");
if (Pos == minPos){
digitalWrite(led,HIGH);
}else{
digitalWrite (led,LOW);
Pos = 0;
distance = (distance +1 );
LastState = State;}
}
}
Eddig jutottam.
Nemnem!
A void azt jelenti hogy nincs visszatérési értéke a függvénynek! A függvény deklarációba kell, és csakis oda! Az if-ből szedd ki! ![](/pic/smile/smile.gif)
Meg kicsit szétkavartad a többit is. Amit írtam csak egy pszeudo-kód volt, hogy a működést szemléltessem. Ettől még van az arduinónak egyfajta szintatikája, ezt tartani kell.
Tehát:
if (digitalRead(kapcsoloA) == LOW)
{
uzemmodA();
}
...
// valahol a loop-on kívül pedig
void uzemmodA()
{
// ide jön amit az A üzemmód előír
}
Tehát a "void uzemmodA()" lesz a függvény, amit meghívsz. Ő az aki elvégzi a feladatot. Mindenhol máshol csak meghívod, mint bármelyik másik utasítást. A hozzászólás módosítva: Okt 30, 2018
Most meg a loop-nál kiabál
Arduino: 1.8.5 (Windows XP), Alaplap:"Arduino/Genuino Uno"
C:\Documents and Settings\Rendszergazda\Dokumentumok\Arduino\majdnem\majdnem.ino: In function 'void loop()':
majdnem:44: error: 'uzemmodB' was not declared in this scope
uzemmodB();
^
majdnem:47: error: 'uzemmodC' was not declared in this scope
uzemmodC();
^
C:\Documents and Settings\Rendszergazda\Dokumentumok\Arduino\majdnem\majdnem.ino: At global scope:
majdnem:81: error: variable or field 'uzemmodB' declared void
void uzemmodB{
^
majdnem:82: error: expected primary-expression before 'if'
if (digitalRead(kapcsoloB)== LOW) {
^
majdnem:82: error: expected '}' before 'if'
exit status 1
'uzemmodB' was not declared in this scope
Ennek a jelentésnek több információja lehetne
a "Bővebb kimenet mutatása fordításkor"
opció engedélyezésével a Fájl -> Beállítások-ban.
Ne kapkodj!
Nem kalapálunk a billentyűzettel, hanem átgondoljuk a dolgokat. Kódot mutass.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define encoderA A2 //enkoder 1
#define encoderB A3 //enkoder 2
int kapcsoloA =6;//1,5-1,5méter kiosztás
int kapcsoloB =7;//2-2 méter kiosztás
int kapcsoloC =8;//2-4 méter kiosztás
int astate =0;
int bstate =0;
int cstate =0;
int led = 10;// pisztolyszelep
int Pos = 0;
int State;
int LastState;
int minPos = 18;//ezt kellene beírni valahogy
int maxPos = 39;//és ezt is
const float pi = 3.14;
byte V = 1;
const int R = 7;//kerék átmérő
const int N = 22;//encodr osztása
float distance = 0;
void setup(){
lcd.begin(16,2);
pinMode(kapcsoloA, INPUT_PULLUP);
pinMode(kapcsoloB, INPUT_PULLUP);
pinMode(kapcsoloC, INPUT_PULLUP);
pinMode (led,INPUT);
pinMode (encoderA,INPUT);
pinMode (encoderB,INPUT);
digitalWrite(led,LOW);
lcd.begin(16 ,2);
lcd.print("Festőgép");
// Reads the initial state of the outputA
LastState = digitalRead(encoderA);
}
void loop() {
if (kapcsoloA == LOW){
uzemmodA();
}
if (kapcsoloB == LOW){
uzemmodB();
}
if (kapcsoloC == LOW){
uzemmodC();
}
State = digitalRead(encoderA);
if (State != LastState){
if (digitalRead(encoderB) != State) {
Pos ++;
}
else {
Pos --;
}
LastState = State;}
}
void uzemmodA(){
//if (digitalRead(kapcsoloA)== LOW) {
distance = Pos+(2*pi*R)/N;
lcd.setCursor(0,1);
lcd.print("ertek");
lcd.println(distance);
lcd.println("cm");
lcd.setCursor(0,0);
lcd.print("1.5-1.5 meter");
if (Pos == 8){
V^= 1;
digitalWrite (led,V);
Pos = 0;
distance = (distance +1 );
LastState = State;
}
}
// }
void uzemmodB{
//if (digitalRead(kapcsoloB)== LOW) {
distance = Pos+(2*pi*R)/N;
lcd.setCursor(0,1);
lcd.print("ertek");
lcd.println(distance);
lcd.println("cm");
lcd.setCursor(0,0);
lcd.print("2-2 meter ");
if (Pos == 18){
V^= 1;
digitalWrite (led,V);
Pos = 0;
distance = (distance +1 );
LastState = State;}
}
//}
void uzemmodC{
//if (digitalRead(kapcsoloC)== LOW) {
distance = Pos+(2*pi*R)/N;
lcd.setCursor(0,1);
lcd.print("ertek");
lcd.println(distance);
lcd.println("cm");
lcd.setCursor(0,0);
lcd.print("2-4 meter ");
if (Pos == minPos){
digitalWrite(led,HIGH);
}else{
digitalWrite (led,LOW);
Pos = 0;
distance = (distance +1 );
LastState = State;}
}
//}
Nem javítottad ki az if-et ahogy mondtam. Most csak annyit csináltál, hogy megnézted a kapcsoloA értékét (6), hogy ez nullával egyenlő-e. Naná hogy nem. De mindegy is, mert értelmetlen. Javítsd ahogy fentebb írtam. A mi dolgunk az, hogy a 6-os láb feszültségét hasonlítjuk össze a nullával, tehát le van-e húzva (low). De ezt a digitalRead() függvény csinálja, és magától nem fogja tudni. Ezért mondom hogy ne kapkodj! A hozzászólás módosítva: Okt 30, 2018
|
|