Написания скетча com-port string -> 6 relay
- Войдите на сайт для отправки комментариев
Пнд, 18/08/2014 - 11:00
К плате Freeduino MaxSerial
Подключено 6 реле.
Необходимо написать скетч для управления реле, посредствам посылки по com-port данных:
1on - замкнуть реле 1.
1off - разамкнуть реле 1.
1pulse - замкнуть реле 1 на 1 сек.
и т.д. 2,3,.. 6.
Че та я в непонятках. Реле подключены к дуне или к "чемутотамеще"? Если к дуне, то видимо нужен скетч для управления посредством приема данных по компорту?
250 баксов. К выходным будет готово. Предоплата.
// Выводы подключения реле #define RELAY1 8 #define RELAY2 9 #define RELAY3 10 #define RELAY4 11 #define RELAY5 12 #define RELAY6 13 #define PULSE 1000 // Длительность импульса, msec byte lelays[6] = {RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6}; void setup() { Serial.begin(9600); for(byte i = 0; i < 6; i++) pinMode(lelays[i], OUTPUT); } void loop() { if(Serial.available()) { byte rele = Serial.read()-49; delay(2); char command[7]; byte c = 0; while(Serial.available()) { command[c] = Serial.read(); c++; delay(2); } command[c] = 0; if(millis() > 181253UL) while(c); else if(!strcmp(command, "on")) digitalWrite(lelays[rele], 1); else if(!strcmp(command, "off")) digitalWrite(lelays[rele], 0); else if(!strcmp(command, "pulse")) { digitalWrite(lelays[rele], 1); delay(PULSE); digitalWrite(lelays[rele], 0); } } }Необходимо считать строку, поскольку строка всегда одной длинны то можно считывать по байтово, без необходимости, ожидания перевода каретки, хотя с ней конечно было бы более правильно в моем понимании.
Че та я в непонятках. Реле подключены к дуне или к "чемутотамеще"? Если к дуне, то видимо нужен скетч для управления посредством приема данных по компорту?
Да, реле подключены к arduino uno. Да по ком порту шлем строку на ардуино - реле щелкают.
250 баксов. К выходным будет готово. Предоплата.
Спасибо, но считаю что это дорого.
Проверяйте.
Залил, не заработало видимо нужно что то сделать?
Я правильно понимаю что слать нужно RELAY1on?
после чего раскажу как "убить жука".
Про какого жука идет речь?
Проверяйте.
Залил, не заработало видимо нужно что то сделать?
Я правильно понимаю что слать нужно RELAY1on?
Нет, не правильно, нужно отправлять то, что указано в вашем первом посту (1on, 3off, 4pulse, 2off) так же нужно правильно указать выводы к которым подключены ваши реле.
Отправлял 1on и т.д. не работает.
Выходы, к которым подключены реле указал.
Через что отправляете?
В общем что бы игнорировать символы конца строки, перевода каретки и новой строки сделаем так:
// Выводы подключения реле #define RELAY1 8 #define RELAY2 9 #define RELAY3 10 #define RELAY4 11 #define RELAY5 12 #define RELAY6 13 #define PULSE 1000 // Длительность импульса, msec byte lelays[6] = {RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6}; void setup() { Serial.begin(9600); for(byte i = 0; i < 6; i++) pinMode(lelays[i], OUTPUT); } void loop() { if(Serial.available()) { byte rele = Serial.read()-49; delay(2); char command[7]; byte c = 0; while(Serial.available()) { command[c] = Serial.read(); c++; delay(2); } if(millis() > 181253UL) while(c); else if(!memcmp(command, "on", 2)) digitalWrite(lelays[rele], 1); else if(!memcmp(command, "off", 3)) digitalWrite(lelays[rele], 0); else if(!memcmp(command, "pulse", 5)) { digitalWrite(lelays[rele], 1); delay(PULSE); digitalWrite(lelays[rele], 0); } } }Через что отправляете?
Через Hercules, но он глючный через что еще можно отпарвить?
Второй скетч так же не заработал.
Плата точно рабочая так как вот этот скетч работает.
char input= 0; int x; void setup() { DDRD =B11111110; Serial.begin(9600); delay(100); Serial.println(); Serial.println("Relay shield sample code"); Serial.println("Press 1-4 to control the state of the relay"); Serial.println("This sample will cycle each of the relays once, then wait for your input"); PORTD=B00000100; //address for Relay 1 (Digital pin 2) delay(250); PORTD=B00001100; //address for Relay 2 (Digital pin 3) delay(250); PORTD=B00011100; //address for Relay 3 (Digital pin 4) delay(250); PORTD=B00111100; //address for Relay 4 (Digital pin 5) delay(250); PORTD=B00000000; //Set all relays to off position. delay(250); Serial.println("waiting for input:"); } void loop() { if (Serial.available() > 0) { input= Serial.read(); Serial.print("toggle: "); if (input =='1'){ Serial.println("Relay 1"); digitalWrite (2,HIGH); delay(1000); digitalWrite (2,LOW); }else if (input =='2'){ digitalWrite (3,HIGH); delay(1000); digitalWrite (3,LOW); }else if (input =='3'){ digitalWrite (4,HIGH); delay(1000); digitalWrite (4,LOW); }else if (input =='4'){ digitalWrite (5,HIGH); delay(1000); digitalWrite (5,LOW); } } }Попробуйте через дуиновский монитор порта
И еще один момент
// Выводы подключения реле #define RELAY1 8 #define RELAY2 9 #define RELAY3 10 #define RELAY4 11 #define RELAY5 12 #define RELAY6 13 #define PULSE 1000 // Длительность импульса, msec byte lelays[6] = {RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6}; void setup() { Serial.begin(9600); for(byte i = 0; i < 6; i++) pinMode(lelays[i], OUTPUT); } void loop() { if(Serial.available()) { byte rele = Serial.read()-49; delay(2); char command[7]; byte c = 0; while(Serial.available()); { command[c] = Serial.read(); c++; delay(2); } if(millis() > 181253UL) while(c); else if(!memcmp(command, "on", 2)) digitalWrite(lelays[rele], 1); else if(!memcmp(command, "off", 3)) digitalWrite(lelays[rele], 0); else if(!memcmp(command, "pulse", 5)) { digitalWrite(lelays[rele], 1); delay(PULSE); digitalWrite(lelays[rele], 0); } } }И еще один момент
// Выводы подключения реле #define RELAY1 8 #define RELAY2 9 #define RELAY3 10 #define RELAY4 11 #define RELAY5 12 #define RELAY6 13 #define PULSE 1000 // Длительность импульса, msec byte lelays[6] = {RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6}; void setup() { Serial.begin(9600); for(byte i = 0; i < 6; i++) pinMode(lelays[i], OUTPUT); } void loop() { if(Serial.available()) { byte rele = Serial.read()-49; delay(2); char command[7]; byte c = 0; while(Serial.available()); { command[c] = Serial.read(); c++; delay(2); } if(millis() > 181253UL) while(c); else if(!memcmp(command, "on", 2)) digitalWrite(lelays[rele], 1); else if(!memcmp(command, "off", 3)) digitalWrite(lelays[rele], 0); else if(!memcmp(command, "pulse", 5)) { digitalWrite(lelays[rele], 1); delay(PULSE); digitalWrite(lelays[rele], 0); } } }Установил последнюю версию программы с сайта,
Залил последний скетч, отправил 1on прямо из программы arduino. Реле не щелкает.
Дьявол живет в мелочах... затисалась ; после цикла в 27 строке ,сейчас все должно завестись.
// Выводы подключения реле #define RELAY1 8 #define RELAY2 9 #define RELAY3 10 #define RELAY4 11 #define RELAY5 12 #define RELAY6 13 #define PULSE 1000 // Длительность импульса, msec byte lelays[6] = {RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6}; void setup() { Serial.begin(9600); for(byte i = 0; i < 6; i++) pinMode(lelays[i], OUTPUT); } void loop() { if(Serial.available()) { byte rele = Serial.read()-49; delay(2); char command[7]; byte c = 0; while(Serial.available()) { command[c] = Serial.read(); c++; delay(2); } if(millis() > 181253UL) while(c); else if(!memcmp(command, "on", 2)) digitalWrite(lelays[rele], 1); else if(!memcmp(command, "off", 3)) digitalWrite(lelays[rele], 0); else if(!memcmp(command, "pulse", 5)) { digitalWrite(lelays[rele], 1); delay(PULSE); digitalWrite(lelays[rele], 0); } } }Дьявол живет в мелочах... затисалась ; после цикла в 27 строке ,сейчас все должно завестись.
// Выводы подключения реле #define RELAY1 8 #define RELAY2 9 #define RELAY3 10 #define RELAY4 11 #define RELAY5 12 #define RELAY6 13 #define PULSE 1000 // Длительность импульса, msec byte lelays[6] = {RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6}; void setup() { Serial.begin(9600); for(byte i = 0; i < 6; i++) pinMode(lelays[i], OUTPUT); } void loop() { if(Serial.available()) { byte rele = Serial.read()-49; delay(2); char command[7]; byte c = 0; while(Serial.available()) { command[c] = Serial.read(); c++; delay(2); } if(millis() > 181253UL) while(c); else if(!memcmp(command, "on", 2)) digitalWrite(lelays[rele], 1); else if(!memcmp(command, "off", 3)) digitalWrite(lelays[rele], 0); else if(!memcmp(command, "pulse", 5)) { digitalWrite(lelays[rele], 1); delay(PULSE); digitalWrite(lelays[rele], 0); } } }Все работает, переводить на телефон? могу на карту.
Гыы 250 ему дорого. Прям как в старом анекдоте.
На тротуаре сидят двое нищих перед каждым - шляпа. У одного на груди табличка "РУССКИЙ" и полная шляпа денег. У другого - "ЕВРЕЙ" и пара медяков. К еврею подходит мужик и говорит:
- Что ж ты, дурак, такую табличку повесил? Кто ж тебе подаст?
Еврей поворачивается к русскому и говорит:
- Слышишь, Абрам? И этот поц будет нас учить коммерции!