Електроника и Електротехника | Electronics and Electrical Engineering > Аналогово управление | Analog Control
Arduino за стрелки
pavel75:
КОД НА ПЪРВОТО АРДУИНО:
#include <Servo.h>
#include <SoftwareSerial.h>
SoftwareSerial Ardo1 (0, 1); //Пиновете за НС12
const int butonpin = 4;
void setup() {
Ardo1.begin(9600);
pinMode (butonpin,INPUT);
pinMode (led_pravo, OUTPUT);
pinMode (led_otklonenie, OUTPUT);
}
void loop() {
int buton_push = digitalRead(butonpin);
if(buton_push ==HIGH){
Ardo1.println(15);
}
delay(200);
}
}
КОД НА ВТОРОТО АРДУИНО:
#include <Servo.h>
#include <SoftwareSerial.h>
SoftwareSerial Ardo2 (0, 1); //Пиновете за НС12
const int pravo = 0;
const int diasno = 90;
const int servopin = 4;
// константа за периода на забавяне на върнете на сервото
const int period = 100;
//декрарираме сервото
Servo Strelka1;
//променливи за запомняне позицията на сервото
int pos = pravo; // текуща позиция
int pos_old = diasno; // предишна позиция
void setup() {
Ardo2.begin(9600);
Strelka1.attach(servopin); // закача сервото на пин 5
Strelka1.write(pos); //сервото се обръща в права позиция
delay (1000);
Strelka1.detach();
}
void loop() {
if(Ardo2.available ()>1){
int input = Ardo2.parseInt();
if (input == 15) {
pos_old = pos; //запазва текущата позиция
if(pos==pravo)
{pos=diasno;}
else{pos=pravo;}
Ardo2.flush();
if(pos_old<pos){
Strelka1.attach(servopin);
for(int i = pos_old + 1; i <=pos; i++){
Strelka1.write(i); // записва следващата позиция на сервото
delay(period); // забавяне
//Ardo2.println(16);
}
Strelka1.detach();
}
if(pos_old>pos){
Strelka1.attach(servopin);
for(int i = pos_old - 1; i >=pos; i--){
Strelka1.write(i); // записва следващата позиция на сервото
delay(period); // забавяне
Ardo2.println(17);
}
Strelka1.detach();
}
}
}
}
VladoC:
"...Открих и още нещо - ако НС12 е закачено за Ардуиното дава същата грешка, че не може да качи програмата. Когато го махна този модул програмата се качва без никакви проблеми..."
Павка, мисля, че точно това ти е проблема. Когато програмираш Ардуино, задължително изключващ комуникационнивя модул!
pavel75:
--- Цитат на: VladoC link=topic=4987.msg112582#msg112582 date=1535961318 ---"...Открих и още нещо - ако НС12 е закачено за Ардуиното дава същата грешка, че не може да качи програмата. Когато го махна този модул програмата се качва без никакви проблеми..."
Павка, мисля, че точно това ти е проблема. Когато програмираш Ардуино, задължително изключващ комуникационнивя модул!
--- Край на цитат ---
Да, така ме посъветваха. Вече така го правя, но явно съм го съсипал нещо, защото вече не работи.
mitko0888:
Павка, първо:
При качване на програмите през USB порта не трябва да има нищо закачено на пинове 0 и 1, или ако има нещо то да не им пречи. Независимо дали е HC12 или каквото и да е.
Другото е малко заигравка, на мен не ми харесва и ако можеш го напиши по друг начин, защото не ми е ясно:
- Какво прави Ardo2.println(16)?
- кой ти каза че можеш да използваш функциите от Serial в SoftwareSerial? Гледам Ardo2.parseInt(). Не казвам че не става, ама не съм сигурен.
Освен това при четенето на бутончето според мен задължително използвай макар и най-простата проверка, напр.
четеш бутона, ако е HIGH -> правиш delay(50), четеш пак бутона. Ако пак е HIGH приемаш че е натиснат. Не е нужно да използваш debounce, но поне това сложи, върши работа.
А и на бутоните е добре единият край да е на минус, на маса, на земя или както се нарича. За да не гърми плюса при късо. Тогава при натиснат бутон ще четеш LOW. При инициализацията го правиш pinMode(5, INPUT_PULLUP);
Другото е добре да го оправиш във второто ардуино - като му дадеш една команда да не се бърка докато не я изпълни и дойде втора.
pavel75:
--- Цитат на: mitko0888 link=topic=4987.msg112584#msg112584 date=1535968876 ---Павка, първо:
При качване на програмите през USB порта не трябва да има нищо закачено на пинове 0 и 1, или ако има нещо то да не им пречи. Независимо дали е HC12 или каквото и да е.
Другото е малко заигравка, на мен не ми харесва и ако можеш го напиши по друг начин, защото не ми е ясно:
- Какво прави Ardo2.println(16)?
- кой ти каза че можеш да използваш функциите от Serial в SoftwareSerial? Гледам Ardo2.parseInt(). Не казвам че не става, ама не съм сигурен.
Освен това при четенето на бутончето според мен задължително използвай макар и най-простата проверка, напр.
четеш бутона, ако е HIGH -> правиш delay(50), четеш пак бутона. Ако пак е HIGH приемаш че е натиснат. Не е нужно да използваш debounce, но поне това сложи, върши работа.
А и на бутоните е добре единият край да е на минус, на маса, на земя или както се нарича. За да не гърми плюса при късо. Тогава при натиснат бутон ще четеш LOW. При инициализацията го правиш pinMode(5, INPUT_PULLUP);
Другото е добре да го оправиш във второто ардуино - като му дадеш една команда да не се бърка докато не я изпълни и дойде втора.
--- Край на цитат ---
При качване на програмите през USB порта не трябва да има нищо закачено на пинове 0 и 1, или ако има нещо то да не им пречи. Независимо дали е HC12 или каквото и да е. - Това го научих по трудния начин
Другото е малко заигравка, на мен не ми харесва и ако можеш го напиши по друг начин, защото не ми е ясно:
- Какво прави Ardo2.println(16)? - Това беше да праща сигнал към първото ардуино. Виж, че е в коментар сега. Забравил съм да го изтрия
- кой ти каза че можеш да използваш функциите от Serial в SoftwareSerial? Гледам Ardo2.parseInt(). Не казвам че не става, ама не съм сигурен. - Гледах примерите от този сайт - https://www.instructables.com/id/Long-Range-18km-Arduino-to-Arduino-Wireless-Commun/
Освен това при четенето на бутончето според мен задължително използвай макар и най-простата проверка, напр.
четеш бутона, ако е HIGH -> правиш delay(50), четеш пак бутона. Ако пак е HIGH приемаш че е натиснат. Не е нужно да използваш debounce, но поне това сложи, върши работа. - Да, това го знаех като проблем, но щях да го оправя по-натам. Сега исках да тествам нещата, който не съм правил никога.
А и на бутоните е добре единият край да е на минус, на маса, на земя или както се нарича. .... Бутона е вързан по следния начин - единият извод е на захранването, другият на пина на ардуиното, като самият пин през съпротивление 1 килоом е вързан на маса.
Другото е добре да го оправиш във второто ардуино - като му дадеш една команда да не се бърка докато не я изпълни и дойде втора.
Тъпото е, че не разбрах какво му направих на тоя модул. Ако знаех как и с какво съм го изгорил или каквото му се е случило щях следващият път да го избегна. Сега като не съм наясно може пак да свърша същата тъпотия.
Навигация
[0] Списък на темите
Премини на пълна версия