Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   145 / 863
(#) V1rusH válasza Kovidivi hozzászólására (») Aug 19, 2015 /
 
Nézegettem a forráskódot, de nyilván nem is pwm-ről megy, csak szimpla led villogtatásról.
Az alap forráskód ez,
  1. byte pwm=3;
  2.  
  3.  void setup() {                
  4.    pinMode(13, OUTPUT);
  5.       // LED
  6.    analogWrite(10, pwm);
  7.      //D10 analog kimenet
  8.      //3, 5, 6, 9, 10, 11 lehet
  9.  }
  10.  
  11.  void loop() {
  12.      digitalWrite(13, HIGH);
  13.      // LED on
  14.      delay(250);            
  15.      digitalWrite(13, LOW);
  16.       // LED off
  17.      delay(250);
  18.       // varakozas

de az analogWrite sor nincs benne, a kapcsolási períódus meg 11.
Nem értem, hogyha 13 a kimenet, az analogWrite (10, pwm) mit defínál?
A hozzászólás módosítva: Aug 19, 2015
(#) Balázs válasza V1rusH hozzászólására (») Aug 19, 2015 /
 
Most nem értem... a 13-as, vagy a 10-es lábon van a V0 bemenet? A 13-as lábat fél másodpercenként felvillantod (ez kontrasztnak biztosan nem jó), a 10-esre pedig egy 1.18% kitöltési tényezőjű PWM jelet írsz. A 11 "kapcsolási periódus" az micsoda?
(#) kapu48 válasza V1rusH hozzászólására (») Aug 19, 2015 /
 
Én nem értem az egész kontraszt/PWM okoskodást!

Az LCD „VEE” kimenetén –V(MÍNUSZ V!) feszültség van!
Ezt kel a potméter jobb végére kötni, a másik végére a +VDD kötendő.
A csuszka kerül az LCD V0 Contrast bemenetére!
Igy lehet a megfelelő –feszültséget beállítani az LCD Contrastnak!
Nem paszíóból építették az LCD panelekre a –feszültséget előállító egységet!
PWM-el pedig nem lehetséges –V előállítani!

Szerintem ezzel csak az LCD kristályszerkezetének lassú elöregedését gyorsítjátok fel!
Kísérlet az LCD gyors tönkretételére?
A hozzászólás módosítva: Aug 19, 2015
(#) Balázs válasza kapu48 hozzászólására (») Aug 19, 2015 /
 
Sok LCD-nek 5V-os üzemben nem kell külön negatív feszültség, elég ha a VSS-hez képest a VEE enyhén pozitív. Ezt elő lehet állítani PWM-mel.
(#) V1rusH válasza Balázs hozzászólására (») Aug 19, 2015 /
 
13 lébon van a V0, a 11 az a digitalWrite High/Low peridus, delay nincs, mert azzal csak jobban vibrálna.
Majd 4 óra körül otthon leszek, és berakom az én forráskódomat.

kapu48: a kontrasztom így tökéletes, csak vibrál. Nyiván ez nem használ az lcd-nek, de ha szűröm, netán egyenirányítom egy gyors diódával, akkor ez a vibrálás megszűnik.
De otthon megnézem majd Balázs linkjeit.
A hozzászólás módosítva: Aug 19, 2015
(#) kapu48 válasza V1rusH hozzászólására (») Aug 19, 2015 /
 
Mit értesz azon, hogy tökéletes, csak vibrál?
A tökéletes az nem vibrál!

Pont ez a vibrálás jelzi, hogy nem tökéletes!

Pontosan a kristályszerkezet gyors átrendeződését jelenti.
Ami idővel tönkreteszi a kristály folyadék molekuláit, és halványodni fog a kontraszt!
(#) V1rusH válasza kapu48 hozzászólására (») Aug 19, 2015 /
 
Tökéletes annyit tesz, hogy tökéletes. Pont jó! Nem halvány, nem látszik a nem vezérelt pontok, csak vibrál kicsit, amit leginkább oldalról nézve lehet észrevenni.
Nem szándékozom így hagyni! Mert ritkán pont 90°-os a betekintési szög, és zavaró.
Hogy hamarabb tönkre meg? Időben mennyivel és mennyi ideig használható így. Azt hiszem, belföldi árfolyamban is néhány száz forintos tételek a 2x16-os kijelző. Engem az idő előtti tönkremenetele jelennesetben nem befolyásol. De mint írtam, nem így kívánom használni, csak próbálgatom a technika adta lehetőségeket!
Egyébként abszolut romantikus oka van ennek a megoldásnak! Nem túl tökéletes a próbapanelem kontaktusa, és folyton álligatni kell. Így kipróbáltam egy lehetőséget, ami 90%-ig jó is!
A hozzászólás módosítva: Aug 19, 2015
(#) kapu48 válasza V1rusH hozzászólására (») Aug 19, 2015 / 1
 
De ha már itt reklámozod a butaságot!
Legalább tegyük, hozzá mik lehetnek a következményei.

Nehogy más jóhiszeműen utánozzon.
És porul járjon, amik után minket átkozzon!

Egyébként javaslom inkább dobd el azt a próbapanelt!
A hozzászólás módosítva: Aug 19, 2015
(#) V1rusH válasza kapu48 hozzászólására (») Aug 19, 2015 /
 
Dehogy reklámozok én bármi butaságot!
Én kipróbáltam valamit, amit előző hsz-ben jeleztem is, nem végső megoldásként alkalmazom!!
Hogy ki mit utánoz, nem rajtammúlik, és mindamellett, nem is buzdítok rá senkit...

A próbapanelt mejd eldobom, ha lesz másik, bár itt jegyzem meg, nem a panellel van baj, a vezetékek érvéghüvejei túl vékonyak, kimozdúlnak, meg a heli trimer vékony kivezetései... Lényegtelen...
(#) V1rusH hozzászólása Aug 19, 2015 /
 
Megnyugtatok mindenkit, kntraszt visszaatéve potira, PWM első rangú fényerő szabályozásra!
Ha ezt össze tudnám hozni egy fényérzékelővel, az szupi lenne!
A hozzászólás módosítva: Aug 19, 2015
(#) V1rusH hozzászólása Aug 19, 2015 /
 
Van ez a kis progi, ami kiírja sorosportra az IR HEX kódot:
  1. #include "LiquidCrystal.h"
  2.  
  3. LiquidCrystal lcd(9, 8, 4, 5, 6, 7);
  4.   // Az LCD bekotese labak szerint:
  5.   // RS(D4), EN(D5), D4(D6) ,D5(D7), D6(D8), D7(D9)
  6.  
  7. byte pwm=255;
  8.   // 250 kitöltés max fényerő
  9.  
  10. void setup() {
  11.     // Serial.begin(9600);
  12.      irrecv.enableIRIn();
  13.      // Start the receiver
  14.  
  15.     analogWrite(3, pwm);
  16.     // 3 kivezetés LCD háttérvilágítás
  17.     lcd.begin(16, 2);
  18.     //Az LCD 2 sor, 16 oszlopos
  19.     }
  20.  
  21. void loop() {
  22. if (irrecv.decode(&results))
  23.     //Serial.println(results.value, HEX);
  24.     lcd.setCursor(0, 0);
  25.     lcd.print(results.value, HEX);
  26.     irrecv.resume();
  27.     delay(1000);
  28. }

Ezt a progit akarnám úgy átírni, hogy LCD-re írja ki.
Eddig ezt alkottam:
  1. #include "LiquidCrystal.h"
  2.  
  3. LiquidCrystal lcd(9, 8, 4, 5, 6, 7);
  4.   // Az LCD bekotese labak szerint:
  5.   // RS(D4), EN(D5), D4(D6) ,D5(D7), D6(D8), D7(D9)
  6.  
  7. byte pwm=255;
  8.   // 250 kitöltés max fényerő
  9.  
  10. void setup() {
  11.     // Serial.begin(9600);
  12.      irrecv.enableIRIn();
  13.      // Start the receiver
  14.  
  15.     analogWrite(3, pwm);
  16.     // 3 kivezetés LCD háttérvilágítás
  17.     lcd.begin(16, 2);
  18.     //Az LCD 2 sor, 16 oszlopos
  19.     }
  20.  
  21. void loop() {
  22. if (irrecv.decode(&results))
  23.     //Serial.println(results.value, HEX);
  24.     lcd.setCursor(0, 0);
  25.     lcd.print(results.value, HEX);
  26.     irrecv.resume();
  27.     delay(1000);
  28. }

De nem fordúl le.
irrecv.resume(); sorralleáll, és ezt a hibaüzenete adja:

Build options changed, rebuilding all

LCD1_lecke.ino: In function 'void setup()':
LCD1_lecke:13: error: 'irrecv' was not declared in this scope
LCD1_lecke.ino: In function 'void loop()':
LCD1_lecke:23: error: 'irrecv' was not declared in this scope
LCD1_lecke:23: error: 'results' was not declared in this scope
LCD1_lecke:26: error: 'results' was not declared in this scope
LCD1_lecke:27: error: 'irrecv' was not declared in this scope
'irrecv' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
(#) erdeidominik1999 válasza V1rusH hozzászólására (») Aug 19, 2015 /
 
Én ezt szoktam használni, nem tudom, hogy az a pwm minek, és hogy hol van a vevő pinje?
  1. #include <IRremote.h>
  2.  
  3. int RECV_PIN = 3;
  4.  
  5. IRrecv irrecv(RECV_PIN);
  6.  
  7. decode_results results;
  8.  
  9. void setup()
  10. {
  11.   Serial.begin(9600);
  12.   irrecv.enableIRIn(); // Start the receiver
  13. }
  14.  
  15. void loop() {
  16.   if (irrecv.decode(&results)) {
  17.     Serial.println(results.value, HEX);
  18.     irrecv.resume(); // Receive the next value
  19.   }
  20. }


És itt van lcd-n is:
  1. #include <IRremote.h>
  2. #include <LiquidCrystal.h>
  3.  
  4. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  5.  
  6. int RECV_PIN = 3;
  7.  
  8. IRrecv irrecv(RECV_PIN);
  9.  
  10. decode_results results;
  11.  
  12. void setup()
  13. {
  14.   lcd.begin(16, 2);
  15.   irrecv.enableIRIn(); // Start the receiver
  16. }
  17.  
  18. void loop() {
  19.   if (irrecv.decode(&results)) {
  20.     lcd.setCursor(0,0);
  21.     lcd.print(results.value, HEX);
  22.     irrecv.resume(); // Receive the next value
  23.   }
  24. }
(#) V1rusH válasza erdeidominik1999 hozzászólására (») Aug 19, 2015 /
 
Köszi, kipróbálom, és összehasonlítom, mit rontottam el.
A pwm az lcd játtér világítás intenzitását vezérli.
Van definiálva vevő pin az alap programban, az működik is. De az lcd-désből valóban hiányzik. Lehet ezt is kifogásolta.
(#) erdeidominik1999 válasza V1rusH hozzászólására (») Aug 19, 2015 /
 
Ezt is? Szerinted ha nincs definiálva, akkor honnan tudja, hogy hol van? Ez olyan mintha azt mondanám, hogy gyere el hozzám, a címem meg találd ki.
(#) V1rusH válasza erdeidominik1999 hozzászólására (») Aug 20, 2015 /
 
Ok, ok! Kopizáskor ezt nem vettem észre, hogy lemaradt, és a sekélyes angol tudásomnak kicsit sok volt a hibaüzenet. Na meg még a rutintalanság.
Tudom blőm dolog nagyon, de valahonnan el kell indúlni!
(#) V1rusH válasza V1rusH hozzászólására (») Aug 20, 2015 /
 
Most nézem, hogy nem is jó ir hex dekóder programot másoltam be, hanem már egy fabrikált programot!
(#) V1rusH válasza erdeidominik1999 hozzászólására (») Aug 20, 2015 /
 
Kipróbáltam a programodat, de csak tele írja a kijelzőt nullákkal.
(#) V1rusH hozzászólása Aug 20, 2015 /
 
IR vezérlést próbálgatnám, egyenlőre igen kevés sikerrel!
Nagyjából összeollóztam egy kis programot, ami egy ledet lenne hivatott egy gombbal ki-be kapcsolni, de nem reagál a program. Lefordúl, de a gombot hiába nyomkodom, a led nem kapcsol be.
  1. #include "IRremote.h"
  2. #define code  0xFFA25D
  3.  
  4. decode_results results;
  5. /
  6. int RECV_PIN = 11;
  7. int led = 2;
  8. IRrecv irrecv(RECV_PIN);
  9.  
  10. void setup()
  11. {
  12.     pinMode(led, OUTPUT);
  13.     irrecv.enableIRIn();
  14.     pinMode(2, OUTPUT);
  15.  }
  16.  
  17. void loop() {
  18.       if (irrecv.decode(&results)) {
  19.         unsigned int value = results.value;
  20.         switch(value)
  21.            case code: 0xFFA25D;
  22.                digitalWrite(led, LOW);  
  23.                digitalWrite(led, HIGH);
  24.                }
  25.              irrecv.resume();
  26. }
(#) Balázs válasza V1rusH hozzászólására (») Aug 20, 2015 /
 
Ezzel több baj is van. A legnagyobb, hogy a két digitalWrite utasítás rögtön egymás után van, így csak egy rövid pillanat erejéig villan fel a LED, amit nem fogsz látni. Javaslom továbbá a kapcsos zárójelek megfelelő tabulálását, hogy lásd, mit zársz le velük. Például az ifet a második digitalWrite alatt lezártad, így a resume folyamatosan hívódik, nem csak vétel után.

A switch szintaktikáját nézd meg itt. A code után a 0xFFA25D nem kell. Nem tilos, csak az egy hatástalan utasítás. De egyébként egyetlen összehasonlításhoz nem szokás switchet használni.
(#) Balázs válasza V1rusH hozzászólására (») Aug 20, 2015 / 1
 
Én így csinálnám:
  1. #include <IRremote.h>
  2. #define code  0xFFA25D
  3.  
  4.  
  5. const int RECV_PIN=11;
  6. const int LED_PIN=2;
  7. decode_results results;
  8. IRrecv irrecv(RECV_PIN);
  9.      
  10. void setup(){
  11.         pinMode(LED_PIN, OUTPUT);
  12.         Serial.begin(9600);
  13.         rrecv.enableIRIn();
  14.         irrecv.blink13(true);
  15. }
  16.      
  17. void loop(){
  18.         if(irrecv.decode(&results)){
  19.                 if(results.value==code)
  20.                         digitalWrite(LED_PIN, !digitalRead(LED_PIN));
  21.                 Serial.println(results.value, HEX);
  22.                 irrecv.resume();
  23.         }
  24. }


Ez még pluszban villogtatja az Arduino saját LED-jét (D13) vételkor, és kiírja a kódot a soros monitorra, hogy könnyebb legyen a hibakeresés.
(#) V1rusH válasza Balázs hozzászólására (») Aug 20, 2015 /
 
Köszi szépen!

Nem fordul le!
itt megáll:
  1. rrecv.enableIRIn();

Javítottma az rrecv szót irecv-re, de így is megáll.

IR_on_off.ino: In function 'void setup()':
IR_on_off:13: error: 'irecv' was not declared in this scope
'irecv' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
A hozzászólás módosítva: Aug 20, 2015
(#) Balázs válasza V1rusH hozzászólására (») Aug 20, 2015 /
 
Helyesen irrecv.
(#) V1rusH válasza Balázs hozzászólására (») Aug 20, 2015 /
 
Na ja! Már rá jöttem!
(#) andykaaa hozzászólása Aug 20, 2015 /
 
Az Arduino weboldálon nézegetem az eeprom-ba való infó eltárolását.
Az irást azt tökéletesen értem, minden iráskor ugrik egyet az adress hogy az eeprom élettartamát ne röviditsem drasztikusan.
A kérdésem a következo lenne:
Ha eltárolom az infot igy, akkor amikor vissza akarom olvasni hogy csinálom azt hogy mindig az utolsó beirást olvassa, vagyis az adress maximális értékeről olvasson ?
A hozzászólás módosítva: Aug 20, 2015
(#) V1rusH válasza Balázs hozzászólására (») Aug 20, 2015 /
 
Azt hogy tudom megoldani, hogy új ir gomb funkciókat adja hozzá?
Nem tudom még mindig kihámozni más programokból. Túl összetettek nekem még.
Most azzal játszadozom, hogy az általad adott progit beleraktam az lcd programban, és azt kapcsolgatom ki-be vele. De szeretném belerakni, hogy pl, ha megnyomok egy másik gombot, a hozzárendelt nevet kiírja. De első lépésben azt értem el, hogy az új gombra kapcsolt be ki, nem vlt megszámozva a kód definiálás, de miután megszámoztam, nem reagál rá.
  1. lcd.begin(16, 2);
  2.             //Az LCD 2 sor, 16 oszlopos
  3.             lcd.setCursor(4, 0);
  4.             lcd.print(" ARDUINO ");
  5.             if(results.value==code2)
  6.             switch(results.value)
  7.             case 0xFF22DD:  
  8.             lcd.setCursor(4, 2);
  9.             lcd.println("PLAY/PAUSE");

A programnak úgy kellene működnie, hogy az első kód fogadásakor bekapcsol, a második kód fogadásakor kiíraj az lcd második sorába a kért szöveget.
A hozzászólás módosítva: Aug 20, 2015
(#) andykaaa válasza V1rusH hozzászólására (») Aug 20, 2015 /
 
Szerintem igy:
  1. #include <IRremote.h>
  2. int IRpin = 11;  // pin for the IR sensor
  3. IRrecv irrecv(IRpin);
  4. decode_results results;
  5. void setup(){
  6.   Serial.begin(9600);
  7.   irrecv.enableIRIn(); // Start the receiver
  8.   }
  9.  
  10. void loop() {
  11.     if (irrecv.decode(&results)) {    
  12.        switch(results.value){
  13.   case 01:    // ide, a 01 helyere irod hex erteket
  14.   // do this
  15.   break;
  16.  
  17.   case 02:
  18.   // do another thing
  19.   break;
  20.  
  21.   case 03:
  22.   // feed my dog for me
  23.   break;
  24.  
  25.   default:
  26.     Serial.print("button: ");  Serial.println(results.value, HEX);
  27.   }
  28.     irrecv.resume();
  29.     delay(50);  }  }

Vagy a mellekelt kodbol
A hozzászólás módosítva: Aug 20, 2015
(#) Balázs hozzászólása Aug 20, 2015 /
 
V1rusH: Úgy, ahogy Andykaaa mutatja, erre való a switch.

Andykaaa: Azt neked kell nyilvántartanod, hogy az EEPROM-ban lévő adat melyik címig érvényes. Ha reset után is tudni szeretnéd, akkor lehet pl. az első két bájtot arra dedikálni, hogy ott tárold, melyik az utolsó érvényes cím. Mondjuk ami ebben a tutorialban van példa, az nem a legjobb, az EEPROM-ot ugyanis nem erre szokás használni. Ökölszabályként elmondható, hogy kb. százezer újraírást visel el biztonságosan, mielőtt tönkremegy, ezért egy végtelen ciklusban folyamatosan írogatni nem a legjobb ötlet. Tipikusan olyan konstansokat, konfigurációs adatokat szoktak ott tárolni, amiket ritkán kell változtatni. Ilyenek lehetnek pl. egy programozható távirányító kódjai, menü nyelve, beléptetőrendszer kódja, stb...
(#) andykaaa válasza Balázs hozzászólására (») Aug 20, 2015 /
 
Hát beállított értékeket szeretném tárolni benne, de ha az első, mondjunk 2 bajtot erre raszanom akkor tegyük fel hogy a 100000-edik irasnal csak az a 2 bajt lessz oda, vagy az egesz, a tobbi 510 is, UNO esetében ?
(#) V1rusH válasza andykaaa hozzászólására (») Aug 20, 2015 /
 
Ezt a bekopizott programot nem tudom életre kelteni!
Ezt próbálnám vele összehozni:
  1. #include "IRremote.h"
  2.     #include "LiquidCrystal.h"
  3.     #define code1: FFA25D
  4.     #define code2: FFE01F
  5.    
  6.     int IRpin = 11;  // pin for the IR sensor
  7.     IRrecv irrecv(IRpin);
  8.     decode_results results;
  9.     LiquidCrystal lcd(9, 8, 4, 5, 6, 7);
  10.    
  11.     void setup(){
  12.       Serial.begin(9600);
  13.       irrecv.enableIRIn(); // Start the receiver
  14.       lcd.begin(16, 2);
  15.       }
  16.      
  17.     void loop() {
  18.         if (irrecv.decode(&results)) {    
  19.            switch(results.value){
  20.       case FFA25D:    // ide, a 01 helyere irod hex erteket
  21.       lcd.setCursor(4, 0);
  22.       lcd.print(" ARDUINO ");
  23.       break;
  24.      
  25.       case FFE01F:
  26.       lcd.setCursor(2, 1);
  27.       lcd.print(" ATMEGA2560 ");
  28.       break;
  29.      
  30.       default:
  31.         Serial.print("button: ");  
  32.         Serial.println(results.value, HEX);
  33.       }
  34.         irrecv.resume();
  35.         delay(50);  }  
  36. }

De az első HEX kódnál megáll.
A hozzászólás módosítva: Aug 20, 2015
(#) erdeidominik1999 válasza V1rusH hozzászólására (») Aug 20, 2015 /
 
Ott a hex érték elé tegyél 0x-t. tehát case 0xFFA25D:.
Következő: »»   145 / 863
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem