Jump to content
ELFORUM - Forumul electronistilor

dilema program


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
  • Replies 15
  • Created
  • Last Reply

Top Posters In This Topic

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
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

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

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
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

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • 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