Jump to content
ELFORUM - Forumul electronistilor

dilema program


nimeni_altci
 Share

Recommended Posts

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 to comment
Share on other sites

Guest cobru

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 to comment
Share on other sites

Guest cobru

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 to comment
Share on other sites

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 by Liviu M
Link to comment
Share on other sites

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 to comment
Share on other sites

Guest cobru

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 to comment
Share on other sites

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 to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines