nimeni_altci Postat Iunie 28, 2014 Partajează Postat Iunie 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 Link spre comentariu
Vizitator cobru Postat Iunie 28, 2014 Partajează Postat Iunie 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. Link spre comentariu
nico_2010 Postat Iunie 28, 2014 Partajează Postat Iunie 28, 2014 Foloseste succesiunea de comenzi de mai jos: Serial.print("I received: "); Serial.println(incomingByte); Link spre comentariu
Vizitator cobru Postat Iunie 28, 2014 Partajează Postat Iunie 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" Link spre comentariu
nimeni_altci Postat Iunie 28, 2014 Autor Partajează Postat Iunie 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? Link spre comentariu
Liviu M Postat Iunie 28, 2014 Partajează Postat Iunie 28, 2014 (editat) 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. Editat Iunie 28, 2014 de Liviu M Link spre comentariu
nimeni_altci Postat Iunie 28, 2014 Autor Partajează Postat Iunie 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. Link spre comentariu
Vizitator cobru Postat Iunie 29, 2014 Partajează Postat Iunie 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)). Link spre comentariu
nimeni_altci Postat Iunie 30, 2014 Autor Partajează Postat Iunie 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? Link spre comentariu
Liviu M Postat Iunie 30, 2014 Partajează Postat Iunie 30, 2014 Audio direct nu merge, trebuie intai "digitalizat".Da' nu te astepti sa asculti "in timp real", nu? Link spre comentariu
nimeni_altci Postat Iunie 30, 2014 Autor Partajează Postat Iunie 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 Link spre comentariu
Liviu M Postat Iunie 30, 2014 Partajează Postat Iunie 30, 2014 (editat) 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. Editat Iunie 30, 2014 de Liviu M Link spre comentariu
nimeni_altci Postat Iunie 30, 2014 Autor Partajează Postat Iunie 30, 2014 Pai transmitatoarele oricum sunt pe SPI. Eu nu stiu cum sa citesc acel semnal de voce pe serial. Link spre comentariu
Liviu M Postat Iunie 30, 2014 Partajează Postat Iunie 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). Link spre comentariu
nimeni_altci Postat Iulie 1, 2014 Autor Partajează Postat Iulie 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? Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum