Код (C++): /* Автор: Рябикин Олег. 2016г. olegryaba@gmail.com Прошивка для "МАСТЕРА" */ #include <Wire.h> char privet; // у каждой "ведомой" ардуины свое имя у одной 'A' у другой 'B' у следующей 'C' int LED=13;//светодиод на 13 пине int knopka=5;//пусть кнопка будет на 5 пине int f=0; // переменная для счетчика char g; //временная переменная для хранения полученного символа по порту byte metka=0;//метка , в этом примере у нее два значения 0, 1 void setup() { pinMode(LED, OUTPUT);//настраиваем 13 пин как выход digitalWrite(LED,LOW);//выключаем светодиод pinMode(knopka, INPUT_PULLUP);//подтягиваем кнопку к +5в внутренним сопротивлением Serial.begin(9600); // открываем последовательный порт на скорости 9600 бод // на всех ардуинках должна быть одинаковая } void loop(){ if(digitalRead(knopka)==LOW&&metka==0) //если нажать на кнопку когда метка=0 ,в порт отошлем привет на выбранный адресс { do { digitalWrite(LED,HIGH);//включаем светодиод delay(500); digitalWrite(LED,LOW);//выключаем светодиод delay(500); f++; //прибавляем 1 к предыдущему значению счетчика } while (digitalRead(knopka)==LOW);//пока нажата кнопка включаем светодиод и запускаем счетчик (считаем количество марганий светодиода) if(f==1){privet='A';}//если светодиод маргнул 1 раз, выбирали адресс A (первая ардуинка) else if(f==2){privet='B';}//если светодиод маргнул 2 раза, выбирали адресс B (вторая ардуинка) else if(f==3){privet='C';}//если светодиод маргнул 3 раза ,выбрали адресс C (третья ардуинка) else if(f>3){privet=' ';metka=0;}////если светодиод маргнул больше 3 раз ,а у нас всего три "ведомых" начинаем заного выбирать ведомого Serial.print(privet); // как только отпустим кнопку отправляем в порт "привет" одному из трех ардуин f=0;// обнуляем счетчик для следующей передачи metka=1;//меняем значение метки для подготовки "мастера" к передаче данных } if(digitalRead(knopka)==LOW&&metka==1) //если нажать кнопку когда метка=1 ,в порт подготовим данные для выбранной ардуины { do { digitalWrite(LED,HIGH);//включаем светодиод delay(500); digitalWrite(LED,LOW);//выключаем светодиод delay(500); f++; // удерживая кнопку ,прибавляем 1 к предыдущему значению счетчика } while (digitalRead(knopka)==LOW);//пока нажата кнопка включаем светодиод и запускаем счетчик (считаем количество морганий светодиода) delay(1000); if(f>9){metka=0;f=0;}//если нечаяно выбрали число больше 9, в порт отсылаем 0 Serial.print(f); // как только отпустим кнопку отправляем в порт колич морганий светода f=0;// обнуляем счетчик для следующей передачи metka=0;// устанавливаем 0,и начинаем все с начала } }
Код (C++): /* * ПРОШИВКА ДЛЯ "ВЕДОМОГО" * Автор: Рябикин Олег. 2016г. olegryaba@gmail.com * */ char adres='B'; // у каждой "ведомой" ардуины свой адресс допустим у одной 'A' у другой 'B' у следующей 'C' int LED=13;//светодиод на 13 пине int f=0; // переменная для счетчика char g=0; //временная переменная для хранения полученного символа по порту int t=0; // переменная для хранения полученного целого числа из символа byte metka=0;// вспомогательная метка , в этом примере у нее два значения 0, 1 void setup() { pinMode(LED, OUTPUT);//настраиваем 13 пин как выход Serial.begin(9600); // открываем последовательный порт на скорости 9600 бод // на всех ардуинках должна быть одинаковая } void loop(){ if(Serial.available()>0) // если в последовательном порту есть данные для чтения { g=Serial.read(); //читаем и присваиваем переменной g полученный символ if(g==adres)//если мастер прислал наш адресс то... { metka=1; //готовимся к приему данных digitalWrite(LED,HIGH); delay (100); digitalWrite(LED,LOW); delay (100);//маргнем 1 раз( покажем,кого мастер выбрал из трех ардуин) } if(metka==1&&g!=adres){//если метка=1 значит мастер выбрал меня t=0;//обнулем переменную if(g=='1'){t=1;}//преобразуем символ числа в целое число else if(g=='2'){t=2;}// и присваиваем это значение переменной t else if(g=='3'){t=3;} else if(g=='4'){t=4;} else if(g=='5'){t=5;} else if(g=='6'){t=6;} else if(g=='7'){t=7;} else if(g=='8'){t=8;} else if(g=='9'){t=9;} for(int r=0;r<t;r++)// количество марганий на "ведомом" будет равно полученному числу от "мастера" { digitalWrite(LED,HIGH); delay (300); digitalWrite(LED,LOW); delay (300); } metka=0; }} }
С казахстана человек собирал какой то прибор, потом пропал. Он так же как и я решил что использовать своеобразно - многоядерный мк лучше чем навешивать много задач на один мк. то есть несколько самих контроллеров(можно без плат, то есть не ардуино) копеечной стоимости.
Допустим создаем робота, "МАСТЕР" его мозг МАСТЕР подает команды своим рукам ,ногам и т.д Мастер: -Ведомый A Шаг вперед. -Ведомый B Удержи заготовку по координатам x=10;y=200;z=78; -Ведомый С стукни молотком по координатам x=20;у=250;z=100 и т.д.
Это называется "сеть", она, как правило, формируется при помощи 485, это тот же UART, только удобно и правильно организованный. И робот может быть огромным при этом, с руками длиной до 1200м. )