nimeni_altci Posted June 28, 2014 Share Posted June 28, 2014 Salut Am facut urmatorul program pentru Arduino: int incomingByte = 0; // for incoming serial data void setup() { Serial.begin(9600); // opens serial port, sets data rate to 9600 bps} void loop() { // send data only when you receive data: if (Serial.available() > 0) { // read the incoming byte: incomingByte = Serial.read(); // say what you got: Serial.print("I received: "); Serial.write(incomingByte); Serial.print('n'); }} Practic citesc o valoare pe serial si mi.o trimite inapoi. Am folosit serial monitor sa testez programul. Cand ii trimit "G" imi returneaza tot "G". La fel merge pentru orice character atata timp cat e doar unul. Dar cand trimit "ggg" , imi trimite de 3 ori "g" unul sub altul. Adica le citeste pe rand. Cum as putea modifica programul ca sa imi citeasca tot stringul odata? Multumesc Quote Link to comment Share on other sites More sharing options...
Guest cobru Posted June 28, 2014 Share Posted June 28, 2014 Ceva de genul: char sir[64];void loop(){ if(Serial.available()) { int pos = 0; while (Serial.available() && pos < 63) sir[pos++] = Serial.read(); sir[pos] = 0; Serial.print("ai trimis: "); Serial.print(sir); Serial.print("n"); }} Practic e cam la fel ca ultimul exemplu de la linkul asta https://gist.github.com/94327/2f51486f19d5eeb96dfc701c7f46821cdeac4e22 Asta-i varianta C, daca nu-ti pasa ca folosesti mai multa memorie poti folosi si String de C++... Vezi documentatia la Serial.readString si Serial.readStringUntil (ultimul e foarte util pentru a implementa "comenzi" trimise din serial monitor). Sper ca te ajuta. Quote Link to comment Share on other sites More sharing options...
nico_2010 Posted June 28, 2014 Share Posted June 28, 2014 Foloseste succesiunea de comenzi de mai jos: Serial.print("I received: "); Serial.println(incomingByte); Quote Link to comment Share on other sites More sharing options...
Guest cobru Posted June 28, 2014 Share Posted June 28, 2014 Foloseste succesiunea de comenzi de mai jos: Serial.print("I received: "); Serial.println(incomingByte); Nu e bine, cand serial monitorul trimite "GGG" (3 caractere se scriu dintr-o data, libraria serial le va receptiona deodata) ii va veni inapoi din arduino: I received: G I received: G I received: G Eu am inteles ca trebuie sa apara "I received: GGG" Quote Link to comment Share on other sites More sharing options...
nimeni_altci Posted June 28, 2014 Author Share Posted June 28, 2014 Da, cobru are dreptate. Multumesc frumos pentru lamurire.Si mai am o curiozitate. Este posibil sa transmit si altceva pe serial? De exemplu sa primesc pe Rx un semnal audio(de dimensiune mica) si sa il trimit pe Tx? Quote Link to comment Share on other sites More sharing options...
Liviu M Posted June 28, 2014 Share Posted June 28, 2014 (edited) Daca scopul e "doar" transmiterea fara linie noua intre caractere, functioneaza si fara variabile suplimentare. Variabila sir e necesara daca se doresc alte prelucrari ale datelor receptionate. void loop() { int incomingByte = 0; // for incoming serial data // put your main code here, to run repeatedly: // send data only when you receive data: if (Serial.available() > 0) { //mesajul de politete Serial.print("I received: "); // read the incoming byte: while(Serial.available()){ incomingByte = Serial.read(); // say what you got: Serial.write(incomingByte); } Serial.print('n'); //linie noua } } Este posibil sa transmit si altceva pe serial? Pe USART poti transmite orice date corect formatate - acelasi numar de biti de start, de biti de stop, de biti de date, paritate... la ambele capete ale sarmei. Edited June 28, 2014 by Liviu M Quote Link to comment Share on other sites More sharing options...
nimeni_altci Posted June 28, 2014 Author Share Posted June 28, 2014 In mod sigur nu doresc doar afisarea, pentru ca nu ar fi prea de folos. Ma interesa si prelucrarea dar am inteles cum se face. Ceea ce vreau sa intreb daca e posibil e aprinderea unui led(cu 2 Arduino). Sa zicem ca am un led conectat la unul din Arduino, si sa transmit din alt Arduino o comanda seriala care aprinde ledul. Ar fi posibil transmiterea unei litere sa zicem din al doilea arduino, iar cand primul detecteaza acea litera sa dea comanda de aprins ledul. Dar sunt curios daca e direct functie pentru transmiterea seriala de aprindere a ledului. Quote Link to comment Share on other sites More sharing options...
Guest cobru Posted June 29, 2014 Share Posted June 29, 2014 Daca dai un google search printre primele rezultate gasesti si ceva ce seamana cu ce vrei tu: http://robotic-controls.com/learn/arduino/arduino-arduino-serial-communication In principiu legi RX la TX intre cele doua (RX de la primu la TX de la al doilea si TX de la primu la RX de la al doilea, GND la GND) si pe urma de pe cel care trimite poti face Serial.write() si pe celalalt vei primi cu Serial.read() (ca si cum ar fi trimis textul din serial monitor). Bineinteles, trebuie ca ambele sa aiba aceeasi parametri de comunicare (Serial.begin(aceeasi viteza)). Quote Link to comment Share on other sites More sharing options...
nimeni_altci Posted June 30, 2014 Author Share Posted June 30, 2014 Si cum as putea sa primesc pe Rx un semnal audio si sa il transmit mai departe pe Tx? Ce comenzi trebuie folosite in program? Quote Link to comment Share on other sites More sharing options...
Liviu M Posted June 30, 2014 Share Posted June 30, 2014 Audio direct nu merge, trebuie intai "digitalizat".Da' nu te astepti sa asculti "in timp real", nu? Quote Link to comment Share on other sites More sharing options...
nimeni_altci Posted June 30, 2014 Author Share Posted June 30, 2014 As fi vrut sa transmit voce de pe un arduino pe altul folosind aceste module http://www.okazii.ro/componente-electronice/2-x-transceiver-wireless-2-4ghz-nrf24l01-pa-lna-distanta-1000-m-pentru-arduino-pic-avr-arm-a151522378 Quote Link to comment Share on other sites More sharing options...
Liviu M Posted June 30, 2014 Share Posted June 30, 2014 (edited) Ar trebui sa poti, dar nu cu transmisie seriala asincrona (RS232) ca cea folosita la comunicatia cu PC-ul, ci folosind comunicatia SPI. Din cate stiu eu, arduino o stie si pe asta. Edited June 30, 2014 by Liviu M Quote Link to comment Share on other sites More sharing options...
nimeni_altci Posted June 30, 2014 Author Share Posted June 30, 2014 Pai transmitatoarele oricum sunt pe SPI. Eu nu stiu cum sa citesc acel semnal de voce pe serial. Quote Link to comment Share on other sites More sharing options...
Liviu M Posted June 30, 2014 Share Posted June 30, 2014 Pai dupa ce le receptionezi prin SPI de la module (sa zicem intr-un vector), le trimiti si pe seriala la PC. Ce faci cu ele in PC, n-am idee, ca o se le primesti ca un sir de caractere (adica variabile char, pe 8 biti). Quote Link to comment Share on other sites More sharing options...
nimeni_altci Posted July 1, 2014 Author Share Posted July 1, 2014 Aici as dori o explicatie mai detaliata. Eu am trimis pe Serial doar caractere(litere, cifre). Cum se poate trimite si un semnal analogic, ca vocea de exemplu? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.