|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
borzon Član
Pridružen-a: Čet 17 Sep 2015 23:14 Prispevkov: 150 Aktiv.: 1.44 Kraj: Postojna
|
Objavljeno: Tor Sep 29, 2020 9:08 pm Naslov sporočila: Arduino komunikacija preko porta RS232? |
|
|
Pozdravljeni,
Ker se s tem neuspešno zafrkavam že skoraj cel dan se na vas znova obračam po pomoč.
Želim posliljati podtatke o temperaturi iz senzorjev, ki so priključeni na arduino Mega 2560 preko povezave RS232 na PC. Na PCju imam nameščen program Termite 3.4 s katerim pregledujem prejete podatke. Med arduinom in PCjem je nameščen modul "RS232 to TTL". Podatki na PCju se izpisujejo enaki kot na Serial oknu v Arduinu.
Zanima me kako kaj spišem "void" kodo, ki bo preko RS232 pošiljaja podatke na PC in istočasno prejemala ukaze iz PC-ja okna. Da bi lahko npr med prejemanjem podatkov o temperaturi istočasno npr. izklopil npr. črpalko ali kaj podabnega.
Imam 3 spremenljivke tipa fload.
float temperatura_Zgoraj;
float temperatura_Spodaj;
float temperatura_Zunaj;
hvala za pomoč |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Sre Sep 30, 2020 2:36 pm Naslov sporočila: |
|
|
Pri katerem delu imas tezave?
za referenco glej primer TUKAJ
Koda: |
Serial.println(temperatura_Zgoraj, 2); //Izpise v obliki X.XX |
|
|
Nazaj na vrh |
|
|
borzon Član
Pridružen-a: Čet 17 Sep 2015 23:14 Prispevkov: 150 Aktiv.: 1.44 Kraj: Postojna
|
Objavljeno: Sre Sep 30, 2020 4:35 pm Naslov sporočila: |
|
|
Pozdravljen mato1111,
Kot sem opazil imam težavo v tem, da ko iz PCja preko COM1 (RS232) porta hočem poslati nek zapis npr. ON ali OFF mi ga arduino ne sprejme. Na PCju uporabljam program Termite za nadzor in pošiljanje podatkov preko RS232 porta. COM1 je dejansko fizični in ne preko USB izhoda.
Ko pošiljam ukaz ali tekst preko Serial porta v Arduino IDE pa ga sprejme. V obratni smeri, torej iz Arduina v PC pa program Termite normalno bere.
V času od prejšnje objave sem poizkušal iz PCja poslati nek tekst v arduino, ki bi se potem prikazal na LCD zaslonu. Kot ze rečeno preko Serial porta v Arduinu IDe gre preo RS232 pa ne gre.
Na PCju v programu Termite 3.4 ko poskušam vklopit Opcijo "Forward" na isti RS232 kot je sprejemanje mi javi "Forwarding port may not be the same as the primary port".
Mogoče kdo pozna se kak drugi Free program, ki omogoča prejemanje in pošiljanje preko COM izhodov. |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Sre Sep 30, 2020 5:53 pm Naslov sporočila: |
|
|
Jaz za testiranje uporabljam Simpleterm. Poskusi z tem. |
|
Nazaj na vrh |
|
|
rplink3r Član
Pridružen-a: Tor 06 Feb 2007 20:02 Prispevkov: 480 Aktiv.: 2.29 Kraj: Levec
|
Objavljeno: Sre Sep 30, 2020 8:19 pm Naslov sporočila: |
|
|
Kar se Arduino tiče, prvo poskusi z primerom
Examples->Communication->ReadASCIIstring,
če ti to dela, ti bo tri vpisane crke vrnil nazaj in nastavil tri pwm vrednosti na določene pine.
Če ti bo uspel sprejem in pošiljenje lahko poskusiš z sledečim:
Koda: |
const byte numChars = 32;
char receivedChars[numChars]; // an array to store the received data
boolean newData = false;
void setup() {
Serial.begin(9600);
Serial.println("<Arduino is ready>");
}
void loop() {
recvWithEndMarker();
showNewData();
}
void recvWithEndMarker() {
static byte ndx = 0;
char endMarker = 0x0D;
char rc;
// if (Serial.available() > 0) {
while (Serial.available() > 0 && newData == false) {
rc = Serial.read();
if (rc != endMarker) {
receivedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars - 1;
}
}
else {
receivedChars[ndx] = '\0'; // terminate the string
ndx = 0;
newData = true;
}
}
}
void showNewData() {
if (newData == true) {
Serial.print("This just in ... ");
Serial.println(receivedChars);
newData = false;
}
}
|
Tole je recimo primer na sprejemni strani Arduino, zaključi sprejem stringa, ko mu pošlješ "endMarker = 0x0D" Carriage return, oziroma enter. Nato ti ga izpiše, nastavljen je na max 32 znakov.
Ta primer pri " while (Serial.available() > 0 && newData == false) {" čaka na tvoje podatke, da se ti bo program izvajal brez čakanja uporabi vrstico
"// if (Serial.available() > 0) {"
Ko ti dela sprejem, lahko nadaljuješ z več spremenljivkam in pretvorbo le teh. Lahko imaš za različne spremenljivke različne end markerje, jih sortiraš po dolžini ali pa še na kakšen drugačen način . _________________ "The statement below is false."
"The statement above is true." |
|
Nazaj na vrh |
|
|
borzon Član
Pridružen-a: Čet 17 Sep 2015 23:14 Prispevkov: 150 Aktiv.: 1.44 Kraj: Postojna
|
Objavljeno: Sre Sep 30, 2020 9:50 pm Naslov sporočila: |
|
|
Pozdravljeni in hvala vsem za nasvete.
Stvar še vedno ne deluje in najverjetene je vzrok v RS232 kablu.
Zato vas sprašujem naslednje. Obstaja več različnih tipov vezav RS232 kablov.
- Zanima me kateri tip kabla potrebujem.
Tukaj imam klasični podaljšek "Podaljšek za star tip miške" in mi dela samo sprejem oddajanje ne.
- Poizkusil sem tudi z "Serial Null RS232 kabel" pa svtar sploh ne dela tudi sprejem ne prav tako ne dela pošiljanje...
Kaki tip kablov moram torej uporabit?
hvala in l.p |
|
Nazaj na vrh |
|
|
eddie Član
Pridružen-a: Sre 10 Dec 2003 21:02 Prispevkov: 706 Aktiv.: 3.17 Kraj: Severna primorska
|
Objavljeno: Čet Okt 01, 2020 8:52 am Naslov sporočila: |
|
|
Za test kabla na strani kjer normalno priklopiš arduino s koščkom žice spoji pina 2 in 3 na kablu. To sta oddajni in sprejemni pin.
Če je kabel uredu bi moral vse kar pošiljaš iz tvojega programa na PCju sprejeti tudi nazaj.
Za uspešno komunikacijo so uporabljeni samo pini 2, 3 in 5
Slik na internetu kolikor hočeš:
Google
Če na koncu kabla to ne deluje lahko isto poizkusiš direktno na DB9 konektorju PC-ja.
Po tem bi ti moralo že biti bolj jasno kje je težava.
Lp |
|
Nazaj na vrh |
|
|
rplink3r Član
Pridružen-a: Tor 06 Feb 2007 20:02 Prispevkov: 480 Aktiv.: 2.29 Kraj: Levec
|
Objavljeno: Čet Okt 01, 2020 2:30 pm Naslov sporočila: |
|
|
Tako kot ti je napisal eddie,
Nato še preveriš ta tvoj RS232 to TTL vmesnik, na njem spojiš TX in RX skupaj in moraš vse dobiti nazaj na PC terminal. _________________ "The statement below is false."
"The statement above is true." |
|
Nazaj na vrh |
|
|
borzon Član
Pridružen-a: Čet 17 Sep 2015 23:14 Prispevkov: 150 Aktiv.: 1.44 Kraj: Postojna
|
Objavljeno: Čet Okt 01, 2020 7:37 pm Naslov sporočila: |
|
|
Vsem se iskreno zahvaljujem za vašo pomoč in nasvete.
Ugotovil sem, da je napaka najverejetneje na poškodovanem izhodu RDX (0) na Arduino Mega 2560.
Ko sem poizkusil z drugim arduinom je vse začelo "čudežno" delati in sprejemati signal preko RS232 porta. To mojo tezo je še potrdilo dejstvo, da ko sem izhoda TXD in RXD na izhodu iz modula (RS232 to TTL) spojih sem prejemal nazaj v terminalsko okno prej poslana sporočila.
Hvala za pomoč |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 68 dni
Powered by phpBB © 2001, 2005 phpBB Group
|