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   366 / 838
(#) atus1981 válasza sirály12 hozzászólására (») Júl 22, 2017 /
 
ESP-01-re mik a lehetőségek, hogy az ardu kimaradjon?
(#) RoliNyh hozzászólása Júl 22, 2017 /
 
Os, köszi, kipróbálom mindkettőt. Remélem majd a HW -ben is működik...
De szerintem amásodik verzió lesz abefutó, abban nem kell használni +1 ideiglenes tárolót.
A hozzászólás módosítva: Júl 22, 2017
(#) tbarath válasza atus1981 hozzászólására (») Júl 22, 2017 /
 
Az ESP01-nél 8 lábad van: GND, VCC, chip-enable (amit VCC-re kell húznod), reset, soros RX és TX, és 2 digit pin.
Ha ez elég, akkor elég. Ha nem, akkor vagy használod soros wifi adapterként ahogy tervezted, vagy választasz más ESP eszközt.
(#) RoliNyh hozzászólása Júl 22, 2017 /
 
Közben azon agyalok, hogy hiszen a másodikhoz is kell külön ideiglenes tároló a "tempertek" az.
(#) berkesandor válasza berkesandor hozzászólására (») Júl 22, 2017 /
 
Működik az átváltás amit tbarath írt, csak figyelmetlen voltam szokás szerint.

Olyan kérdésem lenne: RTC -vel fel tudom ébreszteni az arduino-t egy adott időbe?
Akkumulátorról működő szerkezetet szeretnék csinálni, ami egy nap csak egyszer mér, minél hosszabb üzemidőt szeretnék egy feltöltéssel.
(#) RoliNyh hozzászólása Júl 22, 2017 /
 
Következő kérdésem, ha a mester arduino küld egy kérdőjel karaktert a soros vonalon a szolgának:
  1. Serial.print("?");


Akkor a szolga a:
  1. if (Serial.available() = ?)
  2. {}
  3. else
  4. {}


Serial.available fügvénnyel tudja e azonnal vizsgálni, hogy kérdőjel jött e,
vagy az csak egy 0 -át vagy -1 -et ad vissza, és ez után még külön be kell olvasni és vizsgálni mi jött?

Szóval, ha jön egy kérdőjel megy az if ág, ha nem jön semmi, vagy más jön, megy az else ág?
(#) RoliNyh válasza szeg76 hozzászólására (») Júl 22, 2017 /
 
Ok, de nekem ebből nem jött le, hogy milyen értéked ad vissza afüggvény.
Mindenesetre már megcsináltam a másik módszerrel akkor.
(#) RoliNyh hozzászólása Júl 22, 2017 /
 
Viszont lenne egy új kérdés, egy logikai változó változásának eldöntéséhez is kell külön tároló?
Magyarul azt kellene eldönteni, hogy:

  1. boolean F_pin = LOW;


értéke megváltozott -e az előzőhöz képest? Tehát ha LOW volt, váltott -e HIGH -ba,
és fordítva, ha HIGH volt, váltott -e LOW -ra?
A hozzászólás módosítva: Júl 22, 2017
(#) atus1981 válasza tbarath hozzászólására (») Júl 22, 2017 /
 
2 digit pin elég, mert egy számlálót szeretnék, amihez az egyik a léptetés, a másik meg a nullázás lenne. Nagyon nem vágom ezt az esp dolgot, viszont az érdekelne, hogy mekkora sketch fér el benne?
(#) vargham válasza atus1981 hozzászólására (») Júl 22, 2017 /
 
> mekkora sketch fér el benne?
A mellé rakott flash IC-től függ. 512 kB-tól felfele. (Egy UNO-ban 32 kB van fixen.)
(#) tbarath válasza berkesandor hozzászólására (») Júl 22, 2017 /
 
Itt van olyan hogy setalarm: Bővebben: Link
A DS3231 nem drága, ezzel elvileg felébresztheted az arduino-t.

De még sose csináltam ilyet, csak 2 perc guglizás dobta ezt.
(#) atus1981 válasza vargham hozzászólására (») Júl 22, 2017 /
 
Az nem is olyan rossz!
Azt hiszem jobban beleásom magam ebbe a dologba.
Rendeltem is egy ilyen készletet, remélem tudom flash-elni és programozni.
Köszi a segítséget.
(#) tbarath válasza RoliNyh hozzászólására (») Júl 22, 2017 / 1
 
Idézet:
„Parameters

none

Returns

the number of bytes available to read”

Bővebben: Link

Más: C szintakszisban a = és a == nagyon más, az első az értékadás, a másik pedig az egyenlőséget vizsgáló operátor.
Szóval amit írtál:
  1. if (Serial.available() = ?)

Ez azt jelenti, hogy függvény visszatérési értékének próbál értéket adni, mégpedig egy kérdőjelet. Ami még csak nem is '?' vagy "?", szóval nem string vagy char, hanem jó eséllyel egy undefined valami. Hogy erre mit reagál a fordító azt nem tudom, jó eséllyel syntax error-t dob, de az is lehet hogy az értékadás sikerességétől függően ágazik el.
A fv. visszatérési értékének _szerintem_ nem tud értéket adni, főleg ha a típus se felel meg, de változónál egy ilyennek könnyen belefutsz a késbe: mindig true lesz, és még a változód értékét és felülcsapod.

Ezért célszerű inkább így vizsgálni:
  1. char ch = '5';
  2. if (5 == ch){
  3. // amit igaz esetén csinálsz
  4. }
  5. else{
  6. // amit false esetén csinálsz
  7. }
(#) tbarath válasza RoliNyh hozzászólására (») Júl 22, 2017 /
 
Ha csak nem akarsz interrupt-ot tenni a változására, akkor kell.
  1. setup(){
  2. ...
  3. boolean F_pin = digitalRead(pinNumber);
  4. ...
  5. }
  6. loop(){
  7.    if (digitalRead(pinNumber) != F_pin){
  8.       F_pin = !F_pin;
  9.       //és amit itt csinálni akarsz.
  10.    }
  11. }
A hozzászólás módosítva: Júl 22, 2017
(#) kapu48 válasza tbarath hozzászólására (») Júl 22, 2017 /
 
Szerintem ezt akartad írni, 8. sorban:
  1. F_pin = F_pin;
A hozzászólás módosítva: Júl 22, 2017
(#) RoliNyh válasza tbarath hozzászólására (») Júl 22, 2017 /
 
Igazából most egyenlőre így van:

  1. char S_command = 0;    // Parancs változó definiálása és nullázása
  2. Programrész.:
  3.   if (Serial.available() > 0)    // Megvizsgáljuk érkezett -e a soros vonalon parancs
  4.     {
  5.     S_command = Serial.read();    // ha igen, beolvassuk a parancsot és tárolóba tesszük,
  6.     if (S_command = "?")    // ha kérdőjel érkezett, a következő feltételeket vizsgálunk:
  7.    
  8.       if ( Voltage > (Voltage_temp+5) ||  Voltage  < (Voltage_temp-5) )    
  9. // Ha a cellafeszültség az előző méréshez képest változott,
  10.         Serial.println(Voltage);    // akkor elküldjük az új adatot, egyébként nem küldünk semmit.
  11.  
  12.       if ( Temperature > (Temperature_temp+5) ||  Temperature  < (Temperature_temp-5) )    
  13. // Ha a cellahőmérséklet az előző méréshez képest változott,
  14.         Serial.println(Temperature);    // akkor elküldjük az új adatot, egyébként nem küldünk semmit.
  15.     }

Nem tudom, ez úgy menne -e ahogy gondolom...
Szóval a lényeg az lenne, hogyha a mester ardu küld egy kérdőjelet, akkor a szolga megvizsgálja,
változott -e a cellafeszültség és a cellahőmérséklet az előző méréshez képest.
Ha nem változott (a meghatározott értéken belül van), nem küld semmit vissza, ha változott, akkor elküldi az új értéket, de mindig csak azt, amelyík változott.

És ebben még a fet be vagy kikapcsolt állapot vizsgálata nincs benne...
A hozzászólás módosítva: Júl 22, 2017
(#) tbarath válasza kapu48 hozzászólására (») Júl 22, 2017 /
 
Nem, értéket akarok váltani, így lesz true-ból false és vice versa.
(#) tbarath válasza RoliNyh hozzászólására (») Júl 22, 2017 /
 
Hát próbáld ki, nekem nincs kedvem most elővenni egy arduino-t.
Már ha lefordul, mert egy char-nak akarsz string értéket adni, igaz egy karakteres string-et, de akkor is. (invalid conversion from 'const char*' to 'char' [-fpermissive])
(#) RoliNyh válasza RoliNyh hozzászólására (») Júl 22, 2017 /
 
Vagyis pontosabban így.:
  1. if (S_command == "?")
(#) RoliNyh válasza tbarath hozzászólására (») Júl 22, 2017 /
 
Egyébként ellenőrzés elfogadja mind a két verziót, persze akkor egy egyenlőjellel nem lenne jó...
(#) RoliNyh válasza tbarath hozzászólására (») Júl 22, 2017 /
 
Igazából az F_pin változóm nem lábról kerül beolvasásra, az ugyanis egy kimenet, az kapcsolja be a fetet a túlfeszültség elérésekor, és ki ha megfelelő a feszültség. Szóval magában a programban keletkezik a magas vagy alacsony szint. Azt kellene vizsgáli, hogy volt -e változás ebben a változóban. És a lényeg itt is az volna, hogy ha nincs változás, akkor ne küldje újra ugyanazt az értéket a szolga a mester felé, csak akkor hogyha volt változás.
(#) kissi válasza RoliNyh hozzászólására (») Júl 22, 2017 /
 
Szia!
Idézet:
„Szóval magában a programban keletkezik a magas vagy alacsony szint. Azt kellene vizsgáli, hogy volt -e változás ebben a változóban. És a lényeg itt is az volna, hogy ha nincs változás, akkor ne küldje újra ugyanazt az értéket a szolga a mester felé, csak akkor hogyha volt változás.”

Akkor ezt te idézed elő a programban ? Ha igen, akkor csak akkor küld ki az értéket, ha változtattál ! Irányítsd úgy a programodat, hogy ha nincs részedről változtatás, akkor ne menjen a küldő sorra, hagyja ki !!
(#) tbarath válasza RoliNyh hozzászólására (») Júl 23, 2017 /
 
Ha te állítod a szintet, akkor csinálj magadnak egy változót amit átírsz amikor változtatsz. A kiírató rutinban akkor elég ezt vizsgálni, és kiiratás után újra alaphelyzetbe hozni.
Vagy irasd ki állításkor, ahogy kissi is javasolta.
(#) RoliNyh hozzászólása Júl 24, 2017 /
 
Azt hiszem, ezen még agyalok egy kicsit, hogy tudom implementálni...
(#) berkesandor hozzászólása Júl 24, 2017 /
 
https://github.com/FabioCuomo/FabioCuomo-DS3231
Ezt a példát szeretném használni a távmérős projektemhez.
Be lehet ez állítani, hogy többször éledjen fel egy nap?
(#) RoliNyh hozzászólása Júl 24, 2017 /
 
Sziasztok!

Következő kérdésem az volna, attiny45/85 -öt hogy lehet sleep üzemmódba küldeni?
Ezt a kódrészt beírva.: Attiny Sleep mode...
  1. void enterSleep(void)  
  2.       {  
  3.       set_sleep_mode(SLEEP_MODE_PWR_DOWN);  
  4.       sleep_enable();  
  5.       sleep_mode();  
  6.       /** The program will continue from here. **/  
  7.       /* First thing to do is disable sleep. */  
  8.       sleep_disable();  
  9.       }


A következő hibaüzenetet adja.:
Idézet:

Arduino: 1.8.3 (Windows 7), Alaplap:"ATtiny25/45/85, Disabled, CPU, ATtiny45, 8 MHz (internal), B.O.D. Disabled"

D:\_Arduino_1.8.3_\Projekt\Li_IonCellBalancerMaster\Li_IonCellBalancerMaster.ino: In function 'void loop()':

Li_IonCellBalancerMaster:94: error: a function-definition is not allowed here before '{' token

{

^

Li_IonCellBalancerMaster:102: error: expected '}' at end of input

}

^

exit status 1
a function-definition is not allowed here before '{' token

Ennek a jelentésnek több információja lehetne
a "Bővebb kimenet mutatása fordításkor"
opció engedélyezésével a Fájl -> Beállítások-ban.


Valami zárójelezési probléma van, csak nem jövök rá mi...
(#) jeges válasza RoliNyh hozzászólására (») Júl 24, 2017 /
 
ebben bene van...

  1. /*
  2.  1-14-2013
  3.  Spark Fun Electronics
  4.  Nathan Seidle
  5.  
  6.  This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
  7.  
  8.  When the ATtiny senses water between two pins, go crazy. Make noise, blink LED.
  9.  
  10.  Created to replace the water sensor in my Nauticam 17401 underwater enclosure. The original board
  11.  ate up CR2032s, sorta kinda worked some of the time, and had pretty low quality assembly. Did I mention it goes for $100?!
  12.  We have the technology. We can make it better!
  13.  
  14.  To use this code you must configure the ATtiny to run at 8MHz so that serial and other parts of the code work correctly.
  15.  
  16.  We take a series of readings of the water sensor at power up. We then wait for a deviation of more than
  17.  100 from the average before triggering the alarm.
  18.  
  19.  The alarm will run for a minimum of 2 seconds before shutting down.
  20.  
  21.  The original board had the following measurements @ 3.21V:
  22.  In alarm mode: ~30mA with LED on and making sound
  23.  Off: 10nA. Really? Wow.
  24.  
  25.  This firmware uses some power saving to get the average consumption down to ~50uA average. With a CR2032 @ 200mAh
  26.  this should allow it to run for 4,000hrs or 166 days. This is easily extended by increasing the amount of time
  27.  between water checks (currently 1 per second).
  28.  
  29.  */
  30.  
  31. #include <avr/sleep.h> //Needed for sleep_mode
  32. #include <avr/wdt.h> //Needed to enable/disable watch dog timer
  33.  
  34. #include <SoftwareSerial.h>
  35.  
  36. SoftwareSerial mySerial(4, 3); // RX, TX
  37.  
  38. //Pin definitions for regular Arduino Uno (used during development)
  39. /*const byte buzzer1 = 8;
  40.  const byte buzzer2 = 9;
  41.  const byte statLED = 10;
  42.  const byte waterSensor = A0;*/
  43.  
  44. //Pin definitions for ATtiny
  45. const byte buzzer1 = 0;
  46. const byte buzzer2 = 1;
  47. const byte statLED = 4;
  48. const byte waterSensor = A1;
  49.  
  50. //Variables
  51.  
  52. //This is the average analog value found during startup. Usually ~995
  53. //When hit with water, the analog value will drop to ~400. A diff of 100 is good.
  54. int waterAvg = 0;
  55. int maxDifference = 100; //A diff of more than 100 in the analog value will trigger the system.
  56.  
  57. //This runs each time the watch dog wakes us up from sleep
  58. ISR(WDT_vect) {
  59.   //Don't do anything. This is just here so that we wake up.
  60. }
  61.  
  62. void setup()
  63. {
  64.   pinMode(buzzer1, OUTPUT);
  65.   pinMode(buzzer2, OUTPUT);
  66.   pinMode(statLED, OUTPUT);
  67.  
  68.   //pinMode(waterSensor, INPUT_PULLUP);
  69.   pinMode(2, INPUT); //When setting the pin mode we have to use 2 instead of A1
  70.   digitalWrite(2, HIGH); //Hack for getting around INPUT_PULLUP
  71. digitalWrite(buzzer2, LOW);
  72.   mySerial.begin(9600);
  73.   mySerial.println("H2Ohno!");
  74.  
  75.   //Take a series of readings from the water sensor and average them
  76.   waterAvg = 0;
  77.   for(int x = 0 ; x < 8 ; x++)
  78.   {
  79.     waterAvg += analogRead(waterSensor);
  80.  
  81.     //During power up, blink the LED to let the world know we're alive
  82.     if(digitalRead(statLED) == LOW)
  83.       digitalWrite(statLED, HIGH);
  84.  
  85.      
  86.     else
  87.       digitalWrite(statLED, LOW);
  88.      
  89.  
  90.     delay(10);
  91.   }
  92.   waterAvg /= 8;
  93.  
  94.   mySerial.print("Avg: ");
  95.   mySerial.println(waterAvg);
  96.  
  97.   //During power up, beep the buzzer to verify function
  98.   alarmSound();
  99.   delay(10);
  100.   alarmSound();
  101.  
  102.   digitalWrite(buzzer1, LOW);
  103.   digitalWrite(buzzer2, LOW);
  104.   digitalWrite(statLED, LOW);
  105.  
  106.   //Power down various bits of hardware to lower power usage  
  107.   set_sleep_mode(SLEEP_MODE_PWR_DOWN); //Power down everything, wake up from WDT
  108.   sleep_enable();
  109.  
  110. }
  111.  
  112. void loop()
  113. {
  114.   ADCSRA &= ~(1<<ADEN); //Disable ADC, saves ~230uA
  115.   setup_watchdog(6); //Setup watchdog to go off after 1sec
  116.   sleep_mode(); //Go to sleep! Wake up 1sec later and check water
  117.  
  118.   //Check for water
  119.   ADCSRA |= (1<<ADEN); //Enable ADC
  120.   int waterDifference = abs(analogRead(waterSensor) - waterAvg);
  121.   mySerial.print("Diff: ");
  122.   mySerial.println(waterDifference);
  123.  
  124.   if(waterDifference > maxDifference) //Ahhh! Water! Alarm!
  125.   {
  126.     wdt_disable(); //Turn off the WDT!!
  127.    
  128.     long startTime = millis(); //Record the current time
  129.     long timeSinceBlink = millis(); //Record the current time for blinking
  130.     digitalWrite(statLED, HIGH); //Start out with the uh-oh LED on
  131.     digitalWrite(buzzer2, HIGH);
  132.  
  133.     //Loop until we don't detect water AND 2 seconds of alarm have completed
  134.     while(waterDifference > maxDifference || (millis() - startTime) < 2000)
  135.     {
  136.       alarmSound(); //Make noise!!
  137.  
  138.       if(millis() - timeSinceBlink > 100) //Toggle the LED every 100ms
  139.       {
  140.         timeSinceBlink = millis();
  141.  
  142.         if(digitalRead(statLED) == LOW)
  143.           digitalWrite(statLED, HIGH);
  144.         else
  145.           digitalWrite(statLED, LOW);
  146.           delay(500);
  147.           digitalWrite(buzzer2, LOW);
  148.       }
  149.  
  150.  
  151.    
  152.  
  153.       waterDifference = abs(analogRead(waterSensor) - waterAvg); //Take a new reading
  154.  
  155.       mySerial.print("Read: ");
  156.       mySerial.println(analogRead(waterSensor));
  157.     } //Loop until we don't detect water AND 2 seconds of alarm have completed
  158.  
  159.     digitalWrite(buzzer1, LOW);
  160.     digitalWrite(buzzer2, LOW);
  161.     digitalWrite(statLED, LOW); //No more alarm. Turn off LED
  162.   }
  163.  
  164.  
  165. }
  166.  
  167. //This is just a unique (annoying) sound we came up with, there is no magic to it
  168. //Comes from the Simon Says game/kit actually: https://www.sparkfun.com/products/10547
  169. //250us to 79us
  170. void alarmSound(void)
  171. {
  172.   // Toggle the buzzer at various speeds
  173.   for (byte x = 250 ; x > 70 ; x--)
  174.   {
  175.     for (byte y = 0 ; y < 3 ; y++)
  176.     {
  177.      // digitalWrite(buzzer2, HIGH);
  178.       digitalWrite(buzzer1, LOW);
  179.       delayMicroseconds(x);
  180.  
  181.      // digitalWrite(buzzer2, LOW);
  182.       digitalWrite(buzzer1, HIGH);
  183.       delayMicroseconds(x);
  184.     }
  185.   }
  186. }
  187.  
  188. //Sets the watchdog timer to wake us up, but not reset
  189. //0=16ms, 1=32ms, 2=64ms, 3=128ms, 4=250ms, 5=500ms
  190. //6=1sec, 7=2sec, 8=4sec, 9=8sec
  191. void setup_watchdog(int timerPrescaler) {
  192.  
  193.   if (timerPrescaler > 9 ) timerPrescaler = 9; //Limit incoming amount to legal settings
  194.  
  195.   byte bb = timerPrescaler & 7;
  196.   if (timerPrescaler > 7) bb |= (1<<5); //Set the special 5th bit if necessary
  197.  
  198.   //This order of commands is important and cannot be combined
  199.   MCUSR &= ~(1<<WDRF); //Clear the watch dog reset
  200.   WDTCR |= (1<<WDCE) | (1<<WDE); //Set WD_change enable, set WD enable
  201.   WDTCR = bb; //Set new watchdog timeout value
  202.   WDTCR |= _BV(WDIE); //Set the interrupt enable, this will keep unit from resetting after each int
  203. }
(#) RoliNyh válasza jeges hozzászólására (») Júl 24, 2017 /
 
Ez most kissé zavaros számomra, de azt hiszem, nálam az volt abaj, hogy az egész egy függvénybe van foglalva. Szóval ha kitörlöm az 1, 2, és 9 sorokat, úgy elfogadja a fordító is.
Bár, hogy működik -e azt nem tudom...

De azt hiszem a szolga kód mostmár kész, hozzáláthatok a mester kódnak.
A hozzászólás módosítva: Júl 24, 2017
(#) tbarath válasza RoliNyh hozzászólására (») Júl 24, 2017 /
 
" In function 'void loop()':"

A saját függvényedet (ez lenne az enterSleep() ha jól értem) a setup/loop függvényeken kívül kellene elhelyezned.
Következő: »»   366 / 838
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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