Fórum témák
- • Autóriasztó és központi zár
- • Audiofil, High End Audio
- • Borhűtő vezérlő panel
- • Vicces - mókás történetek
- • A műhely (bemutató topik, ahol az alkotások készülnek)
- • Számítógép hiba, de mi a probléma?
- • Menetszámolós tekercselőgép házilag
- • LED-es világítás
- • LED-es index
- • Kombikazán működési hiba
- • Hűtőgép probléma
- • Biciklilámpa / bringalámpa
- • Parkside akkuk javìtása
- • Arduino
- • Aszinkron motorok tekercselése
- • Erősítő mindig és mindig
- • Tranzisztorok helyettesítése
- • Elektromos távirányítós kapunyitó
- • Felajánlás, azaz ingyen elvihető
- • Analóg oszcilloszkóp javítása
- • Érdekességek
- • Szárítógép problémák
- • Li-Po - Li-ion akkumulátor és töltője
- • Kazettás magnó (deck) javítása
- • Opel Astra elektromos hibák
- • Fejhallgató erősítő
- • DSC riasztó
- • Forrasztási 1×1 forrasztástechnikai miértek
- • Elfogadnám, ha ingyen elvihető
- • Villanyszerelés
- • Orsós magnók
- • HESTORE.hu
- • Mosógép vezérlők és általános problémáik
- • Rendelés külföldről (eBay - Paypal)
- • Függvénygenerátor építése
- • Suzuki Swift elektronika
- • Autós erősítős kérdések, problémák
- • USB 3.2 HUB modul
- • GPS GSM modulok programozása
- • Teljesítmény -LED, powerLED (pl. Cree, Luxeon) vezérlése
- • Rádió adó építése
- • Klíma beszerelése, fűtés-hűtés házilag
- • Oszcilloszkóp vétel, mit gondoltok?
- • Alternativ HE találkozó(k)
- • Mozgásérzékelős lámpa
- • Mosogatógép hiba
- • Napelem alkalmazása a lakás energia ellátásában
- • Eberspacher állófűtés javítása
- • Sprint-Layout NYÁK-tervező
- • Rádióamatőrök topikja
- • Westen 240 Fi gázkazán hiba
- • Léptetőmotorok (vezérlése)
- • Nagy áramú pwm vezérlő építése
- • Videoton RT7300S
- • Crystal radio - detektoros rádió
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
ESP-01-re mik a lehetőségek, hogy az ardu kimaradjon?
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
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.
Közben azon agyalok, hogy hiszen a másodikhoz is kell külön ideiglenes tároló a "tempertek" az.
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.
Következő kérdésem, ha a mester arduino küld egy kérdőjel karaktert a soros vonalon a szolgának:
Akkor a szolga a:
if (Serial.available() = ?)
{}
else
{}
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?
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.
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:
é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
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?
> 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.)
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.
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.
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:
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:
char ch = '5';
if (5 == ch){
// amit igaz esetén csinálsz
}
else{
// amit false esetén csinálsz
}
Ha csak nem akarsz interrupt-ot tenni a változására, akkor kell.
setup(){
...
boolean F_pin = digitalRead(pinNumber);
...
}
loop(){
if (digitalRead(pinNumber) != F_pin){
F_pin = !F_pin;
//és amit itt csinálni akarsz.
}
}
A hozzászólás módosítva: Júl 22, 2017
Szerintem ezt akartad írni, 8. sorban: A hozzászólás módosítva: Júl 22, 2017
Igazából most egyenlőre így van:
char S_command = 0; // Parancs változó definiálása és nullázása
Programrész.:
if (Serial.available() > 0) // Megvizsgáljuk érkezett -e a soros vonalon parancs
{
S_command = Serial.read(); // ha igen, beolvassuk a parancsot és tárolóba tesszük,
if (S_command = "?") // ha kérdőjel érkezett, a következő feltételeket vizsgálunk:
if ( Voltage > (Voltage_temp+ 5) || Voltage < (Voltage_ temp-5) )
// Ha a cellafeszültség az előző méréshez képest változott,
Serial.println(Voltage); // akkor elküldjük az új adatot, egyébként nem küldünk semmit.
if ( Temperature > (Temperature_temp+ 5) || Temperature < (Temperature_ temp-5) )
// Ha a cellahőmérséklet az előző méréshez képest változott,
Serial.println(Temperature); // akkor elküldjük az új adatot, egyébként nem küldünk semmit.
}
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
Nem, értéket akarok váltani, így lesz true-ból false és vice versa.
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])
Egyébként ellenőrzés elfogadja mind a két verziót, persze akkor egy egyenlőjellel nem lenne jó...
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.
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 !!
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.
Azt hiszem, ezen még agyalok egy kicsit, hogy tudom implementálni...
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...
void enterSleep(void)
{
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode();
/** The program will continue from here. **/
/* First thing to do is disable sleep. */
sleep_disable();
}
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...
ebben bene van...
/*
1-14-2013
Spark Fun Electronics
Nathan Seidle
This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
When the ATtiny senses water between two pins, go crazy. Make noise, blink LED.
Created to replace the water sensor in my Nauticam 17401 underwater enclosure. The original board
ate up CR2032s, sorta kinda worked some of the time, and had pretty low quality assembly. Did I mention it goes for $100?!
We have the technology. We can make it better!
To use this code you must configure the ATtiny to run at 8MHz so that serial and other parts of the code work correctly.
We take a series of readings of the water sensor at power up. We then wait for a deviation of more than
100 from the average before triggering the alarm.
The alarm will run for a minimum of 2 seconds before shutting down.
The original board had the following measurements @ 3.21V:
In alarm mode: ~30mA with LED on and making sound
Off: 10nA. Really? Wow.
This firmware uses some power saving to get the average consumption down to ~50uA average. With a CR2032 @ 200mAh
this should allow it to run for 4,000hrs or 166 days. This is easily extended by increasing the amount of time
between water checks (currently 1 per second).
*/
#include <avr/sleep.h> //Needed for sleep_mode
#include <avr/wdt.h> //Needed to enable/disable watch dog timer
#include <SoftwareSerial.h>
SoftwareSerial mySerial(4, 3); // RX, TX
//Pin definitions for regular Arduino Uno (used during development)
/*const byte buzzer1 = 8;
const byte buzzer2 = 9;
const byte statLED = 10;
const byte waterSensor = A0;*/
//Pin definitions for ATtiny
const byte buzzer1 = 0;
const byte buzzer2 = 1;
const byte statLED = 4;
const byte waterSensor = A1;
//Variables
//This is the average analog value found during startup. Usually ~995
//When hit with water, the analog value will drop to ~400. A diff of 100 is good.
int waterAvg = 0;
int maxDifference = 100; //A diff of more than 100 in the analog value will trigger the system.
//This runs each time the watch dog wakes us up from sleep
ISR(WDT_vect) {
//Don't do anything. This is just here so that we wake up.
}
void setup()
{
pinMode(buzzer1, OUTPUT);
pinMode(buzzer2, OUTPUT);
pinMode(statLED, OUTPUT);
//pinMode(waterSensor, INPUT_PULLUP);
pinMode(2, INPUT); //When setting the pin mode we have to use 2 instead of A1
digitalWrite(2, HIGH); //Hack for getting around INPUT_PULLUP
digitalWrite(buzzer2, LOW);
mySerial.begin(9600);
mySerial.println("H2Ohno!");
//Take a series of readings from the water sensor and average them
waterAvg = 0;
for(int x = 0 ; x < 8 ; x++)
{
waterAvg += analogRead(waterSensor);
//During power up, blink the LED to let the world know we're alive
if(digitalRead(statLED) == LOW)
digitalWrite(statLED, HIGH);
else
digitalWrite(statLED, LOW);
delay(10);
}
waterAvg /= 8;
mySerial.print("Avg: ");
mySerial.println(waterAvg);
//During power up, beep the buzzer to verify function
alarmSound();
delay(10);
alarmSound();
digitalWrite(buzzer1, LOW);
digitalWrite(buzzer2, LOW);
digitalWrite(statLED, LOW);
//Power down various bits of hardware to lower power usage
set_sleep_mode(SLEEP_MODE_PWR_DOWN); //Power down everything, wake up from WDT
sleep_enable();
}
void loop()
{
ADCSRA &= ~(1<<ADEN); //Disable ADC, saves ~230uA
setup_watchdog(6); //Setup watchdog to go off after 1sec
sleep_mode(); //Go to sleep! Wake up 1sec later and check water
//Check for water
ADCSRA |= (1<<ADEN); //Enable ADC
int waterDifference = abs(analogRead(waterSensor) - waterAvg);
mySerial.print("Diff: ");
mySerial.println(waterDifference);
if(waterDifference > maxDifference) //Ahhh! Water! Alarm!
{
wdt_disable(); //Turn off the WDT!!
long startTime = millis(); //Record the current time
long timeSinceBlink = millis(); //Record the current time for blinking
digitalWrite(statLED, HIGH); //Start out with the uh-oh LED on
digitalWrite(buzzer2, HIGH);
//Loop until we don't detect water AND 2 seconds of alarm have completed
while(waterDifference > maxDifference || (millis() - startTime) < 2000)
{
alarmSound(); //Make noise!!
if(millis() - timeSinceBlink > 100) //Toggle the LED every 100ms
{
timeSinceBlink = millis();
if(digitalRead(statLED) == LOW)
digitalWrite(statLED, HIGH);
else
digitalWrite(statLED, LOW);
delay(500);
digitalWrite(buzzer2, LOW);
}
waterDifference = abs(analogRead(waterSensor) - waterAvg); //Take a new reading
mySerial.print("Read: ");
mySerial.println(analogRead(waterSensor));
} //Loop until we don't detect water AND 2 seconds of alarm have completed
digitalWrite(buzzer1, LOW);
digitalWrite(buzzer2, LOW);
digitalWrite(statLED, LOW); //No more alarm. Turn off LED
}
}
//This is just a unique (annoying) sound we came up with, there is no magic to it
//250us to 79us
void alarmSound(void)
{
// Toggle the buzzer at various speeds
for (byte x = 250 ; x > 70 ; x--)
{
for (byte y = 0 ; y < 3 ; y++)
{
// digitalWrite(buzzer2, HIGH);
digitalWrite(buzzer1, LOW);
delayMicroseconds(x);
// digitalWrite(buzzer2, LOW);
digitalWrite(buzzer1, HIGH);
delayMicroseconds(x);
}
}
}
//Sets the watchdog timer to wake us up, but not reset
//0=16ms, 1=32ms, 2=64ms, 3=128ms, 4=250ms, 5=500ms
//6=1sec, 7=2sec, 8=4sec, 9=8sec
void setup_watchdog(int timerPrescaler) {
if (timerPrescaler > 9 ) timerPrescaler = 9; //Limit incoming amount to legal settings
byte bb = timerPrescaler & 7;
if (timerPrescaler > 7) bb |= (1<<5); //Set the special 5th bit if necessary
//This order of commands is important and cannot be combined
MCUSR &= ~(1<<WDRF); //Clear the watch dog reset
WDTCR |= (1<<WDCE) | (1<<WDE); //Set WD_change enable, set WD enable
WDTCR = bb; //Set new watchdog timeout value
WDTCR |= _BV(WDIE); //Set the interrupt enable, this will keep unit from resetting after each int
}
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
" 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.
|
|