|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2024 11 24, 01:12. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Elektronika žaliems » Vandens slėgio daviklio klaidos
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
|
Vandens slėgio daviklio klaidos |
Parašytas: 2023 06 15, 20:58 |
|
|
|
Badas rašo: |
Pasitikslinimas: ar šitoj sąlygoj turi būti ||? Visur kitur kitur yra tik &&, tai gal čia klaida? Nesakau kad čia blogai, nesu įsigilinęs į biznio logiką, bet išskirtinumas krenta į akis.
Kodas: |
if ((buton1 == LOW) && ((buton2 == LOW) || (buton3 == HIGH)) && (buton5 == HIGH) && (buton6 == LOW) &&
(buton4 == HIGH) && (buton8 == 0)) //startas ''mygtukas ON''
{
digitalWrite (pirmyn, HIGH);
digitalWrite (atgal, LOW);
} |
|
Ne klaidos čia nėra. Taip turi buti,buton 3 imituoja paspausta mygtuką, kol pavara pasiekia JGP1 (jungiklis galinės padėties) |
|
|
|
|
|
|
Vandens slėgio daviklio klaidos |
Parašytas: 2023 06 15, 21:03 |
|
|
|
Beje, originalus kodas sunkiai, skaitomas, tai paprašiau ChatGPT truputį supaprastinau:
Kodas: |
#include <SoftwareSerial.h>
SoftwareSerial sim800l(9, 10); // RX,TX for Arduino and for the module it's TXD RXD, they should be inverted
String textMessage;
int pin_slegis = 8;
int pin_plude = 7;
int pin_mygtukas = 6;
int pin_jgp1 = 5;
int pin_jpp1 = 4;
int pin_griztamas = 14;
int pin_pirmyn = 15;
int pin_atgal = 16;
int pin_slegis_of = 17;
int pin_slegis_of1 = 18;
bool val_plude = 0;
bool val_mygtukas = 0;
bool val_griztamas = 0;
bool val_slegis = 0;
bool val_jgp1 = 0;
bool val_jpp1 = 0;
bool isjungta = 0;
void setup() {
pinMode(pin_mygtukas, INPUT);
pinMode(pin_plude, INPUT);
pinMode(pin_slegis, INPUT);
pinMode(pin_jgp1, INPUT);
pinMode(pin_jpp1, INPUT);
pinMode(pin_griztamas, INPUT);
pinMode(pin_pirmyn, OUTPUT);
pinMode(pin_atgal, OUTPUT);
pinMode(pin_slegis_of, OUTPUT);
pinMode(pin_slegis_of1, OUTPUT);
sim800l.begin(9600);
delay(10000);
sim800l.print("AT+CMGF=1\r");
delay(100);
sim800l.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
}
void loop() {
if (sim800l.available() > 0) {
textMessage = sim800l.readString();
delay(10);
}
if (textMessage.indexOf("Of") >= 0) {
isjungti();
}
if (isjungta)
return;
val_plude = digitalRead(pin_plude);
val_mygtukas = digitalRead(pin_mygtukas);
val_griztamas = digitalRead(pin_griztamas);
val_slegis = digitalRead(pin_slegis);
val_jgp1 = digitalRead(pin_jgp1);
val_jpp1 = digitalRead(pin_jpp1);
if (val_plude && val_mygtukas && !val_griztamas && val_jgp1 && !val_jpp1 && val_slegis) //isijungiame automatika
{
digitalWrite(pin_pirmyn, LOW);
digitalWrite(pin_atgal, LOW);
}
if (!val_plude && val_mygtukas && !val_griztamas && val_jgp1 && !val_jpp1 && val_slegis) //ipilame trasas
{
digitalWrite(pin_pirmyn, LOW);
digitalWrite(pin_atgal, LOW);
}
if (!val_plude == && !val_mygtukas || val_griztamas && val_jgp1 && !val_jpp1 && val_slegis) //startas ''mygtukas ON''
{
digitalWrite(pin_pirmyn, HIGH);
digitalWrite(pin_atgal, LOW);
}
if (!val_plude && val_mygtukas && !val_jgp1 && val_jpp1 && val_slegis) //atsidare trasos
{
digitalWrite(pin_pirmyn, LOW);
digitalWrite(pin_atgal, LOW);
}
if (val_plude && val_mygtukas && !val_jgp1 && val_jpp1 && val_slegis) //baigesi trasos
{
digitalWrite(pin_pirmyn, LOW);
digitalWrite(pin_atgal, HIGH);
}
if (val_plude && val_mygtukas && val_jgp1 && !val_jpp1 && val_slegis) //uzsidare trasos
{
digitalWrite(pin_pirmyn, LOW);
digitalWrite(pin_atgal, LOW);
}
if (val_slegis == LOW) {
isjungti();
}
}
void isjungti() {
if (isjungta)
return;
isjungta = true;
if (val_jpp1) {
digitalWrite(pin_atgal, HIGH);
digitalWrite(pin_pirmyn, LOW);
} else {
digitalWrite(pin_atgal, LOW);
digitalWrite(pin_pirmyn, LOW);
digitalWrite(pin_slegis_of, HIGH);
digitalWrite(pin_slegis_of1, HIGH);
delay(2000);
sendSMS();
}
}
void sendSMS()
{
sim800l.print("AT+CMGF=1\r"); //Set the module to SMS mode
delay(100);
sim800l.print("AT+CMGS=\"+37011111111\"\r"); //Your phone number don't forget to include your country code, example +212123456789"
delay(500);
sim800l.print("Variklis OF"); //This is the text to send to the phone number, don't make it too long or you have to modify the SoftwareSerial buffer
delay(500);
sim800l.print((char)26);// (required according to the datasheet)
delay(500);
sim800l.println();
delay(500);
}
|
Šito kodo netestavau, bet jeigu kas nors neveiks, tai bet kuris botas greitai patvarkys |
|
|
|
|
|
|
mano variantas |
Parašytas: 2023 06 15, 21:34 |
|
|
|
irgi netikrinau
Kodas: |
#include <SoftwareSerial.h>
SoftwareSerial sim800l(9, 10); // RX,TX for Arduino and for the module it's TXD RXD, they should be inverted
String textMessage;
const int PIN_SLEGIS = 8;
const int PIN_PLUDE = 7;
const int PIN_MYGTUKAS = 6;
const int PIN_JGP1 = 5;
const int PIN_JPP1 = 4;
const int PIN_GRIZTAMAS = 14;
const int PIN_PIRMYN = 15;
const int PIN_ATGAL = 16;
const int slegis_of = 17;
const int slegis_of1 = 18;
bool plude = 0;
bool mygtukas = 0;
bool griztamas = 0;
bool slegis = 0;
bool jgp1 = 0;
bool jpp1 = 0;
bool buton7 = 0;
bool buton8 = 0;
bool buton9 = 0;
void setup() {
sim800l.begin(9600);
delay(10000);
sim800l.print("AT+CMGF=1\r");
delay(100);
sim800l.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
pinMode (PIN_MYGTUKAS, INPUT);
pinMode (PIN_PLUDE, INPUT);
pinMode (PIN_SLEGIS, INPUT);
pinMode (PIN_JGP1, INPUT);
pinMode (PIN_JPP1, INPUT);
pinMode (PIN_GRIZTAMAS, INPUT);
pinMode (PIN_PIRMYN, OUTPUT);
pinMode (PIN_ATGAL, OUTPUT);
pinMode (slegis_of, OUTPUT);
pinMode (slegis_of1, OUTPUT);
}
void loop() {
if (sim800l.available() > 0) {
textMessage = sim800l.readString();
delay(10);
}
if (textMessage.indexOf("Of") >= 0) {
buton8 = 1;
isjungti();
}
plude = digitalRead(PIN_PLUDE);
mygtukas = digitalRead(PIN_MYGTUKAS);
griztamas = digitalRead(PIN_GRIZTAMAS);
slegis = digitalRead(PIN_SLEGIS);
jgp1 = digitalRead(PIN_JGP1);
jpp1 = digitalRead(PIN_JPP1);
if (plude && mygtukas && !griztamas && jgp1 && !jpp1 && slegis && !buton8)
//isijungiame automatika
{
digitalWrite (PIN_PIRMYN, LOW);
digitalWrite (PIN_ATGAL, LOW);
}
if (!plude && mygtukas && !griztamas && jgp1 && !jpp1 && slegis && !buton8)
//ipilame trasas
{
digitalWrite (PIN_PIRMYN, LOW);
digitalWrite (PIN_ATGAL, LOW);
}
if (!plude && (!mygtukas || griztamas) && jgp1 && !jpp1 && slegis && !buton8)
//startas ''MYGTUKAS ON''
{
digitalWrite (PIN_PIRMYN, HIGH);
digitalWrite (PIN_ATGAL, LOW);
}
if (!plude && mygtukas && !jgp1 && jpp1 && slegis && !buton8)
//atsidare trasos
{
digitalWrite (PIN_PIRMYN, LOW);
digitalWrite (PIN_ATGAL, LOW);
}
if (plude && mygtukas && !jgp1 && jpp1 && slegis && !buton8)
//baigesi trasos
{
digitalWrite (PIN_PIRMYN, LOW);
digitalWrite (PIN_ATGAL, HIGH);
}
if (plude && mygtukas && jgp1 && !jpp1 && slegis && !buton8)
//uzsidare trasos
{
digitalWrite (PIN_PIRMYN, LOW);
digitalWrite (PIN_ATGAL, LOW);
}
if (slegis == LOW)
{
isjungti();
}
}
void isjungti()
{
if (jpp1)
{
digitalWrite (PIN_ATGAL, HIGH);
digitalWrite (PIN_PIRMYN, LOW);
}
if (!jpp1)
{
digitalWrite (PIN_ATGAL, LOW);
digitalWrite (PIN_PIRMYN, LOW);
digitalWrite (slegis_of, HIGH);
digitalWrite (slegis_of1, HIGH);
delay(2000);
if (!buton7)
{
sendSMS() ;
buton7 = 1;
}
}
}
void sendSMS()
{
sim800l.print("AT+CMGF=1\r"); //Set the module to SMS mode
delay(100);
sim800l.print("AT+CMGS=\"+37011111111\"\r"); //Your phone number don't forget to include your country code, example +212123456789"
delay(500);
sim800l.print("Variklis OF"); //This is the text to send to the phone number, don't make it too long or you have to modify the SoftwareSerial buffer
delay(500);
sim800l.print((char)26);// (required according to the datasheet)
delay(500);
sim800l.println();
delay(500);
}
|
|
|
|
|
|
|
|
Vandens slėgio daviklio klaidos |
Parašytas: 2023 06 15, 21:42 |
|
|
|
Pakolkas parase galimai ukininkas, o mes tik koreguojame i geresne puse _gal_
Manau, kad papildyti komentarais nepamaisytu. |
|
|
|
|
|
Vandens slėgio daviklio klaidos |
Parašytas: 2023 06 16, 08:44 |
|
|
|
Badas rašo: |
Beje, mygtukai ir kiti įėjimai čia neapsaugoti nuo komutacijos triukšmų, ar nebuvai susidūręs su tokia problema? |
Visi įėjimai per 10k varža yra "patempti" į pliusą |
|
|
|
|
|
Vandens slėgio daviklio klaidos |
Parašytas: 2023 06 16, 08:49 |
|
|
|
Sutinku, kad Jūsų pateikti kodai tikrai yra užrašyti aiškiau ir tvarkingiau, bet jie nesprendžia klaidingo suveikimo problemos.
Aš vis vien esu linkęs pasilikti prie savo nuomonės, kad "slėgis" apklausinėti kas penkias sekundes, esamą rezultatą lyginti su prieš tai buvusiu, formuoti naują kintamajį ir tą kintamąjį naudoti likusiame kode |
|
|
|
|
|
Vandens slėgio daviklio klaidos |
Parašytas: 2023 06 16, 10:50 |
|
|
|
Mes ir nesprendeme verslo logikos klaidu, o tik taiseme iskaitomuma to ka prirasei pats.
Griztant prie slegio nustatymo - koks algoritmas turi buti?
Beje,paviesink arduino modeli, nes ju yra ivairi ir neviskai aisku kokiam cia parasyta. |
|
|
|
|
|
Vandens slėgio daviklio klaidos |
Parašytas: 2023 06 16, 11:10 |
|
|
|
ukininkas rašo: |
Sutinku, kad Jūsų pateikti kodai tikrai yra užrašyti aiškiau ir tvarkingiau, bet jie nesprendžia klaidingo suveikimo problemos. |
Tai mes dar nepradėjom spręsti . Va ateis savaitgalis, išgersim alaus...
Kodo aiškumas visu pirma reikalingas mums patiems, nes brūzgynuose apskritai neaišku kur ir kas.
Beje, su kokiu softu programuoji, Arduino IDE? |
|
|
|
|
|
Vandens slėgio daviklio klaidos |
Parašytas: 2023 06 16, 14:44 |
|
|
|
Kaip manote, gal toks intarpas suveiktu
Kodas: |
myTime = millis();
if (myTime = 5000){ //atliekame patikrinima kas 5 s
buton4 = digitalRead(slegis); //signalas iš komparatoriaus 0 arba 1
new_data = buton4;
if((new_data == 0) && (old_data == 0)){ //lyginame nauja reikšme su senaja, startinė pozicija loginis 1
daviklis = LOW;
}
else daviklis = HIGH;
old_data = new_data;
myTime = 0;
} |
|
|
|
|
|
|
Vandens slėgio daviklio klaidos |
Parašytas: 2023 06 16, 16:24 |
|
|
|
Pateik daugiau detalių: kokia pavara (modelis ir nustatymai), daviklio modelis ir pajungimo schema (gali pieštą iš rankos), koks arduino valdiklis ir aprišimas. |
|
|
|
|
|
|
Vandens slėgio daviklio klaidos |
Parašytas: 2023 06 17, 11:26 |
|
|
|
AlgisL rašo: |
Pateik daugiau detalių: kokia pavara (modelis ir nustatymai), daviklio modelis ir pajungimo schema (gali pieštą iš rankos), koks arduino valdiklis ir aprišimas. |
Suprantu, kad Jūs esate savo srities profai ir už tai pagarba Jums, bet pas mane, kaip ir minėjau yra tik žiemos laisvalaikio užsiėmimas, kad smegenis pamankštinti.
Pavara padaryta yra iš automobilio langų valytuvo varikliuko ir ilgasriegio varžto , pradinės padėties ir galinės padėties jungikliai lygtai iš mikrobangės. Arduino Nano3, slėgio daviklis "Gravity, analoginis vandens slėgio jutiklis, DFRobot SEN0257".
Idedu kodo fragmentą
Kodas: |
currentTime = millis();
if (currentTime - previousTime >= 5000){ //atliekame patikrinima kas 5 s
buton4 = digitalRead(slegis); //signalas iš komparatoriaus 0 arba 1
new_data = buton4;
if((new_data == 0) && (old_data == 0)){ //lyginame nauja reikšme su senaja, startinė pozicija loginis 1
daviklis = LOW;
}
else daviklis = HIGH;
old_data = new_data;
previousTime = currentTime;
} |
Labiausiai mane domina, ar teisinga logika, ar tikrins "slegis" daviklį tik kas 5 sekundes ir lygins su anksčiau buvusia reikšme. Ir gavus du loginius 0 formuos kintamaji "daviklis" su reikšme LOW.
Visais kitais atvejais kintamasis "daviklis" turėtu būti HIGH |
|
|
|
|
|
|
|
Vandens slėgio daviklio klaidos |
Parašytas: 2023 06 17, 15:36 |
|
|
|
Visu pirma - komparatoriaus darba valdo:
AIN0 (PD6) - D6 pin "+"
AIN1 (PD7) - D7 pin "-"
todel teks pataisyti elektrine schema...
Kodas: |
boolean ACO_status = 0; // comparatoriaus busena
void setup() {
bitClear(ACSR, ACD); // ijungiame komparatoriu
bitClear(ADCSRB, ACME); // isjungiame analogini multipleksoriu
DIDR1 |= (bit(AIN1D) | bit(AIN0D)); // atjungiame skaitmenines grandines nuo komparatoriaus
ACO_status = bitRead(ACSR, ACO) != 0; // comparatoriaus statusas
}
void loop() {
ACO_status = bitRead(ACSR, ACO) != 0; // comparatoriaus statusas
}
|
Isnaudoti AIN1 galima per analogini multipleksoriu, bet tik analoginiams iejimams.
Atsiprasau, seniai bekodinau ir pamirsau nuverciant bita panaudoti inversija....
Pakoregavau pagal arduino ideologija, bus gal kiek aiskiau. |
|
Paskutinį kartą redagavo AlgisL, 2023 06 19, 14:39. Redaguota 3 kartus(ų) |
|
|
|
|
|
Google paieška forume |
|
|
Naujos temos forume |
|
|
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
|
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
|
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
|
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
|
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
|
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
|
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
|
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
|
|
|