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   42 / 850
(#) Kovidivi válasza andyka hozzászólására (») Aug 12, 2014 /
 
Akkor még alakítanod kell a programon.
Mikor le, akkor menu++; ha fel akkor menu--; és mikor az ok-ot nyomod meg, csak akkor lesz futtatva a megfelelő függvény. Ezt elérheted, ha használsz egy engedélyező változót.
A függvényhívás pedig így fog kinézni:
  1. if ((menu == 1)&(engedelyezes == 1)) {
  2.  menu_1(); }

az engedelyezes pedig egy változó, ami alap esetben 0, és ha megnyomod az ok gombot, csak akkor lesz 1-es. Azt még meg kell oldanod, hogy mikor fel és le mozogsz, a menü, gondolom LCD-n, vele egy időben mozogjon. Na majd összerakod te ezt. A függvények nélkül rakd fel, csak a menü részt, ha átírtad, és ha nem működik.
(#) varttina válasza TavIR-AVR hozzászólására (») Aug 13, 2014 /
 
Időközben megoldottam. Letöltöttem egy virtuális midi zongora programot, ami billentyűzettel is működtethető. Már csak annyi volt a dolgom, hogy billentyűzetet emuláljak és kész. Igaz nem tökéletes, hiszen csak 3 oktávot tudok így kezelni, de legalább nem került pénzembe.
(#) erdeidominik1999 hozzászólása Aug 13, 2014 /
 
Sziasztok! Sim900-as gsm egységen serial.read()-del hozom le a dtmf hangokat, nem is ez a lényeg, hanem a létrehoztam egy változót, amibe bekerül a serial.read() majd ezt switch() fügvénnyel válogatom (próbáltam simán if()-el is) de valahogyan összedolgoznak, és ha pl.: hívom a modult és soros monitoron kiírja a számot amiről hívom, akkor az összes case-ben lévő rész egyszerre elindul. Mi lehet a probléma?
(#) andyka válasza erdeidominik1999 hozzászólására (») Aug 13, 2014 /
 
Hello erdeidominik1999, sziasztok
Megoldottam a menu visszaallast, hala nektek, foleg erdeidominik1999-nak, O adta a fo 5letet.
De, ha mar itt tartunk volna meg egy apro szepseghiba, legalabbis amit en latok.
Mikeppen lehetne a fo feladatsort betenni a "void loop()" -ba, ugy hogy az LCD akkor is mutassa a homersekletet, vagyis ugy hogy atvegye onnan az erteket (ne kelljen ketszer merjen a szerko). Tulajdonkeppen ez arra lenne jo hogy csak egy fo feladatleiras lenne ami mindig, fuggetlenul a menu allasatol mukodne.
Koszonom
Csatolom a megoldast egy rovidke steck (progi) fajlba.

menu.ino
    
(#) andyka válasza andyka hozzászólására (») Aug 13, 2014 /
 
Valahogy igy

menu1.ino
    
(#) erdeidominik1999 válasza andyka hozzászólására (») Aug 13, 2014 /
 
Hello! Hú-ha a második részt, hogy mit szeretnél még, azt nem nagyon értem.
(#) andyka válasza erdeidominik1999 hozzászólására (») Aug 13, 2014 /
 
Hali,
a fo feladat a "menu" fajlba a "void resistance()" -be van beirva. Ami elmeletileg azt jelenti hogy csak akkor mukodik ha az fut, vagyis a "menu=0", amikor a tobbi menu fut akkor ez a feladat elmarad.
Azt szeretnem hogy ezt a feladatot
  1. int degres = analogRead(inputSensor);
  2.   float floatDegres = degres*0.488758;  
  3.   if ((floatDegres++) && (floatDegres > (prevFloatDegres + hysteresis / 2))) { prevFloatDegres = (floatDegres - hysteresis / 2); }
  4.   if ((floatDegres--) && (floatDegres < (prevFloatDegres - hysteresis / 2))) { prevFloatDegres = (floatDegres + hysteresis / 2); }
  5.       else {  }
  6.    
  7.   if (prevFloatDegres < tempMVmin){
  8.     digitalWrite (led1, LOW);
  9.     digitalWrite (led2, LOW);
  10.     digitalWrite (led3, HIGH);
  11.     }
  12.   else if (prevFloatDegres = tempMVmin){
  13.     digitalWrite (led1, LOW);
  14.     digitalWrite (led2, HIGH);
  15.     digitalWrite (led3, LOW);
  16.   }
  17.   else if (prevFloatDegres > tempMVmax ){
  18.     digitalWrite (led1, HIGH);
  19.     digitalWrite (led2, LOW);
  20.     digitalWrite (led3, LOW);
  21.   }  //// ide lenne a fo feladat
  22. }

a "void loop()" -ba irjam, hogy ez mindig, meg a menu navigalas alatt is mukodjon.
Mint irtam szepseghiba mert ha ezt
  1. int degres = analogRead(inputSensor);
  2.   float floatDegres = degres*0.488758;
beirom a "void resistance()" -ba is csak akkor mutatja az ertekeket, ami azt jelenti hogy a szerko ketszer olvassa ki az erteket es ketszer alakitja at.
Gyakorlatilag nem lenne gond, de mar "szurja a csorom", szeretnem ezt is megoldani valahogyan.
Tehat: a "void loop()" -ba kiolvasott es atalakitott analog erteket tudjam hasznositani a "void resistance()" -ba.

Esetleg ha osszehasonlitod a ket fajl tartalmat "menu" es "menu1", akkor jobban megerted amit akarok.
A hozzászólás módosítva: Aug 13, 2014
(#) erdeidominik1999 válasza andyka hozzászólására (») Aug 13, 2014 /
 
Szia végre megértettem, mit szeretnél! Nézd meg ezt, elvileg most jó lesz.

menu2.ino
    
(#) andyka válasza erdeidominik1999 hozzászólására (») Aug 13, 2014 /
 
  1. float floatDegres;

Ez a megoldas, ennyi ?
Nagyszeru vagyok erte.
(#) szikorapéter hozzászólása Aug 13, 2014 /
 
Üdv. Akármilyen programot szeretnék kipróbálni folyamatosan leszolja a program amit használok,így kipróbálni sem tudom. Mi tévő legyek? Itt a kapcsolás amit használok,és itt a forráskód is. Egy kép a hibáról,a programozóm egy Arduino UNO a chip pedig: AT Mega 328p-pu. A válaszokat előre is köszönöm. Végül ide került a kép mert valamiért ide nem tudtam feltölteni.
A hozzászólás módosítva: Aug 13, 2014
(#) mikrokapcsolo válasza szikorapéter hozzászólására (») Aug 14, 2014 /
 
Valószínűleg az a kód nem kerek.
Próbáld ki ezt:
  1. void setup()
  2. {
  3.   pinMode(13, OUTPUT);
  4. }
  5. void loop()
  6. {
  7.   digitalWrite(13, HIGH);
  8.   delay(100);  
  9.   digitalWrite(13, LOW);
  10.   delay(100);
  11. }

Mellesleg, a ledekhez ajánlott lenne áramkorlátozó ellenállás, 200 ohm körüli.
Ha ez a kód sem töltődik fel rendesen, akkor a panelod, vagy a panel és a gép közti kapcsolat hibás.
(#) szikorapéter válasza mikrokapcsolo hozzászólására (») Aug 14, 2014 /
 
A program egésze valahogy így fest:
  1. /*
  2. TV-B-Gone for Arduino version 0.001
  3.  Ported to Arduino by Ken Shirriff, Dec 3, 2009
  4.  http://arcfn.com
  5.  
  6.  The original code is:
  7.  TV-B-Gone Firmware version 1.2
  8.  for use with ATtiny85v and v1.2 hardware
  9.  (c) Mitch Altman + Limor Fried 2009
  10.  Last edits, August 16 2009
  11.  
  12.  With some code :
  13.  Kevin Timmerman & Damien Good 7-Dec-07
  14.  
  15.  Distributed under Creative Commons 2.5 -- Attib & Share Alike
  16.  
  17.  This is the 'universal' code designed for v1.2 - it will  EU or NA
  18.  depending on a pulldown resistor on pin B1 !
  19.  */
  20.  
  21. #include "main.h"
  22.  
  23. void xmitCodeElement(uint16_t ontime, uint16_t offtime, uint8_t PWM_code );
  24. void flashslowLEDx( uint8_t num_blinks );
  25. void quickflashLEDx( uint8_t x );
  26. void tvbgone_sleep( void );
  27. void delay_ten_us(uint16_t us);
  28. void quickflashLED( void );
  29. uint8_t read_bits(uint8_t count);
  30.  
  31. #define putstring_nl(s) Serial.println(s)
  32. #define putstring(s) Serial.print(s)
  33. #define putnum_ud(n) Serial.print(n, DEC)
  34. #define putnum_uh(n) Serial.print(n, HEX)
  35.  
  36. /*
  37. This project transmits a bunch of TV POWER codes, one right after the other,
  38.  with a pause in between each.  (To have a visible indication that it is
  39.  transmitting, it also pulses a visible LED once each time a POWER code is
  40.  transmitted.)  That is all TV-B-Gone does.  The tricky part of TV-B-Gone
  41.  was collecting all of the POWER codes, and getting rid of the duplicates and
  42.  near-duplicates (because if there is a duplicate, then one POWER code will
  43.  turn a TV off, and the duplicate will turn it on again (which we certainly
  44.  do not want).  I have compiled the most popular codes with the
  45.  duplicates eliminated, both for North America (which is the same as Asia, as
  46.  far as POWER codes are concerned -- even though much of Asia USES PAL video)
  47.  and for Europe (which works for Australia, New Zealand, the Middle East, and
  48.  other parts of the world that use PAL video).
  49.  
  50.  Before creating a TV-B-Gone Kit, I originally started this project by hacking
  51.  the MiniPOV kit.  This presents a limitation, based on the size of
  52.  the Atmel ATtiny2313 internal flash memory, which is 2KB.  With 2KB we can only
  53.  fit about 7 POWER codes into the firmware's database of POWER codes.  However,
  54.  the more codes the better! Which is why we chose the ATtiny85 for the
  55.  TV-B-Gone Kit.
  56.  
  57.  This version of the firmware has the most popular 100+ POWER codes for
  58.  North America and 100+ POWER codes for Europe. You can  which region
  59.  to use by soldering a 10K pulldown resistor.
  60.  */
  61.  
  62.  
  63. /*
  64. This project is a good example of how to use the AVR chip timers.
  65.  */
  66.  
  67.  
  68. /*
  69. The hardware for this project uses an Arduino:
  70.  Connect an IR LED to pin 3.
  71.  Connect a visible LED to pin 13 (or use builtin LED in some Arduinos).
  72.  Connect a pushbutton between pin 1 and ground.
  73.  Pin 0 is floating for North America, or wired to ground for Europe.
  74.  */
  75.  
  76.  
  77.  
  78. extern PGM_P *NApowerCodes[] PROGMEM;
  79. extern PGM_P *EUpowerCodes[] PROGMEM;
  80. extern uint8_t num_NAcodes, num_EUcodes;
  81.  
  82. /* This function is the 'workhorse' of transmitting IR codes.
  83.  Given the on and off times, it turns on the PWM output on and off
  84.  to generate one 'pair'  a long code. Each code has ~50 pairs! */
  85. void xmitCodeElement(uint16_t ontime, uint16_t offtime, uint8_t PWM_code )
  86. {
  87.   TCNT2 = 0;
  88.   if(PWM_code) {
  89.     pinMode(IRLED, OUTPUT);
  90.     // Fast PWM, setting top limit, divide by 8
  91.     // Output to pin 3
  92.     TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
  93.     TCCR2B = _BV(WGM22) | _BV(CS21);
  94.   }
  95.   else {
  96.     // However some codes dont use PWM in which case we just turn the IR
  97.     // LED on for the period of time.
  98.     digitalWrite(IRLED, HIGH);
  99.   }
  100.  
  101.   // Now we wait, allowing the PWM hardware to pulse out the carrier
  102.   // frequency for the specified 'on' time
  103.   delay_ten_us(ontime);
  104.  
  105.   // Now we have to turn it off so disable the PWM output
  106.   TCCR2A = 0;
  107.   TCCR2B = 0;
  108.   // And make sure that the IR LED is off too (since the PWM may have
  109.   // been stopped while the LED is on!)
  110.   digitalWrite(IRLED, LOW);
  111.  
  112.   // Now we wait for the specified 'off' time
  113.   delay_ten_us(offtime);
  114. }
  115.  
  116. /* This is kind of a strange but very useful helper function
  117.  Because we are using compression, we index to the timer table
  118.  not with a full 8-bit byte (which is wasteful) but 2 or 3 bits.
  119.  Once code_ptr is set up to point to the right part of memory,
  120.  this function will let us read 'count' bits at a time which
  121.  it does by reading a byte into 'bits_r' and then buffering it. */
  122.  
  123. uint8_t bitsleft_r = 0;
  124. uint8_t bits_r=0;
  125. PGM_P code_ptr;
  126.  
  127. // we cant read more than 8 bits at a time so dont try!
  128. uint8_t read_bits(uint8_t count)
  129. {
  130.   uint8_t i;
  131.   uint8_t tmp=0;
  132.  
  133.   // we need to read back count bytes
  134.   for (i=0; i<count; i++) {
  135.     // check if the 8-bit buffer we have has run out
  136.     if (bitsleft_r == 0) {
  137.       // in which case we read a new byte in
  138.       bits_r = pgm_read_byte(code_ptr++);
  139.       // and reset the buffer size (8 bites in a byte)
  140.       bitsleft_r = 8;
  141.     }
  142.     // remove one bit
  143.     bitsleft_r--;
  144.     // and shift it off of the end of 'bits_r'
  145.     tmp |= (((bits_r >> (bitsleft_r)) & 1) << (count-1-i));
  146.   }
  147.   // return the ed bits in the LSB part of tmp
  148.   return tmp;
  149. }
  150.  
  151.  
  152. /*
  153. The C compiler creates code that will transfer all constants into RAM when
  154.  the microcontroller resets.  Since this firmware has a table (powerCodes)
  155.  that is too large to transfer into RAM, the C compiler needs to be told to
  156.  keep it in program memory space.  This is accomplished by the macro PROGMEM
  157.  (this is used in the definition for powerCodes).  Since the C compiler assumes
  158.  that constants are in RAM, rather than in program memory, when accessing
  159.  powerCodes, we need to use the pgm_read_word() and pgm_read_byte macros, and
  160.  we need to use powerCodes as an address.  This is done with PGM_P, defined
  161.  below.  
  162.  For example, when we start a new powerCode, we first point to it with the
  163.  following statement:
  164.  PGM_P thecode_p = pgm_read_word(powerCodes+i);
  165.  The next read  the powerCode is a byte that indicates the carrier
  166.  frequency, read as follows:
  167.  const uint8_t freq = pgm_read_byte(code_ptr++);
  168.  After that is a byte that tells us how many 'onTime/offTime' pairs we have:
  169.  const uint8_t numpairs = pgm_read_byte(code_ptr++);
  170.  The next byte tells us the compression method. Since we are going to use a
  171.  timing table to keep track of how to pulse the LED, and the tables are
  172.  pretty short (usually only 4-8 entries), we can index into the table with only
  173.  2 to 4 bits. Once we know the bit-packing-size we can decode the pairs
  174.  const uint8_t bitcompression = pgm_read_byte(code_ptr++);
  175.  Subsequent reads  the powerCode are n bits (same as the packing size)
  176.  that index into another table in ROM that actually stores the on/off times
  177.  const PGM_P time_ptr = (PGM_P)pgm_read_word(code_ptr);
  178.  */
  179.  
  180. uint16_t ontime, offtime;
  181. uint8_t i,j, Loop;
  182. uint8_t region = US;     // by default our code is U
  183.  
  184. void setup()   {                
  185.   Serial.begin(9600);
  186.  
  187.   TCCR2A = 0;
  188.   TCCR2B = 0;
  189.  
  190.   digitalWrite(LED, LOW);
  191.   digitalWrite(IRLED, LOW);
  192.   pinMode(LED, OUTPUT);
  193.   pinMode(IRLED, OUTPUT);
  194.   pinMode(REGIONSWITCH, INPUT);
  195.   pinMode(TRIGGER, INPUT);
  196.   digitalWrite(REGIONSWITCH, HIGH); //Pull-up
  197.   digitalWrite(TRIGGER, HIGH);
  198.  
  199.   delay_ten_us(5000);            // Let everything settle for a bit
  200.  
  201.   // determine region
  202.   if (digitalRead(REGIONSWITCH)) {
  203.     region = US; // US
  204.     DEBUGP(putstring_nl("US"));
  205.   }
  206.   else {
  207.     region = EU;
  208.     DEBUGP(putstring_nl("EU"));
  209.   }
  210.  
  211.   // Tell the user what region we're in  - 3 is US 4 is EU
  212.   quickflashLEDx(3+region);
  213.  
  214.   // Indicate how big our database is
  215.   DEBUGP(putstring("\n\rNA Codesize: ");
  216.   putnum_ud(num_NAcodes);
  217.   );
  218.   DEBUGP(putstring("\n\rEU Codesize: ");
  219.   putnum_ud(num_EUcodes);
  220.   );
  221. }
  222.  
  223. void sendAllCodes() {
  224.   // We may have different number of codes in either database
  225.   if (region == US) {
  226.     j = num_NAcodes;
  227.   }
  228.   else {
  229.     j = num_EUcodes;
  230.   }
  231.  
  232.   // for every POWER code in our collection
  233.   for (i=0 ; i < j; i++) {
  234.     PGM_P data_ptr;
  235.  
  236.     // print out the code # we are about to transmit
  237.     DEBUGP(putstring("\n\r\n\rCode #: ");
  238.     putnum_ud(i));
  239.  
  240.     // point to next POWER code,  the right database
  241.     if (region == US) {
  242.       data_ptr = (PGM_P)pgm_read_word(NApowerCodes+i);  
  243.     }
  244.     else {
  245.       data_ptr = (PGM_P)pgm_read_word(EUpowerCodes+i);  
  246.     }
  247.  
  248.     // print out the address in ROM memory we're reading
  249.     DEBUGP(putstring("\n\rAddr: ");
  250.     putnum_uh((uint16_t)data_ptr));
  251.  
  252.     // Read the carrier frequency  the first byte of code structure
  253.     const uint8_t freq = pgm_read_byte(data_ptr++);
  254.     // set OCR for Timer1 to output this POWER code's carrier frequency
  255.     OCR2A = freq;
  256.     OCR2B = freq / 3; // 33% duty cycle
  257.  
  258.     // Print out the frequency of the carrier and the PWM settings
  259.     DEBUGP(putstring("\n\rOCR1: ");
  260.     putnum_ud(freq);
  261.     );
  262.     DEBUGP(uint16_t x = (freq+1) * 2;
  263.     putstring("\n\rFreq: ");
  264.     putnum_ud(F_CPU/x);
  265.     );
  266.  
  267.     // Get the number of pairs, the second byte  the code struct
  268.     const uint8_t numpairs = pgm_read_byte(data_ptr++);
  269.     DEBUGP(putstring("\n\rOn/off pairs: ");
  270.     putnum_ud(numpairs));
  271.  
  272.     // Get the number of bits we use to index into the timer table
  273.     // This is the third byte of the structure
  274.     const uint8_t bitcompression = pgm_read_byte(data_ptr++);
  275.     DEBUGP(putstring("\n\rCompression: ");
  276.     putnum_ud(bitcompression);
  277.     putstring("\n\r"));
  278.  
  279.     // Get pointer (address in memory) to pulse-times table
  280.     // The address is 16-bits (2 byte, 1 word)
  281.     PGM_P time_ptr = (PGM_P)pgm_read_word(data_ptr);
  282.     data_ptr+=2;
  283.     code_ptr = (PGM_P)pgm_read_word(data_ptr);
  284.  
  285.     // Transmit all codeElements for this POWER code
  286.     // (a codeElement is an onTime and an offTime)
  287.     // transmitting onTime means pulsing the IR emitters at the carrier
  288.     // frequency for the length of time specified in onTime
  289.     // transmitting offTime means no output  the IR emitters for the
  290.     // length of time specified in offTime
  291.  
  292. #if 0
  293.  
  294.     // print out all of the pulse pairs
  295.     for (uint8_t k=0; k<numpairs; k++) {
  296.       uint8_t ti;
  297.       ti = (read_bits(bitcompression)) * 4;
  298.       // read the onTime and offTime  the program memory
  299.       ontime = pgm_read_word(time_ptr+ti);
  300.       offtime = pgm_read_word(time_ptr+ti+2);
  301.       DEBUGP(putstring("\n\rti = ");
  302.       putnum_ud(ti>>2);
  303.       putstring("\tPair = ");
  304.       putnum_ud(ontime));
  305.       DEBUGP(putstring("\t");
  306.       putnum_ud(offtime));
  307.     }
  308.     continue;
  309. #endif
  310.  
  311.     // For EACH pair in this code....
  312.     cli();
  313.     for (uint8_t k=0; k<numpairs; k++) {
  314.       uint16_t ti;
  315.  
  316.       // Read the next 'n' bits as indicated by the compression variable
  317.       // The multiply by 4 because there are 2 timing numbers per pair
  318.       // and each timing number is one word long, so 4 bytes total!
  319.       ti = (read_bits(bitcompression)) * 4;
  320.  
  321.       // read the onTime and offTime  the program memory
  322.       ontime = pgm_read_word(time_ptr+ti);  // read word 1 - ontime
  323.       offtime = pgm_read_word(time_ptr+ti+2);  // read word 2 - offtime
  324.       // transmit this codeElement (ontime and offtime)
  325.       xmitCodeElement(ontime, offtime, (freq!=0));
  326.     }
  327.     sei();
  328.  
  329.     //Flush remaining bits, so that next code starts
  330.     //with a fresh set of 8 bits.
  331.     bitsleft_r=0;      
  332.  
  333.     // delay 250 milliseconds before transmitting next POWER code
  334.     //delay_ten_us(25000);
  335.     delay_ten_us(10000);
  336.  
  337.     // visible indication that a code has been output.
  338.     quickflashLED();
  339.   }
  340.   while (Loop == 1);
  341.  
  342.   // flash the visible LED on PB0  4 times to indicate that we're done
  343.   delay_ten_us(65500); // wait maxtime
  344.   delay_ten_us(65500); // wait maxtime
  345.   quickflashLEDx(4);
  346.  
  347. }
  348.  
  349. void loop() {
  350.   if (digitalRead(TRIGGER) == 0) {
  351.     sendAllCodes();
  352.   }
  353. }
  354.  
  355.  
  356. /****************************** LED AND DELAY FUNCTIONS ********/
  357.  
  358.  
  359. // This function delays the specified number of 10 microseconds
  360. // it is 'hardcoded' and is calibrated by adjusting DELAY_CNT
  361. // in main.h Unless you are changing the crystal  8mhz, dont
  362. // mess with this.
  363. void delay_ten_us(uint16_t us) {
  364.   uint8_t timer;
  365.   while (us != 0) {
  366.     // for 8MHz we want to delay 80 cycles per 10 microseconds
  367.     // this code is tweaked to give about that amount.
  368.     for (timer=0; timer <= DELAY_CNT; timer++) {
  369.       NOP;
  370.       NOP;
  371.     }
  372.     NOP;
  373.     us--;
  374.   }
  375. }
  376.  
  377.  
  378. // This function quickly pulses the visible LED (connected to PB0, pin 5)
  379. // This will indicate to the user that a code is being transmitted
  380. void quickflashLED( void ) {
  381.   digitalWrite(LED, HIGH);
  382.   delay_ten_us(30);       // 30 millisec delay
  383.   digitalWrite(LED, LOW);
  384. }
  385.  
  386. // This function just flashes the visible LED a couple times, used to
  387. // tell the user what region is ed
  388. void quickflashLEDx( uint8_t x ) {
  389.   quickflashLED();
  390.   while(--x) {
  391.     delay_ten_us(DELAY);  // 150 millisec delay between flahes
  392.     quickflashLED();
  393.   }
  394. }

Ezen megpróbáltam változtatni az általad megadott módon,de a hiba megmaradt.
(#) mikrokapcsolo válasza szikorapéter hozzászólására (») Aug 14, 2014 /
 
Én egy külön programot vázoltam, tehát egy új projektbe bemásolod, és feltöltés után a piros leded villogni fog. Ha ez működik, akkor a tvbgone kód a hibás, a panel jó. Ha nem, akkor más hiba van. A neten jópár ilyenfajta kód van arduinohoz, próbálj esetleg másikat is.
Egyébként a zipben lévő .h és .cpp fájlból csináltâl librarit hozzá? Anélkül a kód nem fog futni.
(#) icserny válasza szikorapéter hozzászólására (») Aug 14, 2014 /
 
A belinkelt képen az látszik, hogy a DEBUGP makrót használó sorok szintaktikája nem tetszik a fordítónak. Például:
  1. DEBUGP(uint16_t x = (freq+1) * 2;
  2.     putstring("\n\rFreq: ");
  3.     putnum_ud(F_CPU/x);
  4.     );


Ha a TVB.ino, main.h és WORLDcodes.cpp egy mappában vannak, akkor nálam simán lefordul. A TVB.ino legelején célszerű definiálni a DEBUG szimnbólumot 0 vagy 1 értékkel. Például:
  1. #define DEBUG 1


Ha a fentiek helyett a README szerint javasolt elhelyezést használod (nem egy mappába teszed az összes fájlt, hanem a vázlatfüzetedben a libraries mappában nyitsz egy almappát TVB vagy WORLDcodes, vagy bármi más néven), akkor célszerű lenne a main.h helyett valami értelmesebb nevet használni!
(#) sunnysys hozzászólása Aug 14, 2014 /
 
Sziasztok!
Arduino 13-as ledjét szeretném világításra bírni Netbeansben írt Java programmal, de sehogy nem sikerül, és nem tudom, hol rontom el. Arduinoval már foglalkozok pár hónapja, de a Javat még csak most kezdtem. Tud valaki ebben segíteni? (Akár privátban is, mert nem tudom, hogy mennyire ON itt mondjuk egy Java kód.)
Köszi!
(#) icserny válasza sunnysys hozzászólására (») Aug 14, 2014 /
 
Idézet:
„nem tudom, hol rontom el.”
Ott, hogy nem adtál elégséges információt.
Hol futna a Java program, hogy néz ki? Mi fut az Arduino kártyán?

Ha PC-ről akarod vezérelni az Arduinót, akkor az egyik lehetőség a Firmata firmware letöltése és a PC oldali programozás Processing-ben (többé-kevésbé ez is Java...). Egy LED villogtató mintapélda, amit korábban már kipróbáltam így néz ki:

  1. import processing.serial.*;
  2. import cc.arduino.*;
  3.  
  4. Arduino arduino;
  5. int ledPin = 13;
  6.  
  7. void setup()
  8. {
  9.   //println(Arduino.list());
  10.   arduino = new Arduino(this, Arduino.list()[0], 57600);
  11.   arduino.pinMode(ledPin, Arduino.OUTPUT);
  12. }
  13.  
  14. void draw()
  15. {
  16.   arduino.digitalWrite(ledPin, Arduino.HIGH);
  17.   delay(50);
  18.   arduino.digitalWrite(ledPin, Arduino.LOW);
  19.   delay(100);
  20. }
(#) sunnysys válasza icserny hozzászólására (») Aug 14, 2014 /
 
Idézet:
„Hol futna a Java program, hogy néz ki? Mi fut az Arduino kártyán?”

Jogos, részletezem kicsit.

PC-n futna. Egy egyszerű Java program, amin 2 gomb látható (ON, OFF), amelyekre klikkelve az Arduino beépített led-je ki illetve bekapcsol.
Találtam egy példát a neten, ezt próbáltam meg átírni úgy, hogy GUI-ról vezérelhető legyen. Ebben a példában a Netbeans konzol ablakából vezérli az Arduinot. Stringből képzett karaktertömb első karakterét küldi át byteként (ha jól értem...). Ebből kiindulva képzeltem el megvalósítani a dolgot, de nekem mindkét gombnyomásra csak villan egyet a led, szóval, esélyes, hogy Javaban ronthattam el valamit.
Ami nekem gyanús valamiért az ő Java kódjában, hogy van benne egye ilyen végtelenített while(true) rész, aztán egy if(reader.hasNext()), ami a konzolon bejövő adatokat nézi. Talán ez lehet valahogy a megoldás?
Az Arduino kód egyszerű: serialon érkező karaktereket figyel, 0-ra felkapcsol, 1-re lekapcsol a led.
Köszi!
A hozzászólás módosítva: Aug 14, 2014
(#) icserny válasza sunnysys hozzászólására (») Aug 14, 2014 /
 
Abban a Java programban a lényeg a soros port megnyitása és a vezérlő karakterek kiküldése a serialPort.writeByte(...); meghívásával. Az értelmezett karakterek '0', '1', vagy '2'.

A mintaprogram vételen ciklusban (while(true) ) a rendszerbemenetről (konzol ablak?) olvas. Ehelyett a kiküldendő bájtokat bármilyen más módon is előállíthatod. Lényeg az, hogy csak akkor küldj ki újabb karaktert az Arduinonak, ha van új parancs.
(#) sunnysys válasza icserny hozzászólására (») Aug 14, 2014 /
 
Igen, én is így értelmeztem, ahogy Te. A rendszerbementről olvasást helyettesítettem azzal, hogy gombnyomásra küldjön adatot, de valahogy mégsem jó. Pár napja foglalkozok Javaval, nagyon könnyen elképzelhető, hogy abban hibázok valamit, de nem tudom sajnos, hogy mit. Lehet, hogy úgy írtam meg a Java programot, hogy nem csak gombnyomáskor küld adatot, csak valamiért nem látom, hogy küldi? (Bár, kiíratom a rendszeren, hogy mit küld ki, és elvileg 48-at és 49-et küld.
(#) erdeidominik1999 hozzászólása Aug 14, 2014 /
 
Sziasztok a gsm libraryban ugye van olyan, hogy gsm.SimpleRead() , de ez az értéket, amit olvasott a gsm egységről soros monitorba írja csak ki, hogyan lehetne azt megolhani, hogy ne csak oda írja, hanem pl.: gsm.SimpleRead(char valami) tehát egy változóba is bekerüljön, mert próbáltam átírni a gsm libet, sikerült is, nem is ír ki rá hibát, de nem működik. Ja és hardware serialon használom, de hiába csinálok serial1.read()-et mert a lib már használja a serial1-et, és ezért két helyen nem lehet használni.
(#) icserny válasza sunnysys hozzászólására (») Aug 14, 2014 /
 
Az Arduinonak mindegy, hogy ki küldi az adatot, tehát nyugodtan kipróbálhatod Hyperterminallal vagy az Arduino IDE terminál ablakában. Ha úgy működik, akkor a Java kódban van a hiba.
(#) sunnysys válasza icserny hozzászólására (») Aug 14, 2014 /
 
Rendben, köszönöm!

Ha valaki tudna segíteni ebben a kérdésben, esetleg rá tudna pillantani a Java kódomra, küldjön egy üzenetet, pls!
Köszi!
(#) Kovidivi hozzászólása Aug 14, 2014 /
 
Sziasztok!
Hogyan tudom egy for ciklussal az összes analóg lábat beolvasni?
Eddig eljutottam, de problémázik a fordító, hogy: " invalid conversion from 'char*' to 'uint8_t'
initializing argument 1 of 'int analogRead(uint8_t)'".
  1. double feszbeolvasas()
  2. {
  3. double tomb[cellaszam];
  4. long i=0;
  5. char temp[6][3]={"A0","A1","A2","A3","A4","A5"};
  6. for (i=0;i<cellaszam;i++)
  7.   {
  8.     Serial.print("Beolvasom a kovetkezot:");
  9.     Serial.println(temp[i]);
  10.     tomb[i]=analogRead(temp[i]);
  11.     Serial.print("Az eredmeny: \t");
  12.     Serial.print(tomb[i]);
  13.     Serial.println();
  14.   }
  15. return tomb[0];
  16. }

Köszönöm!
A hozzászólás módosítva: Aug 14, 2014
(#) szikorapéter hozzászólása Aug 15, 2014 /
 
Üdv. Olyan kérdésem volna hogy ATMega 88-20PU-val lehetséges fordulatszámmérőt építeni? Hasonlóra gondolok mint ami a kapcsolási rajzon van lentebb,csak ugye AVR-el. Ehhez még HEX file-om is van,esetleg azt átírva megoldható volna a program elkészítése? Volt már valakinek tapasztalata ilyesmivel? Segédmotoromra szeretném elkészíteni ezt az áramkört. A válaszokat előre is köszönöm.
(#) icserny válasza Kovidivi hozzászólására (») Aug 15, 2014 /
 
Gyors megoldásként analogRead(temp[i]); helyett ezt írd:

  1. tomb[i] = analogRead(i+14);


Ez így nem túl elegáns megoldás, és nem biztos, hogy mindegyik Arduino kártyával működik. Arduino Megán például i+54 kellene... Általánosabb megoldásként definiálj egy uint8_t tömböt és az elemekbe A0, A1, A2, stb-t írsz (idézőjel nélkül!). Például:

  1. uint8_t analog[] = {A0, A1, A2, A3, A4, A5};
  2. .....
  3. tomb[i] = analogRead(analog[i]);


(Az analog[] helyett valami értelmesebb tömbnevet is kitalálhatsz.)


Magyarázat:

A pins_arduino.h állományban definiálják az analóg csatornák azonosítóit. Ez hardverfüggő, kártyánként más lehet, ezért a variants mappában található. Arduino nano esetén például így néz ki:
  1. static const uint8_t A0 = 14;
  2. static const uint8_t A1 = 15;
  3. static const uint8_t A2 = 16;
  4. static const uint8_t A3 = 17;
  5. static const uint8_t A4 = 18;
  6. static const uint8_t A5 = 19;
  7. static const uint8_t A6 = 20;
  8. static const uint8_t A7 = 21;
A hozzászólás módosítva: Aug 15, 2014
(#) TavIR-AVR válasza szikorapéter hozzászólására (») Aug 15, 2014 /
 
Lehet, de nem Arduinoval. Az ATMega88 nem támogatott.
HEX módosítás nem 2 perc, lévén más chipről (sőt, más gyártóról és magról) van szó.
kb. Van egy olasz nyelvű hanganyagom és német gépelésre átrakható-e.
(#) csabeszq válasza TavIR-AVR hozzászólására (») Aug 15, 2014 /
 
Én azért utánaolvasnék a neten. Az Atmega8-ért nem rajongok túlzottan, ezért ha hasonló chipre lenne szükségem semmiképpen nem Atmega8-at vennék.

Nagyon hiányzik a rendes PCINT-róla (pin change interrupt), amit szinte majdnem minden projektem valamilyen formában használ.

Érdemes letölteni a netről az Atmega88-ra vonatkozó fájlokat Arduino-ra és hanyagolni az Atmega8-at.
(#) Kovidivi válasza icserny hozzászólására (») Aug 15, 2014 /
 
Szia!
Köszönöm szépen a választ!
Működik tökéletesen! A második megoldást választottam, így még univerzálisabb lett a program. Mindent beállíthatóvá teszek define-okon keresztül, ha kész a progi, felrakom.
Ami furcsa volt, hogy ha program elején definiálok tömböket, azt bárhonnan elérhetem, módosíthatom, nem kell oda-vissza adogatni return-nel, mint C-ben. Várom már, hogy megjöjjön az LCD, és azt is kipróbálhassam. Egyébként találtam egy oldalt, ahol szöveged fájlból olvassa be az adatokat az Arduino, és a szerint működik. Ez a fájl pedig a HDD-n van: D:\test.txt. Őrület ez a cucc. Ezek szerint fájlba is tud írni simán.
Bővebben: Link
(#) icserny válasza Kovidivi hozzászólására (») Aug 15, 2014 /
 
Idézet:
„Ezek szerint fájlba is tud írni simán.”
Mármint a PC-futó, Processing-ben írt alkalmazás... Miért is ne tudna?
(#) TavIR-AVR válasza csabeszq hozzászólására (») Aug 16, 2014 /
 
A kerdest feltevo irta a M88-at. Amugy M8, M168 ill M328 kozul ha valasztani kell: M328-as chipet. Az M8 az az Arduino indulasakor volt a DIP tok miatt jo valasztas.
Következő: »»   42 / 850
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