Arduino Polska Forum

Pełna wersja: komunikacja komputer - arduino, rozwiązanie
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
W moim projekcie (rotor antenowy) potrzebowałem wzajemnego przypisywania zmiennych przez 2 arduino połączone interface'm szeregowym. Przez 2 dni szukania w necie nie znalazłem prostego rozwiązania, więc musiałem sam pokombinować.

Poniżej jest przykład sterowania diodą RGB z monitora portu lub innego arduino. W "void serialEvent()" wytłumaczenie "co do czego".

Może komuś się przyda Wink
 

Kod:
/*
program pokazuje sposob zmiany wartosci zmiennych przy pomocy komend z monitora portu lub innego arduino
By SQ4KDG 2016
*/

// pins for the LEDs:
const int redPin = 3;
const int greenPin = 5;
const int bluePin = 6;
// zmienne
int red, green, blue ;
int nr, w;
int r, g, b;
//////////////////////////////////////////////////////////
void setup() {

 Serial.begin(9600);
 Serial.setTimeout (3);
 // make the pins outputs:
   pinMode(redPin, OUTPUT);
   pinMode(greenPin, OUTPUT);
   pinMode(bluePin, OUTPUT);*/
}
////////////////////////////////////////////////////////
void loop() {
 if (r != red || g != green || b != blue) {
   Serial.print("czerwony: "); Serial.println(red);
   Serial.print("zielony: "); Serial.println(green);
   Serial.print("niebieski:  "); Serial.println(blue);
   r = red;
   g = green;
   b = blue;
   analogWrite(redPin, red);
   analogWrite(greenPin, green);
   analogWrite(bluePin, blue);
 }
}
void serialEvent() {
 while (Serial.available() > 0) {
   // wartości zmiennych wpisujemy w monitorze portu jako pary liczb oddzielone spacja
   // pierwsza liczba z kazdej pary to numer zmiennej ktorej chcemy nadac nowa wartosc
   // droga liczba z kazdej pary to nowa wartosc tej zmiennej
   // np. "1 200" (to jedna para liczb)
   // albo "2 1 1 20" (tu mamy dwie pary liczb)
   // albo nawet "3 234 1 23 2 45 1 66" (w tym wypadku po oproznieniu bufora zmienna nr 1 przyjmie wartosc 66 a nie 23)
   nr = Serial.parseInt(); //numer zmiennej
   w = Serial.parseInt();  //wartosc zmiennej
   if (nr == 1) {
     red = w;
   }
   else if (nr == 2) {
     green = w;
   }
   else if (nr == 3) {
     blue = w;
   }
//   Serial.print(nr); Serial.print(' '); Serial.println(w);
 }
}
Pozdrawiam SQ4KDG