Fórum témák
- • Klíma szervizelés, javítás
- • Napelem alkalmazása a lakás energia ellátásában
- • LCD TV probléma
- • Rendelés külföldről (eBay - Paypal)
- • Kávéfőzőgép hiba
- • SONY TA-F 590ES MOSFET végfok átalakítása
- • Vakondriasztó
- • Arduino relé modul, elnémul az out_pin
- • Hangsugárzó építés, javítás - miértek, hogyanok
- • Gitárerősítő
- • Indukciós főzőlap javítása
- • Gitár torzító / Effekt / Erősítő / Pickup
- • Tápegység
- • Oszcilloszkóp vétel, mit gondoltok?
- • Erősítő építése elejétől a végéig
- • Elfogadnám, ha ingyen elvihető
- • Be-/kikapcsoló nyomógombbal
- • Hűtőgép probléma
- • Bojler javítása, kérdések
- • Transzformátor készítés, méretezés
- • XBOX kiegészítők, javítások átalakítások
- • Felajánlás, azaz ingyen elvihető
- • Kazettás magnó (deck) javítása
- • Villanyszerelés
- • Leválasztó transzformátor
- • Audiofil, High End Audio
- • Kombinált gáztűzhely
- • Li-Po - Li-ion akkumulátor és töltője
- • Kompresszor hiba
- • Keverőpult építése, javítása
- • Oszcilloszkóp, avagy hogyan kell használni?
- • Elektroncső
- • Autós indító és indításrásegítő
- • Hawksford Error Correction
- • LCD monitor probléma
- • Multiméter - miért, milyet?
- • Szárítógép problémák
- • Plazma TV
- • Arduino
- • Elektronyika orosz digitális órák
- • Kapcsolóüzemű tápegység
- • Codefon kaputelefon
- • Quad 405-ös erősítő tapasztalatok és hibák
- • Számítógép hiba, de mi a probléma?
- • Inverteres hegesztőtrafó
- • Érdekességek
- • Adatlapot keresek
- • Opel Astra elektromos hibák
- • Kapunyitás gombnyomásra olcsón! - avagy automata kapu házilag
- • Erősítő mindig és mindig
- • Áram mérése
- • Hegesztő inverter javítás
- • Crystal radio - detektoros rádió
- • Autós erősítős kérdések, problémák
- • Milyen mikroszkópot vásároljak?
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Villogás késleltetése változtatható!
// Blink LED
// ...
boolean blinkl = 0
unsigned long blinktime = 6000; // Villogás késleltetése változtatható!
unsigned long time = millis() + blinktime;
digitalWrite(rele, HIGH);
void loop() {
// ...
if (millis() > time) {
switch (blinkl)
{
case 0:
{
digitalWrite(rele, LOW);
time=millis() + blinktime;
blinkl = 1;
break;
}
case 1:
{
digitalWrite(rele, HIGH);
time=millis() + blinktime;
blinkl = 0;
break;
}
}
}
// ...
}
Szóval ha megvan az alap ötlet, lehet javítgatni! A hozzászólás módosítva: Jún 4, 2015
Szia
Nézegetem a kapcsolásodat, a testet (-) nem véletlenül az AREF pin-ről veszed?
Húúú, de alaposan megnézted. Tényleg úgy tűnik!
Az LCD háttérvilágító LED-jének nem kell védőellenállást sorba kötni?
az is kellene, de itt most nem az a gond.
itt egy leírás a bekötésről (ott az ellenállás is amit említettél). A hozzászólás módosítva: Jún 4, 2015
(#) |
saua hozzászólása |
Jún 4, 2015 |
|
/ |
|
|
Sziasztok,
Teszteltem az alábbi kódot, jól működik, a teljes leírás itt található.
/*--------------------------------------------------------------
Program: web_server_hw_button_pg_button
Description: Arduino web server that allows two LEDs to be
controlled by a checkbox, HTML button and two
hardware push buttons.
The web page is stored on the micro SD card.
Hardware: Arduino Uno and official Arduino Ethernet
shield. Should work with other Arduinos and
compatible Ethernet shields.
2Gb micro SD card formatted FAT16.
LEDs on pins 6 and 7.
Switches on pins 2 and 3.
Software: Developed using Arduino 1.6.1 software
Should be compatible with Arduino 1.0 +
SD card contains web page called index.htm
References: - Based on Ajax I/O example from Starting
Electronics:
- Switch debouncing from Arduino IDE example code
File --> Examples --> 02.Digital --> Debounce
Date: 13 April 2015
--------------------------------------------------------------*/
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ 60
// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 20); // IP address, may need to change depending on network
EthernetServer server(80); // create a server at port 80
File webFile; // the web page file on the SD card
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0; // index into HTTP_req buffer
boolean LED_state[2] = {0}; // stores the states of the LEDs
void setup()
{
// disable Ethernet chip
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
Serial.begin(9600); // for debugging
// initialize SD card
Serial.println("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("ERROR - SD card initialization failed!");
return; // init failed
}
Serial.println("SUCCESS - SD card initialized.");
// check for index.htm file
if (!SD.exists("index.htm")) {
Serial.println("ERROR - Can't find index.htm file!");
return; // can't find index file
}
Serial.println("SUCCESS - Found index.htm file.");
// switches
pinMode(2, INPUT);
pinMode(3, INPUT);
// LEDs
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients
}
void loop()
{
EthernetClient client = server.available(); // try to get client
if (client) { // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // client data available to read
char c = client.read(); // read 1 byte (character) from client
// limit the size of the stored received HTTP request
// buffer first part of HTTP request in HTTP_req array (string)
// leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
if (req_index < (REQ_BUF_SZ - 1)) {
HTTP_req[req_index] = c; // save HTTP request character
req_index++;
}
// last line of client request is blank and ends with \n
// respond to client only after last line received
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
// remainder of header follows below, depending on if
// web page or XML page is requested
// Ajax request - send XML file
if (StrContains(HTTP_req, "ajax_inputs")) {
// send rest of HTTP header
client.println("Content-Type: text/xml");
client.println("Connection: keep-alive");
client.println();
SetLEDs();
// send XML file containing input states
XML_response(client);
}
else { // web page request
// send rest of HTTP header
client.println("Content-Type: text/html");
client.println("Connection: keep-alive");
client.println();
// send web page
webFile = SD.open("index.htm"); // open web page file
if (webFile) {
while(webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
}
// display received HTTP request on serial port
Serial.print(HTTP_req);
// reset buffer index and all buffer elements to 0
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') {
// last character on line of received text
// starting new line with next character read
currentLineIsBlank = true;
}
else if (c != '\r') {
// a text character was received from client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection
} // end if (client)
// read buttons and debounce
ButtonDebounce();
}
// function reads the push button switch states, debounces and latches the LED states
// toggles the LED states on each push - release cycle
// hard coded to debounce two switches on pins 2 and 3; and two LEDs on pins 6 and 7
// function adapted from Arduino IDE built-in example:
// File --> Examples --> 02.Digital --> Debounce
void ButtonDebounce(void)
{
static byte buttonState[2] = {LOW, LOW}; // the current reading from the input pin
static byte lastButtonState[2] = {LOW, LOW}; // the previous reading from the input pin
// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
static long lastDebounceTime[2] = {0}; // the last time the output pin was toggled
long debounceDelay = 50; // the debounce time; increase if the output flickers
byte reading[2];
reading[0] = digitalRead(2);
reading[1] = digitalRead(3);
for (int i = 0; i < 2; i++) {
if (reading[i] != lastButtonState[i]) {
// reset the debouncing timer
lastDebounceTime[i] = millis();
}
if ((millis() - lastDebounceTime[i]) > debounceDelay) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:
// if the button state has changed:
if (reading[i] != buttonState[i]) {
buttonState[i] = reading[i];
// only toggle the LED if the new button state is HIGH
if (buttonState[i] == HIGH) {
LED_state[i] = !LED_state[i];
}
}
}
} // end for() loop
// set the LEDs
digitalWrite(6, LED_state[0]);
digitalWrite(7, LED_state[1]);
// save the reading. Next time through the loop,
// it'll be the lastButtonState:
lastButtonState[0] = reading[0];
lastButtonState[1] = reading[1];
}
// checks if received HTTP request is switching on/off LEDs
// also saves the state of the LEDs
void SetLEDs(void)
{
// LED 1 (pin 6)
if (StrContains(HTTP_req, "LED1=1")) {
LED_state[0] = 1; // save LED state
digitalWrite(6, HIGH);
}
else if (StrContains(HTTP_req, "LED1=0")) {
LED_state[0] = 0; // save LED state
digitalWrite(6, LOW);
}
// LED 2 (pin 7)
if (StrContains (HTTP_req, "LED2=1")) {
LED_state[1] = 1; // save LED state
digitalWrite(7, HIGH);
}
else if (StrContains (HTTP_req, "LED2=0")) {
LED_state[1] = 0; // save LED state
digitalWrite(7, LOW);
}
}
// send the XML file with analog values, switch status
// and LED status
void XML_response(EthernetClient cl)
{
int analog_val; // stores value read from analog inputs
int count; // used by 'for' loops
int sw_arr[] = {2, 3}; // pins interfaced to switches
cl.print("<?xml version = \"1.0\" ?>");
cl.print("<inputs>");
// checkbox LED states
// LED1
cl.print("<LED>");
if (LED_state[0]) {
cl.print("checked");
}
else {
cl.print("unchecked");
}
cl.println("</LED>");
// button LED states
cl.print("<LED>");
if (LED_state[1]) {
cl.print("on");
}
else {
cl.print("off");
}
cl.println("</LED>");
cl.print("</inputs>");
}
// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
for (int i = 0; i < length; i++) {
str[i] = 0;
}
}
// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
char StrContains(char *str, char *sfind)
{
char found = 0;
char index = 0;
char len;
len = strlen(str);
if (strlen(sfind) > len) {
return 0;
}
while (index < len) {
if (str[index] == sfind[found]) {
found++;
if (strlen(sfind) == found) {
return 1;
}
}
else {
found = 0;
}
index++;
}
return 0;
}
Azt szeretném kérdezni hogy lehetne a két gomb mellett megjeleníteni egy DS18B20 által mért hőmérsékletet is, tehát például a hozzászólásban leírt kóddal kombinálni, a lényeg, hogy ne frissüljön az egész oldal, hanem csak az értékek.
Szia. Köszi. Eléggé amatőr vagyok az eddigi kódot is példákból raktam össze. Ezt hogy tudom be illeszteni az időzítésem helyett akár hogy próbálom mindig valami hibát ír fordításkor.
Rég nem próbáltam, de talán tudsz belőle valamit használni:
A megjelenítéshez a javascript GetArduinoIO() részbe kellene egy ilyen:
document.getElementById("hofok").innerHTML=this.responseXML.getElementsByTagName('LED')[2].childNodes[0].nodeValue;
A body részbe egy ilyen:
<P id="hofok">Ide jön a hőfok</P>
A szerver XML részébe a:
cl.println("</LED>");
cl.print("</inputs>");
sorok közé pedig egy ilyen:
cl.print("<LED>");
cl.print("12,3 C");
cl.println("</LED>");
A szöveg helyett persze a változó értékét adod meg.
Köszi a választ, sajnos ilyen szinten nem értek hozzá. Egyenlőre el sem tudom képzelni, hogy a float temp = sensors.getTempCByIndex(0); hogyan kapcsolódik például a cl.print("<LED>"); hez.
Még keresgélek a neten, hátha találok egy AJAX-os példaprogramot DS18B20 -al.
Kipróbáltad? Persze hogy nem.
A LED-hez nem kapcsolódik sehogy.
Ha jobban tetszik írd így:
... ('HOFOK')[0].childNodes[0].nodeValue; -t
cl.print("<HOFOK>");
cl.print(temp);
cl.println("</HOFOK>")
Kérted:"mivel lehetne helyettesíteni ezt az időzítést?"
A kódod 78.-87. sorai helyébe beszúrod a fenti program részt.
Én nem fordítottam le!
Ha nem boldogulsz? Ide másolod az új kódodat.
És majd megnézzük!
Gyakorlás teszi a mestert!
Próbáld a hibákat javítani! A hozzászólás módosítva: Jún 5, 2015
A védőellenállás rajta van az LCD-panelján. 100 Ohm szokott lenni, de én kicserélem mindig 470-680 Ohmra.
Nem tudtam, hogy gyárilag van ott ellenállás (én is mindig kötök be külön, a betáp felől).
Köszi a segítséget. Sikerült össze hoznom.
Nos kipróbáltam külső ellenállással is, minden jó helyre van kötve csak a képen furán látszott, szóval a helyzet változatlan volt. Tegnap szereztem egy nem világítós, zöld LCD-t. Azzal meg se nyikkan semmi, lehet, a nem világítósokra nem is kellene potit kötnöm. Mindegy, most majd bekötöm az összes lábát és ha ki tudok íratni vele valamit, akkor nyertem, ha nem....akkor tovább töröm a fejem.
Igazándiból a háttérvilágító LED védőellenállásának nincs köze a fényképen látható problémához (nyilván ezzel nem mondok újdonságot). A kontraszt beállítása (azaz egy potméter alkalmazása) szerintem háttérvilágítás nélkül is szükséges, bár én ilyen LCD-vel még nem dolgoztam.
Olyasmi furcsaságot, amit lefotóztál, nálam kontaktusprobléma okozott: negyed/fél kijelző működött csak normálisan, de a kábelek ill. az LCD panel megigazításával megoldódott.
Köszönöm a tippet, most már én is ezen a véleményen vagyok. Ugyanis a kék kijelzőt már eleve ráforrasztott tüskesorral vettem a boltban. Viszont a zöldre magam forrasztottam rá a sort.
A háttérvilágítás nélkülire is jó a poti. Először le is teszteltem, ezúttal nemhogy teljes sorok változtak egyszerre, de még a második sor is változott szépen rendben. Aztán rendesen rákötöttem a többi kivezetést is az Arduino-ra és tessék, szépen megy rajta a Hello World.
Annyi volt még a trükkje a kijelzőmnek, hogy a lábkiosztás máshogy van, balról jobbra: 14,13,12,.....1,16,15. Ez utóbbi két láb nálam irreleváns.
A lényeg, hogy működik végre. Ezután ki fogom forrasztani a kék LCD-ről a tüskesort és én magam fogom újra beforrasztani.
Sziasztok!
Egy olyan kérdésem lenne, hogy az analóg pineket digitális bemenetként is lehet definiálni? Azt tudom, hogy kimenetként használható.
Ha igen, akkor mekkora fesz. szint felett tekinti magasnak a bemenetet?
Külső felhúzó ellenállást használok, mert nyomógombok lennének a kérdéses lábakon.
Ha az A3 analóg pint digitálisként akarom használni, akkor 17-es pintként kell hivatkoznom rá?
Azt olvastam, hogy amennyiben az analóg lábat digitális lábként használom, akkor a számozásuk folytatódik pl.: A0 a 14, A1 a 15, stb., jól olvastam?
A segítségetek előre is köszönöm.
Sanyi
Szia! Használhatóak bemenetként is, de én szerintem felesleges a külső ellenállás csak plussz macera, ha INPUT_PULLUP-nak definiálod, akkor alapból van felhúzó ellenállás. A számozásokat meg csak simán A0, A1... Ha gnd-os a vezérlésed, akkor nincs szint vagy rá van kapcsolva vagy nincs.
Köszi.
A szintet csak azért kérdeztem, mert 3 analóg bemenetnél kipróbáltam a digitalRead utasítást. Írtam egy külön progit ennek a kikísérletezéséhez. Mindhárom bemenetet megnéztem mind analóg mind, digitálisan beolvasva is, majd az eredményt serialprintel kiírattam a soros monitorra. Az analóg beolvasás mindháromnál nem nyomva 1023, nyomva 0, mégis digitális olvasásnál csak az egyik váltott 1-ről nullára. Ellenállást máshoz is használok és ellenállássort vettem, így szerencsére nem foglal sok helyet. Működik egyáltalán a digitalread az analóg lábaknál, vagy a 0-1023 közötti eredménnyel kell számolni? Digitális kimenetként használhatók? Hogy, milyen utasítással tudok róla ledet működtetni?
Elvileg mennie kéne a digitalRead-nek is, ledet meg csak simán output-nak definiálod, és digitalWrite.
Sziasztok
Oromomre elsore sikerult ket DS18B20 -at leolvasni, de akadt egy kis gond. A ketto (gondolom ez a tobbivel is elofordul) 0.5 Cfok elteressel mer, ezt hogy lehetne kompenzalni ?
Szia,
Véletlenül nem DS1820 -hoz készült kódot használsz? Mert annak +/-0,5 fok az eltérése.
DS18B20 -nál már +/- 0,2 ºC kellene legyen az eltérés. olyan kódot kellene keress amiben nem 9 bittes a kódkiolvasás, hanem 12 bittes, ezzel a legpontosabb a mérés.
itt foglalkoznak a témával A hozzászólás módosítva: Jún 8, 2015
Idézet: „(Zavarvédelemere gondolj ill használd az Arduino/iWire library CRC-jét!)”
Nem igazan ertem hogy ez mi is akar lenni, de
Ha megnevezem kulon kulon az erzekeloket valahogy igy
DeviceAddress Probe01 = { 0x28, 0xFF, 0x09, 0x29, 0x3C, 0x04, 0x00, 0x06 };
DeviceAddress Probe02 = { 0x28, 0xFF, 0x75, 0x26, 0x3C, 0x04, 0x00, 0xD0 };
az nem teszi meg az azonositast, illetve nem kuszoboli ki a hibakat ?
A masik, mit akar jelenteni az a tavtaplalt mod ?
(1) kulon tapegysegrol taplalomn, nem az Arduino 5V-jarol, vagy (2) ???
Nincsenek nalam az erzekelok, de ugy emlekszem DS18B20 -asok. 12 bites beolvasassal probaltam - „sensors.setResolution(Probe01, 12);” - igy.
A ket erzekelot fizikailag osszekotottem, illetve a labai ossze vannak forrasztva, igy a tenyleges homerseklet elteres szerintem kizart.
Megis egy majdnem fel oran at kovetve pontosan 0,5 Cfok elteres volt a ketto kozott.
Vagy csak pekhes vagyok es kifogtam egy hetfoi napon gyartottat ?
Úgy néz ki, hogy mindent jól csináltál, de azért nem ártana egy másik kódot is kipróbálni. Például az itt levőt, a szenzorok normál módba vannak kötve, öt vonalon mér, lehet állítani a mérési pontosságot, a példában 10 bites pontosság van beállítva.
Pont innen inspiraltam, a masodik koddal.
Ha itt tartunk, mit jelentsen Idézet: „if (tempC == -127.00)” ez ?
Amikor nem kap jelet ?, nem olvas ? A hozzászólás módosítva: Jún 8, 2015
szerintem itt egy változót (tempC) hasonlít össze egy konstanssal (-127.00), ha egyenlő akkor történik valami...
Azt irja hogy akkor „"Error getting temperature "” es ha nem - „else”, akkor megy tovabb.
Szoval az a -127.00 az a hibas beolvasast, vagy estleg a beolvasas hianyat jelentene ? A hozzászólás módosítva: Jún 8, 2015
az biztos, hogy -50 … +125 ºC tartományban mér, szerintem hibás beolvasást jelent....de, hogy miért van ott a mínusz jel ?
(#) |
fkx hozzászólása |
Jún 8, 2015 |
|
/ |
|
|
SD kártyát szeretnék kezelni arduino-val. Arduino MEGA2560-at és egy Ethernet+SD panelt használok.
Lényegében működik is a dolog, de akadt egy probléma: Ha ujratöltöm a programot az arduino-ba, vagy csak simán nyomok egy reset-et, akkor utána nem lehet elérni az SD kártyát. Ha kiveszem az SD-t és visszateszem, vagy ha a tápot megszakítom egy pillanatra, akkor ujra rendben működik.
Nem lehet valahogyan szoftverből resetelni az SD kártyát? Az lenne a lényeg, hogy ne kelljen a tápot elvenni, vagy kivenni a kártyát a foglalatból! Találkozott már más is ilyen problémával?
|
|