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   146 / 863
(#) Balázs válasza andykaaa hozzászólására (») Aug 20, 2015 /
 
Az élettartam címenként értelmezendő, tehát amelyik bájtot gyakrabban írod, az előbb megy tönkre. De ezt ne úgy képzeld el, hogy a százezredik írás után valami bekattan, és dobhatod is ki az IC-t. Ez a százezres szám egy ökölszabály, ennyi újraírást gyakorlatilag biztosan elvisel a memória, de jó eséllyel ennek a többszörösét is. Ráadásul az öregedő cella első tünete nem az, hogy "beragad" a bit, hanem hogy nem lesz már képes olyan hosszú ideig megtartani az értékét (mondjuk a frissen garantált 20 év helyett csak 5-ig). De nehezen tudom elképzelni, hogy egy célszerűen használt EEPROM-nál akár csak megközelítse az újraírások száma a százezret.
(#) V1rusH válasza erdeidominik1999 hozzászólására (») Aug 20, 2015 /
 
Próbáltam úgy is, hogy csak a definiálásnál vsn 0x, próbáltam úgy is, hogy a case utáni hex is kapott egy 0x, de mindehogy leáll.

Ésrebetem, hogy több féle képpen lehet definiálni dolgokat. Kicsit ez is zavaró még. Nem csak ösdzeollózni akarom a programokat, érteni is mi miért úgy van.
Vannak elég ösdzetett ir programjaim, vagy is igazából egy, ami egy 5.1 rendszer vezérlésének forrádkódjában van. De még azt sem tudom, hogy hogy lehetötsgolni a programot? A void loop után írok minden változó dolgot, vagy lehet több loop is.
Akkor látom, hogy ebben a progiban van break. Ez volna a megszakítás? Arduinóforever mondta, hogy a megszakítások száma hardver függő.
Egy blőm példa: van egy 100 gombos tasztatúrám, akkor mind a 100 gombhoz nem tudok megszakítást rendelni, vagy ez nem ilyen egyszerű?
(#) Kovidivi válasza V1rusH hozzászólására (») Aug 20, 2015 /
 
Csak ennyit mondok: Bővebben: Link. Kezdd el már holnap!
CodeBlocks nevű programban tudod próbálgatni a C programjaidat Arduino nélkül.
A hozzászólás módosítva: Aug 20, 2015
(#) varttina válasza V1rusH hozzászólására (») Aug 21, 2015 /
 
Ha hexadecimális számot adsz meg, mindig kell a 0x előtag, függetlenül attól, hogy milyen helyen és milyen céllal teszed.
A #define célja, hogy egy kifejezést (jelen esetben egy hexadecimális számot) egy másikkal helyettesíts. Ha a program elején ez szerepel #define code1 0xFFA25D, utána már elegendő a code1 kifejezést használni a program további részében.
Egy programban csak egy void loop() lehet, de felesleges is lenne több.
A break kilép az aktuális {} blokkból, jelen esetben a switvh-ből, így nem hajtja végre az összes többi case: pontot.
A megszakítás teljesen más téma. Ott arról van szó, ha egy adott esemény bekövetkezik, megszakad a program futása, lefut a megszakítási szubrutin, majd folytatódik tovább a program. Nem kell minden gombhoz külön megszakítás, az esetek többségében egyetlen megszakítás is elegendő az összes gomb kezeléséhez. Ekkor megszakítási szubrutin dolga megállapítani, hogy melyik gomb lett lenyomva, és megtenni az ennek megfelelő intézkedést.
(#) andykaaa válasza V1rusH hozzászólására (») Aug 21, 2015 /
 
Ezt probald ki (csatolva a library is).
  1. #include <IRremote2.h>
  2.         #include <LiquidCrystal.h>
  3.        LiquidCrystal lcd(9, 8, 4, 5, 6, 7);        
  4.         int IRpin = 11;  // pin for the IR sensor
  5.         IRrecv irrecv(IRpin);
  6.         decode_results results;
  7.         // DE EZEK az ertekek biztos hogy jok ?, elmeletileg a serialon ki kellene hogy irjon minden button erteket, akarmelyiket is nyomogatod  
  8.         #define code1 0xFFA25D
  9.         #define code2 0xFFE01F
  10.         boolean cod1, cod2 = false;
  11.         boolean prev_cod1, prev_cod2 = false;
  12.              
  13.         void setup(){
  14.           Serial.begin(9600);
  15.           irrecv.enableIRIn(); // Start the receiver
  16.           lcd.begin(16, 2);
  17.           }
  18.          
  19.         void loop() {
  20.             if (irrecv.decode(&results)) {    
  21.                switch(results.value){
  22.           case code1:    // ide, a 01 helyere irod hex erteket
  23.               cod1 = !cod1;
  24.                    if(cod1 == true  && cod1 != prev_cod1) {
  25.                        lcd.setCursor(4, 0); lcd.print(" ARDUINO "); }   // kiirja, de csak egyszer, nem irja minden periodusba/ ciklusba
  26.               else if(cod1 == false && cod1 != prev_cod1) {
  27.                        lcd.setCursor(4, 0); lcd.print("         "); }   // torli, illetve ureseket ir ki, egyszer
  28.               else { }
  29.               prev_cod1 = cod1;  
  30.           break;
  31.          
  32.           case code2:
  33.               cod2 != cod2;
  34.                    if(cod2 == true  && cod1 != prev_cod1) {
  35.                       lcd.setCursor(2, 1); lcd.print(" ATMEGA2560 "); }
  36.               else if(cod2 == false && cod2 != prev_cod2) {
  37.                       lcd.setCursor(2, 1); lcd.print("            "); }  
  38.                else { }  
  39.               prev_cod2 = cod2;
  40.           break;
  41.          
  42.           default:
  43.             Serial.print("button: ");  Serial.println(results.value, HEX);  }
  44.             irrecv.resume();
  45.             delay(50);  } }

Nem probaltam elesbe, de szerintem kell hogy mukodjon.
Esetleg ha valaki valami hibat lat benne szoljon.
UI: de aztan innen mar a te dolgod.
A hozzászólás módosítva: Aug 21, 2015
(#) andykaaa válasza andykaaa hozzászólására (») Aug 21, 2015 /
 
Ez " else { }", a 28 es 38 sor, azt hiszem nem is kell, mert kulomben nincs mas lehetoseg mar.
(#) andykaaa válasza Balázs hozzászólására (») Aug 21, 2015 /
 
Köszönöm Balázs, igy már érthető számomra is. Habár az a 100.000 (garantált), az nagyon sok.
(#) andykaaa hozzászólása Aug 21, 2015 /
 
Egy 0,5 pontos kerdesem lenne, a szervo, peldaul ez, csak PWM kivezetesen mukodik, vagy a masikon is ? A neten tobbnyire PWM kivezetesre lattam rakotve. Koszonom.
(#) V1rusH válasza Kovidivi hozzászólására (») Aug 21, 2015 /
 
Köszönöm! Mindenképpen neki fogok látni!
(#) erdeidominik1999 hozzászólása Aug 21, 2015 /
 
Sziasztok! Az mitől lehet, hogy a time library általi óra siet? A "kínaiságtól"? Lehet ezzel valamit kezdeni?
(#) V1rusH válasza andykaaa hozzászólására (») Aug 21, 2015 /
 
Köszönöm neked is! A hex kódok tuti jók, mert előzőleg olvastam ki, és a ki/be kapcsoló programban is ez van, ahol működik is.

varttina: szintén köszönöm neked is, a kimerítő választ!

Kicsit nagyot ugrottam előre, még sokat kell tanulnom!
Ha valaki tud jó olvasmányokat magyarul, szivesen fogadnám! Sajnos az email leckék csak csepp a tengerben, épp hogy ízelítőnek elég. De jó dolog, hogy valaki ezt is legalább felvállalta, mert az nélkül még hozzáfogni sem mertem volna. Csak mostmár a lendület meg van, és kellene a további mozgató erő!
(#) andykaaa válasza V1rusH hozzászólására (») Aug 21, 2015 /
 
Itt van egy, s mas.
(#) koncsik03 hozzászólása Aug 21, 2015 /
 
Üdv!
Arduino + ds1307-el készítettem LCD órát.
Egy problémám van vele, amikor a másodperc 59-re vált rendesen vált a perc mutató is, de a másodperc így számol tovább: 09,19,29,39,49,59,69,79,89,99,10,11... innentől rendesen. Ezt a hibát hogyan lehetne kiküszöbölni?
  1. #include <Wire.h>
  2. #include "RTClib.h"
  3. #include "LiquidCrystal.h"
  4. LiquidCrystal lcd( 12, 11, 5, 4, 3, 2);
  5. RTC_DS1307 RTC;
  6.  
  7. void setup () {
  8.   lcd.begin(16, 2);
  9.   Wire.begin();
  10.   RTC.begin();
  11.     RTC.adjust(DateTime(__DATE__, __TIME__));
  12.   }
  13.  
  14. void loop () {
  15.   lcd.setCursor(0, 0);
  16.   DateTime now = RTC.now();
  17.  
  18.   lcd.print(now.year());
  19.   lcd.print(":");
  20.   lcd.print(now.month());
  21.   lcd.print(":");
  22.   lcd.print(now.day());
  23.   lcd.setCursor(0, 1);
  24.   lcd.print(now.hour());
  25.   lcd.print(":");
  26.   lcd.print(now.minute());
  27.   lcd.print(":");
  28.   lcd.print(now.second( ));
  29.  
  30. }
A hozzászólás módosítva: Aug 21, 2015
(#) andykaaa válasza koncsik03 hozzászólására (») Aug 21, 2015 /
 
Amikor az ertek 10 alatti, akkor eleje be kell iktatni egy nullat, amikor viszont elerte mar a 10-et, akkor mar nincs szukseged erre a nullara es akkor lessz ..., 59, 00, 01, ...09, 10 ....
Egyszeru, mindig megvizsgalod hogy az adott kiirando ertek kissebb mint 10 vagy sem es ennek megfeleloen irod a 0 szamjegyet a kettospont utan es az ertek ele, vagy sem.
A hozzászólás módosítva: Aug 21, 2015
(#) koncsik03 válasza andykaaa hozzászólására (») Aug 21, 2015 /
 
Rendben, megpróbálom.
Egyébként nem írja ki a 60-at, lehet rosszul fogalmaztam.
(#) saua hozzászólása Aug 22, 2015 /
 
Sziasztok,

Itt találtam egy érdekes alkalmazást androidos telefonra. Sikerült kiolvasni néhány karaktert amit az arduinonak küld és összehozni egy egyszerü sketcht. Sajnos csak az alap BE/KI kapcsolás műkődik. Az időzítés meg a fényerőszabályozás már nem.
Az időzítést gondolom a telefon végzi és csak egyszerűen küld egy ki/be kapcsoló karaktert, a fényerőszabályozás meg egy 0-255 közti karaterláncot küldhet, de ezeket már nem tudom kiolvasni.

Tipp, ötlet hogyan lehetne összehozni egy sketcht ami teljesen ki tudja használni az applikációt ?

  1. #include <SoftwareSerial.h>
  2.  
  3. int bluetoothTx = 2; // TX-O pin of bluetooth mate, Arduino D2
  4. int bluetoothRx = 3; // RX-I pin of bluetooth mate, Arduino D3
  5.  
  6. int led1 = 5;
  7. int led2 = 6;
  8. int led3 = 9;
  9. int led4 = 10;
  10. int dataFromBt;
  11.  
  12. SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
  13.  
  14. void setup()
  15. {
  16.  Serial.begin(9600); // Begin the serial monitor at 9600bps
  17.  
  18.  bluetooth.begin(115200); // The Bluetooth Mate defaults to 115200bps
  19.  bluetooth.print("$"); // Print three times individually
  20.  bluetooth.print("$");
  21.  bluetooth.print("$"); // Enter command mode
  22.  delay(100); // Short delay, wait for the Mate to send back CMD
  23.  bluetooth.println("U,9600,N"); // Temporarily Change the baudrate to 9600, no parity
  24.  // 115200 can be too fast at times for NewSoftSerial to relay the data reliably
  25.  bluetooth.begin(9600); // Start bluetooth serial at 9600
  26.  pinMode(led1, OUTPUT);
  27. pinMode(led2, OUTPUT);
  28. pinMode(led3, OUTPUT);
  29. pinMode(led4, OUTPUT);
  30.  }
  31.  
  32. void loop()
  33. {
  34.  
  35. if(bluetooth.available()) // If the bluetooth sent any characters
  36.  {
  37.  // Send any characters the bluetooth prints to the serial monitor
  38.  dataFromBt = bluetooth.read();
  39.  //Serial.println((char)bluetooth.read());
  40.  
  41. // button1
  42.  if(dataFromBt == '3'){
  43.  Serial.println("led1 on");
  44.  digitalWrite(led1, HIGH);
  45.   }
  46.  if(dataFromBt == '8'){
  47.  Serial.println("led1 off");
  48.  digitalWrite(led1, LOW);
  49.   }
  50.  
  51. // button2
  52. if(dataFromBt == '1'){
  53.  Serial.println("led2 on");
  54.  digitalWrite(led2, HIGH);
  55. }
  56.  if(dataFromBt == '6'){
  57.  Serial.println("led2 off");
  58.  digitalWrite(led2, LOW);
  59. }
  60.  
  61. // button3
  62. if(dataFromBt == '2'){
  63.  Serial.println("led3 on");
  64.  digitalWrite(led3, HIGH);
  65.   }
  66.  if(dataFromBt == '7'){
  67.  Serial.println("led3 off");
  68.  digitalWrite(led3, LOW);
  69.   }
  70.  
  71. // button4
  72. if(dataFromBt == '0'){
  73.  Serial.println("led4 on");
  74.  digitalWrite(led4, HIGH);
  75.   }
  76.  if(dataFromBt == '5'){
  77.  Serial.println("led4 off");
  78.  digitalWrite(led4, LOW);
  79.   }
  80. }
  81. }
(#) erdeidominik1999 válasza erdeidominik1999 hozzászólására (») Aug 23, 2015 /
 
Na arra már rájöttem, hogy nem siet, hanem az rtc siet, viszont az arduinó órája meg késik. Mit lehet ezzel kezdeni? Előre is köszi!
(#) V1rusH hozzászólása Aug 23, 2015 /
 
Eddig is túl vállaltam magam, és sokszor helyettem dolgoztatok amit köszönök is, de most a szükség úgy hozta, hogy ismét ezt kell kérnem!
Úgy fest bekrepált a nyomtatóm usb portja, de láttam van usb<-ltp kábel. Kissé gyanús volt, hogy csak simán össze lenne drótozva, és be is igazolódott. Egy atmega 8-cal működő kapcsolást találtam is. Kérdésem, hogy ezt át lehet ültetni arduinóra? Vettem nem rég egy minit, ez klasszul bele is férne az ltp csatlakozóba.
(#) artiny hozzászólása Aug 24, 2015 /
 
Helotok
Ezek kozul melyiket rendeljem?1
2 3 4 5

Ezek mukodhetnek az arduino progival ?
A hozzászólás módosítva: Aug 24, 2015
(#) Gabó válasza artiny hozzászólására (») Aug 24, 2015 / 2
 
Én ezt rendelném a helyedbe: Bővebben: Link
Kapásból 2 ok miatt. Az első, ez nem a kínai usb illesztővel szerelt (CH) a másik meg, ha ellövöd benne az unot, tudsz avr-t cserélni.
Progival működnek.
(#) mikrokapcsolo válasza artiny hozzászólására (») Aug 24, 2015 /
 
Én az elsőből már rendeltem 5 db-ot, azok mind hibátlanok azóta.
(#) atus1981 válasza Gabó hozzászólására (») Aug 24, 2015 /
 
Én is ilyent meg a nano-t használom. Pikk-pakk cserélhető, de eddig nem volt gond egyikkel sem (kop-kop)
(#) atus1981 hozzászólása Aug 24, 2015 /
 
Sziasztok!
Az alábbi kódban mit módosítsak, hogy ne "0" legyen az eltárolt első mérés?
  1. /*
  2.   Smoothing
  3.  Folyamatosan kiolvassa az analóg bemenetet és a tömbben  eltárolt értékeket folyamatosan átlagolja.
  4.  
  5.  Áramkör:
  6.  * Analóg szenzor az analóg 0 pinbe.
  7.  
  8.  Created 22 April 2007
  9.  By David A. Mellis  <dam@mellis.org>
  10.  modified 9 Apr 2012 by Tom Igoe
  11.  */
  12.  
  13. //  Meghatározzuk, hány számot akarunk átlagolni.
  14. // Nagyobb számnál simább lesz a kimenet,
  15. // kisebbnél pedig a kimenet gyorsabban reagál.
  16. // Integer állandót használunk a tömb elemeinek
  17. // számának meghatározására.
  18.  
  19. const int numReadings = 10;
  20.  
  21. // analóg bemenetet kiolvasó integer változó tömb:
  22. int readings[numReadings];    
  23. // aktuális kiolvasás értékét tároló integer változó:  
  24. int index = 0;                  
  25.  
  26. int total = 0;                  // összes lefutás
  27. int average = 0;                // az átlag
  28.  
  29. int inputPin = A0;
  30.  
  31. void setup() {
  32.   // inicializáljuk a soros kommunikációt:
  33.   Serial.begin(9600);                  
  34.   // inicializáljuk a kiolvasást minden egyes kiolvasáshoz:
  35.   for (int thisReading = 0; thisReading < numReadings; thisReading++)
  36.     readings[thisReading] = 0;          
  37. }
  38.  
  39. void loop() {
  40.   // levonjuk az utolsó kiolvasást:
  41.   total= total - readings[index];        
  42.   // amit a szenzorból olvastunk ki:
  43.   readings[index] = analogRead(inputPin);
  44.   // a kiolvasott értéket hozzáadjuk az egészhez:
  45.   total= total + readings[index];      
  46.   // továbblépünk a tömb következő eleméhez:
  47.   index = index + 1;                    
  48.  
  49.   // ha a tömb végére érünk...
  50.   if (index >= numReadings)              
  51.     // ...visszaugrunk a kezdő értékhez:
  52.     index = 0;                          
  53.  
  54.   // kiszámoljuk az átlagot:
  55.   average = total / numReadings;        
  56.   // a számítógépre küldjük ASCII számjegyként
  57.   Serial.println(average);  
  58.   delay(300);        
  59.   // szünet a kiolvasások között a stabilitás miatt
  60. }
(#) artiny válasza atus1981 hozzászólására (») Aug 24, 2015 /
 
Gabó: itt erre a CH340G chipre gondolsz,hogy drivert nem ismeri fel azonnal,es manualissan kell majd beallitani? - ha ezt sikerul feltelepiteni akkor viszont mar ugyan az lenne mint amit te ajanlottal - (2-3€ sporolnak vele ) - amugy en lefoldelem magam ilyen kar pereccel ha dolgoznak vele/fogdosnam.
(#) erdeidominik1999 válasza atus1981 hozzászólására (») Aug 24, 2015 /
 
Hogy hogy ne 0 legyen? A 0 az nem mérés, hanem egy kezdőérték, ahhoz a 36. sorban a 0-t írd át.
(#) atus1981 válasza erdeidominik1999 hozzászólására (») Aug 24, 2015 /
 
Átírtam, de így kevesebb az átlag a valósnál. "Lehúzza"a módosítás...
Viszont ha a 35. sor nulláját írom át, akkor működik Köszi.
Még egy olyan kérdésem lenne, hogy azt hogyan lehet megvalósítani, ha pl.: egy
  1. int gazkaz_allapot=0;
  2.  
  3.    if (puffer < 45 && kazan < 89) {
  4.      digitalWrite(gazkaz, HIGH);
  5.      gazkaz_allapot=1;
  6.      }
  7.   if (puffer > 45 || kazan > 89) {
  8.     digitalWrite(gazkaz, LOW);
  9.     gazkaz_allapot=0;
  10.     }


átvált 0-ról 1-re, akkor azt milyen operatorral lehet követni?
A hozzászólás módosítva: Aug 24, 2015
(#) erdeidominik1999 válasza atus1981 hozzászólására (») Aug 24, 2015 /
 
Ezt nem értem, mit akarsz követni? a gazkazán állapot változót? vagy a kimenet állípotát?
(#) saua hozzászólása Aug 25, 2015 /
 
Sziasztok,

Van arra lehetőség, hogy miután egy androidos telefon kapcsolódik bluetoothon keresztül egy arduinoval, és a távolság miatt megszakad a kapcsolat, mikor megint visszakerül az arduinó hatósugarába a kapcsolat automatikusan létrejöjjön?

Például a hozzászólásban említett applikáció.
A hozzászólás módosítva: Aug 25, 2015
(#) atus1981 válasza erdeidominik1999 hozzászólására (») Aug 25, 2015 /
 
Az állapot változását szeretném követni.
(#) andykaaa válasza atus1981 hozzászólására (») Aug 25, 2015 /
 
„Az állapot változását szeretném követni.” - vizualisan ?, ra kotsz egy LED-et, szoftveresen ?, szerintem mar megoldottad ezzel „gazkaz_allapot=1;”.
Következő: »»   146 / 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