Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Gyorskeresés
Legfrissebb anyagok
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
- Tudástár AMD Radeon undervolt/overclock
Általános témák
LOGOUT.hu témák
- [Re:] PLEX: multimédia az egész lakásban
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [MasterDeeJay:] Volta a bányából azaz CMP 100-210 kisteszt (Tesla V100 mining)
- [Re:] [Sub-ZeRo:] Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- [Re:] [sziku69:] Szólánc.
- [Re:] [antikomcsi:] Való Világ: A piszkos 12 - VV12 - Való Világ 12
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [sh4d0w:] Rebel Moon - Ne nézd meg!
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [bitpork:] Fogyasztásra ítélve
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Útvonal
Fórumok » Egyéb hardverek » Mikrokontrollerek Arduino környezetben (programozás, építés, tippek)Téma összefoglaló
Hozzászólások
tvamos
nagyúr
Én inkább feltennék mégegy Arduino-t, mondjuk egy minit. Vagy csak egy mega328-at... Akkor nem kell az ellenállás háló, a kommunikáció mehet i2c-n, spi-n, asincron serial, vagy akármi.
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
Flashback
addikt
Köszönöm mindkettőtöknek!
Bocs nincs hosszú ö, ü és néha az á is ä :)
Pubszon
veterán
Üdv.
Van egy shift register modulom, konkrétan ez.
Az alábbi probléma van vele.
HIGH-ra hibátlanul kapcsol, viszont LOW-ra mindig hibásan.
Az utolsó kettőt mindig egyszerre kapcsolja, de van hogy másik kettőt is egyszerre kapcsol LOW-ra.
VIDEO ITT.
Kód:
const int SHCP_pin = 12;
const int STCP_pin = 11;
const int DS_pin = 10;
const int shiftoutput = 7;
boolean registers[8];
void setup()
{
pinMode(DS_pin, OUTPUT);
pinMode(STCP_pin, OUTPUT);
pinMode(SHCP_pin, OUTPUT);
}
void loop()
{
delay(1000);
for (int i = shiftoutput; i >= 0; i--)
{
registers[i] = LOW;
writereg();
delay(500);
}
delay(1000);
for (int i = shiftoutput; i >= 0; i--)
{
registers[i] = HIGH;
writereg();
delay(500);
}
}
void writereg()
{
digitalWrite(STCP_pin, LOW);
for (int i = shiftoutput; i >= 0; i--)
{
digitalWrite(SHCP_pin, LOW);
digitalWrite(DS_pin, registers[i] );
digitalWrite(SHCP_pin, HIGH);
}
digitalWrite(STCP_pin, HIGH);
}
Mi lehet a hiba? Vagy hardveres?
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
zka67
őstag
Szia, próbáld meg így:
void setup()
{
pinMode(DS_pin, OUTPUT);
pinMode(STCP_pin, OUTPUT);
pinMode(SHCP_pin, OUTPUT);
digitalWrite(STCP_pin, LOW);
digitalWrite(SHCP_pin, LOW);
}
...
void writereg()
{
digitalWrite(STCP_pin, LOW);
digitalWrite(SHCP_pin, LOW);
for (int i = shiftoutput; i >= 0; i--)
{
digitalWrite(DS_pin, registers[i] );
digitalWrite(SHCP_pin, HIGH);
digitalWrite(SHCP_pin, LOW);
}
digitalWrite(STCP_pin, HIGH);
digitalWrite(STCP_pin, LOW);
}
Pubszon
veterán
Megpróbálom, köszi, de szerintem hardveres a gond.
Most csináltam egy ilyen modult, azzal hibátlan, úgyhogy szerintem hardveres a gond.
Mennem kell vissza dolgozni, de majd kipróbálom.
MOD: Amit én csináltam, azzal jó a kódod, a gyári panellal pedig este próbálom ki!
[ Szerkesztve ]
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
Pubszon
veterán
Megnéztem.
A kódod jó, de a modul továbbra sem az igazi.
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
zka67
őstag
Szia, nincs valahol zárlat?
Pubszon
veterán
Gyári panel, nem vettem észre hogy lenne, szerintem nincs, mert a LED-ek felkapcsolása mindig hibátlan mint a videón is látszik.
Csak a lekapcsolás a hibás.
Amit én dobtam össze, az hibátlan.
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
Saua
tag
Sziasztok,
Ezt a kódot sikerült összeeszkábálni, nyomógombbal és telefonról is lehet kapcsolgatni a LED –et, és a telefonon megjelenik a LED aktuális állapota.
/*
LED attached from pin 12 to ground
pushbutton attached to pin 5 from +5V
10K resistor attached to pin 5 from ground
*/
#include <SoftwareSerial.h>
int bluetoothTx = 2; // TX-O pin of bluetooth mate, Arduino D2
int bluetoothRx = 3; // RX-I pin of bluetooth mate, Arduino D3
int led = 12;
int button = 5;
int dataFromBt;
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
// változókat hozunk létre:
int ledState = LOW; // kimeneti pin aktuális állapota
int buttonState; // bemeneti pin aktuális állapota
int lastButtonState = LOW; // bemeneti pin előző értéke
long lastDebounceTime = 0;
long debounceDelay = 50;
void setup()
{
Serial.begin(9600); // Begin the serial monitor at 9600bps
bluetooth.begin(115200); // The Bluetooth Mate defaults to 115200bps
bluetooth.print("$"); // Print three times individually
bluetooth.print("$");
bluetooth.print("$"); // Enter command mode
delay(100); // Short delay, wait for the Mate to send back CMD
bluetooth.println("U,9600,N"); // Temporarily Change the baudrate to 9600, no parity
// 115200 can be too fast at times for NewSoftSerial to relay the data reliably
bluetooth.begin(9600); // Start bluetooth serial at 9600
pinMode(led, OUTPUT);
pinMode(button, INPUT);
digitalWrite(led, ledState);
}
void loop()
{
if(bluetooth.available()) // If the bluetooth sent any characters
{
dataFromBt = bluetooth.read();
if(dataFromBt == '1'){
digitalWrite(led, HIGH);
ledState = HIGH;
}
if(dataFromBt == '0'){
digitalWrite(led, LOW);
ledState = LOW;
}
if(dataFromBt == '3'){
bluetooth.print(ledState);
}
}
int reading = digitalRead(button);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
ledState = !ledState;
digitalWrite(led, ledState);
}
}
}
lastButtonState = reading;
}
Ezt szeretném módosítani, hogy négy LED –et lehessen kapcsolgatni.
Főleg a LED aktuális állapotának a lekérdezésével van a gond (most a telefon 100 miliszekundomonként küldi a 3-as karaktert és visszakapja a 1 vagy 0 karaktert)…nem tudom hogyan küldhetne a többi LED más-más karaktert az állapotokról, mert az állapotuk csak LOW vagy HIGH lehet.
Danex
addikt
Autóriasztót és így indításgátlót terveznék csinálni az autóba, szerintetek miket kéne belepakolni?
Én eddig IR mozgásérzékelőt, döntés érzékelőt és egy titkos megoldást a gyújtás relé kapcsolásához.
Saua
tag
A mozgásérzékelőnek nem lenne jobb egy ultrahangos érzékelő ? Szerintem mindenképp tudjon küldeni SMS -t ha esemény van.
Danex
addikt
Ami a sofőr ülésére lenne irányítva? Az infrás pontatlan/megbízhatatlan lenne?
Meg a távirányítós részt nem építenék bele, hisz a mostani autók gyengéje is ez, hogy a távvezérlőt le tudják olvasni. Szóval a bel térből gondoltam az aktiválást/deaktiválást.
Gondoltam arra, hogy nyitástól számítva 10-15s lenne az ameddig van idő a riasztót kikapcsolni, mielőtt megszólalnának a kűrtök. Ehhez lehet kéne egy rtc modul.
GSM modulra én is gondoltam, majd keresek még hozzá.
Pubszon
veterán
Még mindig a shift regiszterrel (továbbiakban SR) bajlódok.
Van 2 projektem az asztalon és a következőt vettem észre:
Az egyik amiben van a SR az vezérel 2 LED-et, egy aktív buzzert és 4 relét.
A másik pedig egy kapunyitó elektronika.
Mind a kettő jó működik, nincsenek egy elektromos körben.
Amikor a kapunyitó 24V-os reléi kapcsolnak, akkor random a másik projekt SR kimenetén össze vissza kapcsolgatja a ledeket, reléket és a buzzert a SR.
A SR építésénél nem használtam sem ellenállást, sem pedig kondenzátort.
Ami biztosnak tűnik, azaz, hogy az USB kábelt ha kihúzom az arduinobol ami a SR-es arduino-t köti össze a géppel, akkor nincs ilyen probléma. (Mint ha egy nagy antenna lenne )
Ebből arra gondolok, hogy valami nagyfrekvenciás zajt szedhet össze az USB kábelen.
Hogy tudom én ezt megszüntetni?
Remélem érthetően fogalmaztam.
[ Szerkesztve ]
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
maestro87
őstag
Sziasztok!
Kicsit off leszek.
Ilyen léptetőmotor meghajtó modulból nincs véletlen valakinek elvétve kettő? Ebay-re nem tudok most várni. Természetesen felárat fizetnék értük.
[ Szerkesztve ]
gyapo11
őstag
A távirányító elég könnyen törhetetlenné tehető, OTP-vel. Nem, nem a bankkal.
Fogni kell egy pro minit, egy nagyobb flasht, és teletölteni véletlenszámokkal, ugyanezt az autóba is, és szép sorban használni a byte-okat. Ha zavarják a vételt, akkor a vevő a kapott kódot keresi előrefelé x db-ig, mondjuk 10-ig. Mivel a számok között _semmi_ összefüggés nincs, nem lehet kiszámolni a következőt meg egyáltalán egyiket se. Annak a valószínűsége, hogy véletlenül eltalálja a következő 10 kód egyikét attól függ, milyen hosszú a kód. Ha mondjuk 2 byte, akkor már 1 a 65536-hoz, ha 3 byte, akkor 1 a 16 millióhoz.
Ha pedig nincs a következő 10 között a kapott kód, akkor 3-at kell beolvasni, és egymás mellett levő 3-at kell kapni.
A lehallgatást el lehet kerülni fénnyel, üvegen belül a vevő, kívülről meg rányomni az adót, azt scannelje le úgy, hogy nem veszem észre.
És ha már közel megyek, akkor az rfid is szóbajöhet, nem tudom autóüvegen át is működik-e.
menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
JozsBiker
aktív tag
Szia !
Azért nem értem a kérdésed, mert ha egy ilyen programot sikerült összehoznod ( amihez nyilván kellett a telefon oldali rész is, ami szintén nem annyira egyszerű ), akkor miért nem tudod könnyűszerrel átírni több LEDesre :-)
Első közelítésben az jutott eszembe, hogy az adatcsere legkisebb egysége a byte, aminek ugye 256 különböző állapota lehet, tehát bőven el lehet benne kódolni 4 LED állapotát.
Vagy ha mégsem, akkor egymás után küldözgetni. Van egy elválasztó karakter, pl. * , utána szépen sorban küldöd a 4 LED állapotát. Olvasáskor a * -ból tudod hol tartasz.
Épp nemrég fejeztem be egy "projektet", ami 64 db LED -det vezérel Androidról. Igaz, itt csak egyirányú a kommunikáció. Ennél úgy oldottam meg, hogy minden kigyújtásnál ill. oltásnál el van küldve a LED sorszáma, és egy + vagy - karakter attól függően hogy kigyújtani v. eloltani kell-e.
Tökre ugyanaz lett, mint ebben a videóban :
tvamos
nagyúr
Ha zavar a zaj, hasznalj tobb arduinot, es kosd ossze oket soros porton. Ha meg akkor is zavarodik, akkor nagyobb arammal kell meghajtani a soros kabelt. (Felhuzoellenallas....)
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
Saua
tag
Szia,
Az androidos rész az Appinventorral készült, a használata nagyon egyszerü, nem kell hozzá programozói tudás. Az arduinós kód pedig mint egy legó lett összerakva egy tipikus nyomógombos példaprogramból (először bekapcsolja, majd második megnyomásnál kikapcsolja a LED-et, pergésmentesítést is használ) meg egy LED ki-be kapcsolgató kódbol.
De ha már négy nyomógombrol plusz a telefonrol jövő karaterekrő van szó, gondolom már tömböt kellene használni....az meg már más tudásszint
[ Szerkesztve ]
Pubszon
veterán
A lényeg az, hogy ha a nanoba be van dugva egy USB kábel, akkor a relék kapcsolásakor a shift regiszter kimenete megváltozik.
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
tvamos
nagyúr
Ezt én értem. Nekem is volt ilyen gondom régen. Én kidobtam az összes shift regisztett a retekbe. Elavult technológia.
Tegyél kisebb értékű felhúzó ellenállásokat! Az szerintem segíteni fog valamelyest. Ha ront a dolgon, akkor meg legalább tudjuk, hogy földlelési, vagy táp gondod van.
[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
Imy
veterán
Most ismerkedek az arduinóval, de nem akar összejönni a következő program részlet. A lényeg hogy a nyomógomboknak a 13-as kimenetet kellene működtetni,. Ha megnyomom bekapcsol, ha megnyomom még egyszer kikapcsol.
Vizsgálni akarom, ha be van kapcsolva akkor lehessen kikapcsolni... De nem megy.
#include "LiquidCrystal.h"
// A LiquidCrystal eljarast hasznaljuk
LiquidCrystal lcd(5, 4, 0, 1, 2, 3);
// Az LCD bekotese labak szerint:
// RS(D5), E(D4), D4(D0) ,D5(D1), D6(D2), D7(D3)
//PIN0 LCD D4
//PIN1 LCD D5
//PIN2 LCD D6
//PIN3 LCD D7
//PIN4 LCD E
//PIN5 LCD RS
int NYOMOGOMB = 6; //PIN6
//PIN7
//PIN8
//PIN9
//PIN10
//PIN11
//PIN12
int LED = 13;
void setup() {
lcd.begin(16, 2); //Az LCD 2 sor, 16 oszlopos
lcd.print("Nyomogomb:"); //
lcd.setCursor(10, 0); //
lcd.print("KI"); //
pinMode(NYOMOGOMB, INPUT); //PIN6 nyomogomb bemenet
pinMode(LED, OUTPUT); //PIN13 LED meghajtás
int KiAll_13; //13. kimenet állapotát figyeljük
KiAll_13 = 0; // alapértelmezés beállítása
digitalWrite((LED), LOW); //LED kikapcsolva alapértelmezettként
}
void loop()
{
nyomogomb_BE();
nyomogomb_KI();
}
void nyomogomb_BE()
{
if (digitalRead(NYOMOGOMB) == LOW)
delay(20); // prell elkerülése
{
if (digitalRead(NYOMOGOMB) == LOW)
{
digitalWrite((LED), HIGH);
int KiAll_13 = 1;
}
}
}
void nyomogomb_KI()
{
if (KiAll_13 == 1)
{
if (digitalRead(NYOMOGOMB) == LOW)
delay(20); // prell elkerülése
{
if (digitalRead(NYOMOGOMB) == LOW)
{
digitalWrite((LED), LOW);
int KiAll_13 = 2;
}
}
}
}
sketch_oct18a.ino: In function 'void nyomogomb_KI()':
sketch_oct18a:64: error: 'KiAll_13' was not declared in this scope
'KiAll_13' was not declared in this scope
zka67
őstag
Szia, így próbáld meg:
void loop() {
int curr, prev, state;
prev = 1;
state = 0;
while (1) {
curr = digitalRead(NYOMOGOMB);
if ((curr == 0) && (prev != 0)) {
state ^= 1;
digitalWrite(LED, state);
}
prev = curr;
delay(100);
}
}
Imy
veterán
Köszi, de le is írnád, hogy ez hogyan működik? Érteni is akarom, és tanulni is belőle.
Saua
tag
Szia,
itt nagyon jó példaprogramokat lehet találni, magyarázatokkal.
Pubszon
veterán
int KiAll_13; //13. kimenet állapotát figyeljük sort ne a setup részbe rakd!
[ Szerkesztve ]
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
gyapo11
őstag
A while feltétele 1, ami igaz, vagyis örökké fog futni.
curr = digitalRead(NYOMOGOMB);
beírja a curr változóba a gomb állapotát.
if ((curr == 0) && (prev != 0)) {
Mivel prev=1, vagyis igaz, hogy nem 0, csak akkor igaz az if feltétele, ha curr=0. Vagyis amíg curr=1, addig nem történik változás, az if nem fut le,
prev = curr;
prevbe beírja a curr-t, vagyis 1-et, vár 100 msecet, és újra kezdi a while-t.
Egyszer megváltozik a gomb állapota, és a curr-ba 0 kerül. Ekkor az if feltétele már igaz lesz, mert curr=0 és prev nem 0.
state ^= 1;
A ^ jel a bitwise xor, vagyis 1-gyel xorolja a biteket, aminek következtében ami 0 volt az 1 lesz, ami 1 volt az 0 lesz. A state eddig 0 volt, vagyis most 1 lesz.
digitalWrite(LED, state);
Vagyis a LED pinbe 1-et ír, a led világítani kezd.
prev = curr;
A prevbe 0 kerül, innen már tudjuk, hogy az if nem fog lefutni, mert a prev nem 0 feltétel nem teljesül, egészen addig, amíg a nyomógomb állapota ismét nem változik és válik 1-gyé.
delay(100);
Ez a pergésmentesítés miatt kell, hogy a nyomógomb lenyomásakor és felengedésekor létrejövő többtucat ki-be kapcsolást figyelmen kívül hagyjuk. Csak az első változást dolgozzuk föl, utána várunk 100 msecet, addig ezek a parazita kapcsolások megszűnnek.
[ Szerkesztve ]
menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
zka67
őstag
Szia, a működése: a prev változó tárolja a nyomógomb előző állapotát, a state a kimenet aktuális állapotát.
Utána egy végtelen ciklusban beolvassa a curr változóba a nyomógomb aktuális állapotát, majd megnézi, hogy a nyomógomb most le van-e nyomva és az előző állapotban nem volt-e lenyomva, azaz most került-e lenyomásra. Ha igen, megváltoztatja a kimenet állapotát és kiírja azt a portra. A végén minden esetben átkerül az előző állapotba a nyomógomb aktuális állapota, és vár 100ms-et a nyomógomb prell elkerülésére.
NYOMÓGOMB ___ _________ _____ ______
\____/ \/\______/ \_/
LED ______________ _______
___/ \______________/
MINTAVÉTEL | | | | | | | | | | | | | | |
Szerk: lásd gyapo11 válaszát is
[ Szerkesztve ]
gyapo11
őstag
Szinte egyszerre írtuk.
Aztán rájöttem, hogy nem is annyira érthető, az enyém mert hosszú, a tiéd mert rövid.
Vagyis folyamatábra lenne a leginkább követhető.
menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
tvamos
nagyúr
Ezt utálom az Arduinoban, nincs ide, meg debug. Ha lenne, akkor lerakna pár breakpointot, és megérthetné magától. Igy csak gányolni tanulnak meg az emberkek, nem programozni. Tisztelet a kivételnek. Mondju... Ő legalább megkérdezte, hogy működik...
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
tvamos
nagyúr
Sokat tanulhatsz belőle, ha a File meu, Example-jeit átnézed.
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
Imy
veterán
Erről mi a véleményetek? Magam találtam ki, és működik. Valami hiba esetleg? Jobban szeretem én kitalálni, s szívni vele. persze segítség sosem árt.
De ez nagyon az eleje a végleges programnak.
#include "LiquidCrystal.h"
// A LiquidCrystal eljarast hasznaljuk
LiquidCrystal lcd(5, 4, 0, 1, 2, 3);
// Az LCD bekotese labak szerint:
// RS(D5), E(D4), D4(D0) ,D5(D1), D6(D2), D7(D3)
//PIN0 LCD D4
//PIN1 LCD D5
//PIN2 LCD D6
//PIN3 LCD D7
//PIN4 LCD E
//PIN5 LCD RS
int NYOMOGOMB = 6; //PIN6
//PIN7
//PIN8
//PIN9
//PIN10
//PIN11
//PIN12
int LED = 13;
void setup() {
lcd.begin(16, 2); //Az LCD 2 sor, 16 oszlopos
lcd.print("Nyomogomb:"); //
lcd.setCursor(10, 0); //
lcd.print("KI"); // alapértelmezettként ki van kapcsolva
pinMode(NYOMOGOMB, INPUT); //PIN6 nyomogomb bemenet
pinMode(LED, OUTPUT); //PIN13 LED meghajtás
//int KiAll_13; //13. kimenet állapotát figyeljük
//KiAll_13 = 0; // alapértelmezés beállítása
digitalWrite((LED), LOW); //LED kikapcsolva alapértelmezettként
}
void loop()
{
// Ha LED ki van kapcsolva, akkor be lehet kapcsolni
if (digitalRead(LED) == LOW)
{
if (digitalRead(NYOMOGOMB) == LOW)
delay(20); // prell elkerülése
{
if (digitalRead(NYOMOGOMB) == LOW)
{
digitalWrite((LED), HIGH);
lcd.setCursor(10, 0); //
lcd.print("BE"); // Bekapcsolás kiírás
delay(1000);
}
}
}
// Ha LED be van kapcsolva, akkor ki lehet kapcsolni
if (digitalRead(LED) == HIGH)
{
if (digitalRead(NYOMOGOMB) == LOW)
delay(20); // prell elkerülése
{
if (digitalRead(NYOMOGOMB) == LOW)
{
digitalWrite((LED), LOW);
lcd.setCursor(10, 0); //
lcd.print("KI"); // Bekapcsolás kiírás
delay(1000);
}
}
}
}
Imy
veterán
4 soros LCD-t tudtok ajánlani e-bayről ami jól működik? 2 sorosom van, de kevés lesz, sok információt szeretnék kiírni rá.
Pubszon
veterán
Ez jó áron van és korrekt eladótól.
[link]
I2C-s, tehát csak 2 kimenetet igényel ráadásul.
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
Imy
veterán
Az ISP-snél a kiírásra esetleg egy példát tudsz? És amúgy amit az eladó az oldalán ír, az a kód jó?
Saua
tag
Szia,
Én is nagyon kezdő vagyok...de ez a kód valószínüleg nem működik rendesen, rengeteg késleltetés van benne....és ameddig egy-egy delay tart hiába nyomkodod a gombot nem történik semmi. Nem árt kész kódokat is tanulmányozni. Sokmindent már megoldottak, nehezen lehet tökéletesíteni.
[ Szerkesztve ]
Imy
veterán
Most nézem, itt 2x16-os LCD-re van írva.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("b2cqshop");
lcd.setCursor(0, 1);
lcd.print("Voltage: ");
lcd.setCursor(13, 1);
lcd.print("V");
}
void loop()
{
int val;
float temp;
val=analogRead(0);
temp=val/4.092;
val=(int)temp;//
lcd.setCursor(9, 1);
lcd.print(0x30+val/100,BYTE);
lcd.print(0x30+(val%100)/10,BYTE);
lcd.print('.');
lcd.print(0x30+val%10,BYTE);
delay(100);
}
Ha ezt a sort átírom, akkor elvileg tudja a 4x20-at?
LiquidCrystal_I2C lcd(0x27,20,4);
Kiírás hogyan megy ISP-nél, ugyanúgy mint a hagyományosnál? Pl...
lcd.begin(20, 4); //Az LCD 4 sor, 20 oszlopos
lcd.setCursor(3, 1); //
lcd.print("tESZT:"); //
Imy
veterán
Az azért van, hogy ne lehessen túl gyakran ki, vagy bekapcsolni, vagy a véletlen megnyomás ellen.
Ez majd egy ki-bekapcsoló gombot fog működtetni, és nem kell azt tizedmásodpercenként ki-be kapcsolni.
Pubszon
veterán
Az ISP-s kiiratásos dolgot nem értem.
A kódot elnézve jó.
Szinte ugyan azok a parancsok, csak I2C-s könyvtár kell hozzá, de nekem is megvan.
A fenti kódodban pl az azonos sorokat összevonhatod.
Javitottam a loop részedet
void loop()
{
// Ha LED ki van kapcsolva, akkor be lehet kapcsolni
if (digitalRead(LED) == LOW)
{
delay(20); // prell elkerülése
digitalWrite((LED), HIGH);
lcd.setCursor(10, 0); //
lcd.print("BE"); // Bekapcsolás kiírás
delay(1000);
}
// Ha LED be van kapcsolva, akkor ki lehet kapcsolni
if (digitalRead(LED) == HIGH)
{
delay(20); // prell elkerülése
digitalWrite((LED), LOW);
lcd.setCursor(10, 0); //
lcd.print("KI"); // Bekapcsolás kiírás
delay(1000);
}
}
De ezzal továbbá ahogy már írták, a sok delay megfogja az egészet.
De ha használsz még egy bitet (boolean) akkor azzal kiküszöbölheted ezt és a kijelző se fog másodpercenként frissülni, hanem csak akkor amikor annak kell.
Így:
Az első sor a setup rész elé kell.
boolean ledstate = true;
.
.
.
.
void loop()
{
// Ha LED ki van kapcsolva, akkor be lehet kapcsolni
if ((digitalRead(LED) == LOW) && (ledstate))
{
ledstate = false;
delay(20); // prell elkerülése
digitalWrite((LED), HIGH);
lcd.setCursor(10, 0); //
lcd.print("BE"); // Bekapcsolás kiírás
}
// Ha LED be van kapcsolva, akkor ki lehet kapcsolni
if ((digitalRead(LED) == HIGH) && (!ledstate))
{
ledstate = true;
delay(20); // prell elkerülése
digitalWrite((LED), LOW);
lcd.setCursor(10, 0); //
lcd.print("KI"); // Bekapcsolás kiírás
}
}
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
zka67
őstag
Szia, bocs, hogy beleszólok, de a programod folyamatosan kapcsolgatja a ledet ki-be.
Imy
veterán
Köszönöm a nyomógombos tippet, ki fogom próbálni.
ISP-s könyvtárast meg tudnád osztani? Köszi!
Az csak annyi, hogy bemásolom a C:\Program Files (x86)\Arduino\libraries-ba?
[ Szerkesztve ]
maestro87
őstag
Nem csak I2C modul jár hozzá? A leírásból és képről én azt veszem le, hogy rá is van forrasztva ez a modul.
A sima 20x4-est én legutóbb, legolcsóbban aliexpressről rendeltem valami 1500Ft-ért.
Mellesleg nem tud valaki olyan I2C modult amibe nincs beforrasztva a tüskesor? A múltkorival én eléggé megszenvedtem míg ki tudtam cserélni hüvelysorra.
Pubszon
veterán
Az idő lejárt, de módosítottam a kódodat.
#include "LiquidCrystal.h"
// A LiquidCrystal eljarast hasznaljuk
LiquidCrystal lcd(5, 4, 0, 1, 2, 3);
// Az LCD bekotese labak szerint:
// RS(D5), E(D4), D4(D0) ,D5(D1), D6(D2), D7(D3)
//PIN0 LCD D4
//PIN1 LCD D5
//PIN2 LCD D6
//PIN3 LCD D7
//PIN4 LCD E
//PIN5 LCD RS
int NYOMOGOMB = 6; //PIN6
//PIN7
//PIN8
//PIN9
//PIN10
//PIN11
//PIN12
int LED = 13;
boolean ledstate = true;
void setup() {
lcd.begin(16, 2); //Az LCD 2 sor, 16 oszlopos
lcd.print("Nyomogomb:"); //
lcd.setCursor(10, 0); //
lcd.print("KI"); // alapértelmezettként ki van kapcsolva
pinMode(NYOMOGOMB, INPUT); //PIN6 nyomogomb bemenet
pinMode(LED, OUTPUT); //PIN13 LED meghajtás
//int KiAll_13; //13. kimenet állapotát figyeljük
//KiAll_13 = 0; // alapértelmezés beállítása
digitalWrite((LED), LOW); //LED kikapcsolva alapértelmezettként
}
void loop()
{
// Ha LED ki van kapcsolva, akkor be lehet kapcsolni
if ((digitalRead(LED) == LOW) && (digitalRead(NYOMOGOMB) == LOW) && (ledstate))
{
ledstate = false;
delay(20); // prell elkerülése
digitalWrite((LED), HIGH);
lcd.setCursor(10, 0); //
lcd.print("BE"); // Bekapcsolás kiírás
}
// Ha LED be van kapcsolva, akkor ki lehet kapcsolni
if ((digitalRead(LED) == HIGH) && (digitalRead(NYOMOGOMB) == LOW) && (ledstate))
{
ledstate = false;
delay(20); // prell elkerülése
digitalWrite((LED), LOW);
lcd.setCursor(10, 0); //
lcd.print("KI"); // Bekapcsolás kiírás
}
if ((digitalRead(NYOMOGOMB) == HIGH) && (!ledstate))
{
ledstate = true;
}
}
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
Pubszon
veterán
Rá is van forrasztva az I2C modul, azért is ennyi.
Nélküle olcsóbb.
[ Szerkesztve ]
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
Nagytoll
senior tag
Hello! Van egy TM1638-as chipre épülő led mátrixom, most gyakorlom a használatát. Hogy lehetne azt megoldani, hogy megy egy pont a mátrixon és közben gombokkal egy másik pontot tudok irányítani? A lényeg, hogy azonos időben ugyanolyan gyorsan bevegye az inputot, és az önjáró golyó is menjen normálisan. Az alapprogram megvan, csak a delay belassítja, utánaolvastam neten a millis() nevű dolognak, de nem nagyon értem/nem tudom, hogy rakhatnám bele a kódomba, ezen kívül van valami lehetőség ilyen "párhuzamos futtatás" szerűségre?
Pubszon
veterán
Néz meg a BlinkWithoutDelay példát, abból megtudhatod.
Ha nem megy, akkor holnap tudok segíteni, esetleg rakd be ide a kódodat.
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
Nagytoll
senior tag
Ma tiszta fejjel elsőre sikerült feldolgoznom és megértenem a blinkwithoutdelay-t , így már úgy működik, ahogy szeretném. Köszi!
Nagytoll
senior tag
Hello! Megint van egy gondom/kérdésem. van ez a kód :
if ((gx==px) && (gy==py)) {
while(1) {
LED_Matrix.displayPic(picDat0);
if((digitalRead(10)==HIGH) || (digitalRead(11)==HIGH) || (digitalRead(12)==HIGH) || (digitalRead(13)==HIGH)) {
x = TrueRandom.random(0,8); //x,y -> P1
y = TrueRandom.random(0,8);
gx = TrueRandom.random(0,8); //gx, gy ->P3
gy = TrueRandom.random(0,8);
px = TrueRandom.random(0,8); //px, py ->P2
py = TrueRandom.random(0,8);
delay(1000);
LED_Matrix.clear();
break;
};
};
};
A lényeg az, hogy megy a mátrixon egy pötty(P1) balról jobbra az egyik sorban, van egy másik pötty(P2) random valahol és van egy harmadik pötty(P3) amit lehet irányítani, ha P1 nekimegy P3-nak akkor rendesen működik ez a kód, mármint egy ugyan ilyen, csak az if feltételében az van, hogy ((gx==x) && (gy==y)). Ha viszont P3 megy neki P1-nek (és ugyanígy P2-nek is, ez igazából a cél, P2 "megszerzése") akkor a program vár a delay szerint 1mp-et és magától újraindul/loop elejére megy. Amit normál esetben csinál(ha P1 megy neki P3-nak) az az, hogy csak akkor megy a loop elejére, ha megnyomom a gombot, aztán vár és break. Szerintetek ez miért van?
[ Szerkesztve ]
Nagytoll
senior tag
Tárgytalan, rájöttem, csak kell neki egy delay, mert nélküle rögtön beolvasná a gombokat.
gyapo11
őstag
A timer libraryvel elég könnyen lehet delay nélküli időzítéseket csinálni.
menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
Mai Hardverapró hirdetések
prémium kategóriában
- LG NanoCell 55NANO766QA Halvány píxel csík
- Philips 58PUS8545/12 1 ÉV GARANCIA Játék üzemmód
- Tyű-ha! HP EliteBook 850 G7 Fémházas Szuper Strapabíró Laptop 15,6" -65% i7-10610U 32/512 FHD HUN
- Bomba ár! HP EliteBook 840 G5 - i5-8G I 8GB I 128GB SSD I 14" FHD I HDMI I Cam I W10 I Gari!
- The Last of Us Part I Ps5