Fórum témák
- • Audiofil, High End Audio
- • Általános antennás kérdések, válaszok
- • ZC-18 kazán
- • Quantum véletlenszámgenerátor
- • Multiméter problémák
- • Kombikazán működési hiba
- • Érdekességek
- • Villanymotor
- • Klíma szervizelés, javítás
- • Lemezjátszó beállítása, javítása
- • Felajánlás, azaz ingyen elvihető
- • Alternativ HE találkozó(k)
- • LCD kijelző vezérlése, életre keltése
- • Erősítő mindig és mindig
- • V-FET és SIT erősítő kapcsolások
- • Vicces - mókás történetek
- • Quad 405-ös erősítő tapasztalatok és hibák
- • LM1875, LM3875, LM3886, stb. TI végerősítők
- • 3D nyomtatás
- • Kondenzátor feltöltés
- • Villanyszerelés
- • XBOX kiegészítők, javítások átalakítások
- • Erősítő építése elejétől a végéig
- • Multiméter - miért, milyet?
- • TV hiba, mi a megoldás?
- • EMG TR-0463 funkciógenerátor
- • Mosógép vezérlők és általános problémáik
- • Áramlökés határoló lágyindító
- • Állandómágneses motorok és generátorok építése
- • Fejhallgató erősítő
- • Műveleti erősítő
- • Kaputelefon
- • PLC kérdések
- • Gázkazán vezérlő hibák
- • Napelem alkalmazása a lakás energia ellátásában
- • Előerősítő
- • Hegesztő inverter javítás
- • HESTORE.hu
- • Li-Po - Li-ion akkumulátor és töltője
- • Arduino
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • Villanypásztor
- • Rendelés külföldről (eBay - Paypal)
- • Kapcsolóüzemű táp 230V-ról
- • Csere-bere
- • Savas akkumulátor
- • Elfogadnám, ha ingyen elvihető
- • Áramváltó trafóval áram mérés, hogy?
- • Elektromos sertéskábító
- • DC motor/lámpa PWM szabályzása
- • IMI villanymotor
- • Műhelyünk felszerelése, szerszámai
- • Codefon kaputelefon
- • PIC - Miértek, hogyanok haladóknak
- • Muzeális készülékek-alkatrészek restaurálása
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Sziasztok!
Az alábbi kóddal küzdök. Megérkezett a HC-05 modul, amit konfigoltam is, kapcsolat rendben van az OBD eszközzel. Gépről küldök soros porton egy parancsot az OBD eszköznek: "ATI" jön is a válasz: "ATIELM327 v2.1>" és mégsem lép tovább az alábbi program:
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX | TX
int CmdCount=1;
byte inData;
char inChar;
String BuildINString="";
String DisplayString="";
long DisplayValue;
String SentMessage="";
int ByteCount=0;
long A;
int B;
int WorkingVal;
String WorkingString="";
int MenuID=0;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup()
{
BTSerial.begin(9600);
BTSerial.println("AT+ORGL");
delay(1000);
BTSerial.println("AT+RMAAD");
delay(1000);
BTSerial.println("AT+ROLE=1");
delay(1000);
BTSerial.println("AT+NAME=MYBLUE");
delay(1000);
BTSerial.println("AT+CMODE=0");
delay(1000);
BTSerial.println("AT+BIND=8818,56,6898eb");
//BTSerial.println("AT+BIND=380b,40,71f983");
delay(1000);
BTSerial.println("AT+PSWD=1234");
delay(1000);
//BTSerial.println("AT+UART=9600,0,0");
BTSerial.println("AT+BAUD4");
delay(1000);
BTSerial.println("AT+INIT");
lcd.begin(16, 2);
lcd.setCursor(0, 0);
Bootup();
Retry:
lcd.setCursor(0, 0);
lcd.print("Connecting...... ");
lcd.setCursor(0, 1);
lcd.print(" ");
delay(500);
SentMessage = "ATI";
BTSerial.println("ATI");delay(500);ReadData();
if (BuildINString.substring(1,7)=="ATIELM327 v2.1>")
{
lcd.setCursor(0, 0);
lcd.print("Welcome... ");
lcd.setCursor(0, 1);
lcd.print("Connection OK ");
delay(1500);
}
else
{
lcd.setCursor(0, 0);
lcd.print("Error ");
lcd.setCursor(0, 1);
lcd.print("No Connection! ");
delay(1500);
goto Retry;
}
delay(1500);
}
void loop() {
int x;
x = analogRead (0);
//Serial.println(x);
lcd.setCursor(10,1);
if (x > 800 and x < 820){lcd.print ("Select ");}
if (x > 450 and x < 590){if (MenuID>0){MenuID--;}delay(250);}//Left
if (x > 400 and x < 415){lcd.print ("Down ");}
if (x > 190 and x < 215){lcd.print ("Up ");}
if (x > -10 and x < 10){if (MenuID<7){MenuID++;}delay(250);} //Right
if (MenuID==0){lcd.setCursor(0, 0);lcd.print("Motorhomerseklet ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 05";BTSerial.println("01 05");delay(300);ReadData();}
if (MenuID==1){lcd.setCursor(0, 0);lcd.print("Szivott lev.hom. ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 0F";BTSerial.println("01 0F");delay(300);ReadData();}
if (MenuID==2){lcd.setCursor(0, 0);lcd.print("Kulso hom. ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 46";BTSerial.println("01 46");delay(300);ReadData();}
if (MenuID==3){lcd.setCursor(0, 0);lcd.print("Gazpedal % ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 11";BTSerial.println("01 11");delay(300);ReadData();}
if (MenuID==4){lcd.setCursor(0, 0);lcd.print("Fordulatszam ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 0C";BTSerial.println("01 0C");delay(300);ReadData();}
if (MenuID==5){lcd.setCursor(0, 0);lcd.print("Sebesseg ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 0D";BTSerial.println("01 0D");delay(300);ReadData();}
if (MenuID==6){lcd.setCursor(0, 0);lcd.print("Legmennyiseg");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 10";BTSerial.println("01 10");delay(300);ReadData();}
if (MenuID==7){lcd.setCursor(0, 0);lcd.print("Nyomas ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 33";BTSerial.println("01 33");delay(300);ReadData();}
}
void ReadData()
{
BuildINString="";
while(BTSerial.available() > 0)
{
inData=0;
inChar=0;
inData = BTSerial.read();
inChar=char(inData);
BuildINString = BuildINString + inChar;
}
//if(BuildINString!=""){Serial.print(BuildINString);}
BuildINString.replace(SentMessage,"");
BuildINString.replace(">","");
BuildINString.replace("OK","");
BuildINString.replace("STOPPED","");
BuildINString.replace("SEARCHING","");
BuildINString.replace("NO DATA","");
BuildINString.replace("?","");
BuildINString.replace(",","");
//Serial.print(BuildINString);
//Check which OBD Command was sent and calculate VALUE
//Calculate RPM I.E Returned bytes wil be 41 0C 1B E0
if (SentMessage=="01 0C")
{
WorkingString = BuildINString.substring(7,9);
A = strtol(WorkingString.c_str(),NULL,0);
WorkingString = BuildINString.substring(11,13);
B = strtol(WorkingString.c_str(),NULL,0);
DisplayValue = ((A * 256)+B)/4;
DisplayString = String(DisplayValue) + " rpm ";
lcd.setCursor(0, 1);
lcd.print(DisplayString);
}
//Calculate Vehicle speed I.E Returned bytes wil be 41 0C 1B E0
if (SentMessage=="01 0D")
{
WorkingString = BuildINString.substring(7,9);
A = strtol(WorkingString.c_str(),NULL,0);
DisplayValue = A;
DisplayString = String(DisplayValue) + " km/h ";
lcd.setCursor(0, 1);
lcd.print(DisplayString);
}
//Coolant Temp
if (SentMessage=="01 05")
{
WorkingString = BuildINString.substring(7,9);
A = strtol(WorkingString.c_str(),NULL,0);
DisplayValue = A;
DisplayString = String(DisplayValue) + " C ";
lcd.setCursor(0, 1);
lcd.print(DisplayString);
}
//IAT Temp
if (SentMessage=="01 0F")
{
WorkingString = BuildINString.substring(7,9);
A = strtol(WorkingString.c_str(),NULL,0);
DisplayValue = A;
DisplayString = String(DisplayValue) + " C ";
lcd.setCursor(0, 1);
lcd.print(DisplayString);
}
//Air flow Rate
if (SentMessage=="01 10")
{
WorkingString = BuildINString.substring(7,9);
A = strtol(WorkingString.c_str(),NULL,0);
WorkingString = BuildINString.substring(11,13);
B = strtol(WorkingString.c_str(),NULL,0);
DisplayValue = ((A * 256)+B)/100;
DisplayString = String(DisplayValue) + " g/s ";
lcd.setCursor(0, 1);
lcd.print(DisplayString);
}
//Ambient Temp
if (SentMessage=="01 46")
{
WorkingString = BuildINString.substring(7,9);
A = strtol(WorkingString.c_str(),NULL,0);
DisplayValue = A;
DisplayString = String(DisplayValue) + " C ";
lcd.setCursor(0, 1);
lcd.print(DisplayString);
}
//Throttle position
if (SentMessage=="01 11")
{
WorkingString = BuildINString.substring(7,9);
A = strtol(WorkingString.c_str(),NULL,0);
DisplayValue = A;
DisplayString = String(DisplayValue) + " % ";
lcd.setCursor(0, 1);
lcd.print(DisplayString);
}
//Barometric pressure
if (SentMessage=="01 33")
{
WorkingString = BuildINString.substring(7,9);
A = strtol(WorkingString.c_str(),NULL,0);
DisplayValue = A;
DisplayString = String(DisplayValue) + " kpa ";
lcd.setCursor(0, 1);
lcd.print(DisplayString);
}
}
void Bootup()
{
lcd.print("WisperChip V2.00 ");
for (int i=0; i <= 5; i++)
{
for (int j=1; j <= 4; j++)// -/|\-
{
if(j==1){lcd.setCursor(0, 1);lcd.print ("-");delay(200);}
if(j==2){lcd.setCursor(0, 1);lcd.print ("/");delay(200);}
if(j==3){lcd.setCursor(0, 1);lcd.print ("|");delay(200);}
if(j==4){lcd.setCursor(0, 1);lcd.print ("_");delay(200);}
}
}
delay(1000);
}
Valakinek ötlete? A hozzászólás módosítva: Okt 2, 2015
Sajnos 1 ilyen program részletből sok lényeges dolog nem derül ki!
Milyen IDE-t használsz? (Mert eddig minden arduino verziónak volt valami hibája!
Ez a részlet valami lib-ben van? Vagy *.ino alatt fordítod?
Ha megnézed a helpet if:
Bővebben: Link
Az arduino IDE nem tuja kiértékelni feltételként az AND, OR kifejezéseket!
Ezért ezeket a műveleteket ajánlott az if előtt elvégezni, és az eredményt átadni a feltétel vizsgálatnak.
Más!
A programod végén tök felesleges az a dupla for ciklus!
for (int i=0; i <= 5; i++)
{
lcd.setCursor(0, 1);lcd.print ("-");delay(200);
lcd.setCursor(0, 1);lcd.print ("/");delay(200);
lcd.setCursor(0, 1);lcd.print ("|");delay(200);
lcd.setCursor(0, 1);lcd.print ("_");delay(200);
}
Így is ugyan az lesz az eredmény!
Van egy arduino panelra ültetve, mellette egy shift regiszter rajta 8 leddel szalagkábellel a további kaszkádokhoz. Ha így önmagában működtetem tökéletes, viszont van egy második panel 2db shiftel amin van egy kijelző és további 8 led, ha ezeket is rákötöm akkor érdekes dolgokat produkál. A tesztek során tökéletes volt egy kb. 10 centis szallagkábellel, a végleges formában kb. 1 méteres szallagkábel kell ezt behelyezve teljesen hülyeségeket irt a kijelzőre és az első shift regiszter ledjei kialudtak. A szalagkábelt egy árnyékolt vezetékre cseréltem és a latch bemenetre a második panelen betettem 100nFot, így már működik de 10-20 másodpercenként újra hülyeséget ir ki aztán visszaáll. Valakinek ötlet esetleg? ( az mcu és az első shift lábai között van 470 ohm berakva talán fontos ) közben a 2. panelen azért kicserélem a shift regisztereket mert használt darabok vannak beültetve.
A 470ohm-ot csökkentsd le nyugodtan 100ohm-ra (de el is hagyhatod), az SPI sebességét vedd lassabbra. Így a jelalakok is megfelelőek lesznek.
Softwarees függvényt használok (shiftout), nem a hw spit. Kicseréltem az 595öket így jobb lett a helyzet de néha még mindig bevillan más karakter mint ami kellene. (shiftout sebességét lehet manupulálni valahogy?googlezok...)
Írtam egy saját shiftout függvényt, 10mS időt adva egy bitnek is ugyan ugy néha néha bevillan valami szegmens. egyszerűen érthetetlen, a sebesség nem lehet ebből kifolyólag probléma.(és érdekes hogy az előző tagra is visszahat a jelenség, ha csak a hozzá közeli shift van rajta akkor az a rész jó)
UNO R3. *.ino-t mutatta, nincs semmi lib.
Ha kiveszem a sort, akkor továbblép, viszont nekem ne azért lépjen tovább, mert kivettem, hanem mert válasznak megkapja, amiért tovább kell lépnie. AND és OR kifejezések nincsenek, ha jól látom, csak egál.
A for ciklusok nem kevernek be, bekapcsolásnál egyszer lefut és kész.
Jobban érdekel, hogy miért nem lép a menübe a progi.
Ám köszi a válaszodat.
Csak a vérprofik tudják fejböl az elsöbbségi szabályokat!
Én ilyenkor inkább zárojelezni szoktam.
if (x > 450 and x < 590){if (MenuID>0){MenuID--;}delay(250);}//Left
//inkább igy:
if ((x > 450) and (x < 590)){if (MenuID>0){MenuID--;}delay(250);}//Left
A hozzászólás módosítva: Okt 3, 2015
A menüben a lépkedéssel nincs baj.
Más programokban én is a zárójelezést alkalmazom, jobban átlátható és lehet tudni, hogy ki kivel van
Nem tudom mitévő legyek.
Marad a debugolás!
Beteszed a setup elejére:
Serial.begin(9600); // PCre kiíráshoz
Megnyitod a : Tools > Serial monitort!
Kiegészíted a programodat így:
...
SentMessage = "ATI";
BTSerial.println("ATI");delay(500);ReadData();
Serial.print(BuildINString.substring(1,7)) ; Serial.println(" = ATIELM327 v2.1>"); // vajon mit kapunk itt?
if (BuildINString.substring(1,7)=="ATIELM327 v2.1>")
{
lcd.setCursor(0, 0);
lcd.print("Welcome... ");
lcd.setCursor(0, 1);
lcd.print("Connection OK ");
delay(1500);
}
else
{
lcd.setCursor(0, 0);
lcd.print("Error ");
lcd.setCursor(0, 1);
lcd.print("No Connection! ");
delay(1500);
goto Retry;
}
...
A hozzászólás módosítva: Okt 3, 2015
Figyussz!
Te 7 karaktert akarsz összehasonlítani 15 karakterrel?
Ez sosem lessz neked igaz történet:
if (BuildINString.substring(1,7)=="ATIELM327 v2.1>")
Csak ez van a soros monitoron:
Igazad van!
Közben kipróbáltam az OBD-t a géppel összekötve és csak akkor ad az"ATI" kérésre ATIELM327 v2.1> választ, ha soremelés és kocsi-vissza van kiválasztva.
Sziasztok! Látom obd van soron, ezekkel az usb-s, bluetooth-os olvasókkal az aktuális sebesség, fordulatszám, stb.-n kívül pl. hibát is lehet olvasni, illetve pl. szervízkulcsot törölni, vagy azt csak a kézi olvasókkal?
Sziasztok.
Szintaktikailag ezt hogy értelmezzem:
TCCR0A = 2<<COM0A0 | 2<<COM0B0 | 3<<WGM00;
Ez ugyan az mintha a regisztert így állítanám be:
TCCR0A = 0xA3;
köszi
Amatőr hibát vétettem. LCD shield-et is rádugtam a panelre és ott használatban van a D10...
A többit már tudod 
Kipróbáltam autóban, működik, csak nem folyamatos a megjelenítés és ha nincs változás az értékben, akkor teljesen valótlant ír.
Köszi a segítségeket.
Hali!
Eléggé összetett a hibaolvasás és törlés, arduinoval szerintem lehetetlen.
Pc-vel összekötve lehet velük olvasni és törölni, de gyakran eldobja a kapcsolatot, legalábbis az eBay-es kék mini.
Szia.
Amit kérdezel, az inkább AVR miértek hogyanok témakörbe tartozik, oda írd, az Arduino pont ezt rejti el a felhasználók elöl.
TCCR0A = 1<<COM0A0 | 1<<COM0B0 | 1<<WGM00;
Ez lenne a normális, ilyenkor a 0b00000001-t (jobboldali bit be van állítva), elshifteled balra annyival, amennyire a COM0A0 definiálva van. Ezt megtalálod az adatlapban, és az avr.h-ban, ha jól sejtem. Ez egy szám lesz, 8bites AVR esetén 0-7-ig.
Magyarul annyit jelent, hogy ez a három dolog lesz beállítva a TCCR0A regiszterben, az összes többi 0.
Amit írtál, az is működőképes, viszont átláthatatlan, mivel nem 0b00000001-et, hanem 0b00000010-et (decimálisan 2), és 0b00000011-t (decimálisan 3) shiftelsz balra. Pl. ha a 3-at shifteled 7-tel balra, akkor a második helyiértéken levő 1-es elveszik, és olyan, mintha 1-et shifteltél volna.
A 0xA3 = 0b1010 0011 , utána kellene nézni az adatlapból, hogy a COM0A0 hányas számnak felel meg, és a 0b00000010-et ennyivel balra eltoltni, ezt az összessel elvégezni, és kiderül, hogy mit állítottál be. Ha nem közlöd, milyen AVR-re fordítasz, nem tudok utána nézni, hogy mennyit érnek a COM0xx-ek.
Így is írhatnád, ha tudod, mennyi a definiált érték:
TCCR0A=(1<<3)|(1<<2)|(1<<7); // zárójel használatát ajánlom! Sokáig kell keresni az ilyen hibát, mivel nem szól a fordító sem! A hozzászólás módosítva: Okt 4, 2015
Köszi, és vajon az usb-s is eldobja? Vagy csak magát a bluetooth-t dobja el?
Oké köszi, írtam is a másik témába egyébként atmega324
Sok helyen így látom hogy beállítják, csak azért nem értem hogy miért így. Hisz mire az ember számolgat oszt szoroz hogy mist mit mennyivel tologasson akkor már beírhatná a regiszter pontos értékét is. Ezért nem vagyok biztos hogy a rövidebb megoldás is jó. Még csak ismerkedem a dologgal.
Pc-n még nem tapasztaltam, hogy USB kapcsolaton megszakadt volna a kapcsolat.
Viszont most ezzel az ardu-obd kombóval sem volt probléma a BT kapcsolattal.
Olvasgattam utána, és sokan a scanmaster progira esküdtek, azzal elvileg lehet törölni is, de a szervízkulcsot is ki lehet törölni vagy csak hibát?
Meglett a probléma. A vezérlő panelen volt egy elvékonyított GND vezeték ami egy kis helyen ment el, itt szkóppal nézbe 0.5Vos feszültségesések voltak amikor új adat ment ki, ez okozta a hibát. Kis vezetékdarabbal áthidalva teljesen megszűnt a gond.
Scanmastert nem próbáltam. VAG-COM progival gyógyítom az ilyesfajta dolgokat a szekereimen.
Sziasztok! Egy olyan problémám lenne, hogy due-n az audio libbel ha rádugok egy hangszórót, tökéletesen megy, viszont ha pl egy erősítőt akarok rádugni, vagy igazándiból az lenne a szándék, hogy egy sim900-as mikrofondugójába lenne bedugva, akkor nem szól. Ha pl megán tmrpcm-mel csinálom ugyan ezt, az jó. Ez mitől lehet?
BT modullal kapcsolatban lenne egy kérdésem. Sikerült-e megoldani, hogy kapcsolat megszakadásakor (két egység közt túl nagy lesz a távolság), mikor újra egymás hatósugarába kerülnek automatikusan kapcsolódjanak?
Tehát nem a program elindulásakor történő automatikus csatlakozásról van szó.
Szia Saua. Nem ismerem a BT s csatlakozást Arduino nál, de nem lehetséges hogy szoftveresen kell megoldani az ujracsatlakozást? Figyelni hogy él e a kapcsolat, ha megszakad akkor utánna visszaugorni a csatlakozás programrészhez?
Üdv!
Automatikusan kapcsolódik, úgy van konfigolva.
|
|