Ви не увійшли.
http://arduino-ua.com/prod1233-plata-ra … -discovery
я бы себе такой взял ) и поиграться есть где и все готово )
понял, изучаю.
nokia 3310 )
дисплей - это ваш выбор, что есть готовое и удовлетворяет по цене - используйте, ну и что б ног хватило, как обычно такие дисплеи с параллельной шиной, ног забирают много
nokia 3310 не подойдет, нужен цветной 3.2 дюйма
уже было )
сначала дисплей, а оставшиеся ноги для реле, любой порт общего назначения подойдет
сто осталось - проверите по свободным контактам )
может тогда дисплей посоветуете ?
ardnew с дисплеем уже сами ) либ для ардуино в глаза не видал ) там же еще и меню с картинками нужны,
согласен, сам попробую разобраться, ну уж про ноги то скажите, пожалуйста
начинаем тогда наверное с дисплея и подключаем как в примере написано )
а на все свободные ноги - релюхи
вот и хотелось бы узнать какие это ноги ?
так как в этой теме (ардуино), буквально меньше недели, знаний ноль
а этом проекте часом не будет еще езернета, usb джойстика и батарейного питания? добейте уже меня, чего мучать NoName
нет, этого ничего не будет
Тю, а какого дисплея с тачпадом?
пока не определился планирую 3.2 дюйма цветной.
уважаемые, подскажите, с каких портов меги 2560 лучше всего управлять реле,
в дальнейшем планируется подключение дисплея с тачпадом, с учетом его что бы реле не мешали ?
ardnew, если работает Serial.readStringUntil('\n'), не забудьте выбросить массив char[], пусть не болтается
.
да, убрал все лишние.
ardnew, это код ( String str = Serial.readStringUntil('\n'); ) неправильный!
данный алгоритм тормозит основной поток!!! выбросьте этот вариант и никогда не пользуйтесь!
ну вот, только обрадовался а как правильно ?
if (str == "Rele 1") {
digitalWrite(led11, HIGH);
}
когда то в последовательности if пропустил случайно скобку. Потом парился с нарушением логики работы кода.
Я бы посоветовал ardnew попробовать такой вариант, чем Wirg не шутит?
П.С. Посмотрите на эту последовательность if повнимательней чего то меня терзают смутные предчувствияс точки зрения синтаксиса.
фигурные скобки не помогли
void loop() { if (Serial.available() > 0) { // Serial.readBytes( input, 20 ); String str = Serial.readStringUntil('\n'); // String str= (String) input; if (str == "Rele 1") digitalWrite(led11, HIGH); if (str == "Rele 2") digitalWrite(led12, HIGH); if (str == "Rele 3") digitalWrite(led13, HIGH); if (str == "Rele 11") digitalWrite(led11, LOW); if (str == "Rele 22") digitalWrite(led12, LOW); if (str == "Rele 33") digitalWrite(led13, LOW); Serial.println (str) ; } }
возможно так
а чем управляющие команды передаете? с терминалки или есть некий софт?
ДА! этот код работает так как нужно, и с терминала и с программы !!!
NoName, я вам очень признателен за уделенное время и помощь !!!
Я бы посоветовал ardnew попробовать такой вариант, чем Wirg не шутит
?
П.С. Посмотрите на эту последовательность if повнимательней чего то меня терзают смутные предчувствияс точки зрения синтаксиса.
сейчас попробую и отпишусь.
возможно так
а чем управляющие команды передаете? с терминалки или есть некий софт?
ок, сейчас попробую, при отладке с терминала, а так с программы.
этот пример тоже хорош, но проверять строки нужно только по получению футера, \r\n например
эх.. если бы еще понять о чем вы говорите
так делать то что ?
все! эти три реле вынесли мне весь мозг! опять херня какая то!
сам код :
void loop()
{
if (Serial.available() > 0)
{
Serial.readBytes( input, 20 );
String str= (String) input;
if (str == "Rele 1") digitalWrite(led11, HIGH);
if (str == "Rele 2") digitalWrite(led12, HIGH);
if (str == "Rele 3") digitalWrite(led13, HIGH);
if (str == "Rele 11") digitalWrite(led11, LOW);
if (str == "Rele 22") digitalWrite(led12, LOW);
if (str == "Rele 33") digitalWrite(led13, LOW);
}
}
включаю по очереди все три реле, включаются, выключаю по очереди все три реле, выключаются, все, затем не могу включить не одно реле!
или, включаю реле 1, включается, выключаю реле 1, выключается, и опять не могу включить не одно реле!
что опять не так ?
Например так:
int x = sum[l_cnt] * V_REF;
int y = 1024 *NUM_SAMPLES;
voltage[l_cnt] = (float) x / y;Это я бы сказал вопрос не программирования а математики. И уберите те нули в V_REF и везде где они не значащие.
А вообщем из atmeg еще тот меритель.Но в такой точности вполне реально.
И последний вопрос, а реально компилировать вы программу пробовали?![]()
P.S. Проверил компилируется.
строку заменил, работает, и про нули, вы имеете ввиду 5 вместо 5.0 ?
Насколько Вам критична точность измерения напряжения? Вопрос не праздный, потому что увидел деление float на flot думаю что реальность в железе Вас сильно разочарует по сравнению с Протеусом. NoName железно прав в том что в МК нужно максимально избегать математических действий с float.
в принципе +-0.2 вольта меня устроит, но если есть вариант лучше, то конечно было бы очень интересно посмотреть, делал по примерам, в программировании не селен
вы вот эту строку имели ввиду: voltage[l_cnt] = ((float)sum[l_cnt] / (float)NUM_SAMPLES * V_REF) / 1024;
как правильно нужно ее сделать ?
Было...То что работало в Протеусе не работало в железе
, и наоборот. Поэтому с тех пор у меня своеобразное отношение к нему
.
понятно, ну не настолько сложная эта программа что нельзя ее симулировать в протеусе, но зато удобно очень
Опоньки, приехали, Протеус. Ноу коммент.
а что не так, каждые 3 минуты шить ардуино лучше ?
Хотел подсказать, но вы не хотите. Хуй с Вами
он всегда со мной, но я такой быстрый
Покажите свою программу
пока так :
#define NUM_SAMPLES 10
#define DIV_1 1.0
#define DIV_2 1.0
#define DIV_3 455
#define DIV_4 11.0718
#define DIV_5 50.0718
#define V_REF 5.000
int sum[5] = {0}; // sums of samples taken
unsigned char sample_count = 0; // current sample number
float voltage[5] = {0.0}; // calculated voltages
char l_cnt = 0; // used in 'for' loops
char input[20];
// Переменные для управления реле
int led11 = 11;
int led12 = 12;
int led13 = 13;
void setup()
{
Serial.begin(9600);
pinMode(led11, OUTPUT); // и режим работы 11-ого цифрового пина в качестве выхода
pinMode(led12, OUTPUT); // и режим работы 12-ого цифрового пина в качестве выхода
pinMode(led13, OUTPUT); // и режим работы 13-ого цифрового пина в качестве выхода
}
void loop()
{
// take a number of analog samples and add them up
while (sample_count < NUM_SAMPLES) {
// sample each channel A0 to A4
for (l_cnt = 0; l_cnt < 5; l_cnt++) {
sum[l_cnt] += analogRead(A0 + l_cnt);
}
sample_count++;
delay(10);
}
// calculate the voltage for each channel
for (l_cnt = 0; l_cnt < 5; l_cnt++) {
voltage[l_cnt] = ((float)sum[l_cnt] / (float)NUM_SAMPLES * V_REF) / 1024;
}
voltage[0] = voltage[0] * DIV_1;
voltage[1] = voltage[1] * DIV_2;
if (voltage[1]<1.0) voltage[1]=1.0;
voltage[2] = voltage[2] * DIV_3;
voltage[3] = voltage[3] * DIV_4;
voltage[4] = voltage[4] * DIV_5;
// voltage 1 - A (pin A0)
Serial.print("A ");
Serial.print(voltage[0], 2);
// voltage 2 - B (pin A1)
Serial.print("B ");
Serial.print(voltage[1], 2);
// voltge 3 - C (pin A2)
Serial.print("C ");
Serial.print((int)voltage[2], 1);
// voltage 4 - D (pin A3)
Serial.print("D ");
Serial.print((int)voltage[3], 1);
// voltage 5 - E (pin A4)
Serial.print("E ");
Serial.print((int)voltage[4], 1);
Serial.println("");
delay(10);
// reset count and sums
sample_count = 0;
for (l_cnt = 0; l_cnt < 5; l_cnt++) {
sum[l_cnt] = 0;
}
// Ввод данных
if (Serial.available() > 0)
{
Serial.readBytes( input, 20 );
String str= (String) input;
if (str == "Rele 1") digitalWrite(led11, HIGH);
if (str == "Rele 2") digitalWrite(led12, HIGH);
if (str == "Rele 3") digitalWrite(led13, HIGH);
}
}
Ну...
если "задержка" тогда нужно мониторить порт компьтера. Предполагаю что 90% это вопрос компьютерной программы и оставляю 10% на тормоз системы.
я понял, это не столь критично, да и возможно эти задержки в самом компьютере, виртуальный порт, протеус, это мелочь.
Понятно что могут быть накладки и не четкое срабатывание (именно накладки в порте компьютера). Одна команда не ушла а другая уже записалась а потом вместе улетели. А ардуино получило "Relay 1Relay 2" и впало в ступор с чем сравнивать. В таком случае больше подходит алгоритм NoName
.
остановлюсь на вашем варианте, мне он более понятен, а накладки возможно как и сказал выше от конфигурации компа.
последний момент-просьба
как все таки более грамотно написать код для коммутации, у меня две группы, по 6 и 4 реле, и три одиночных реле, всего 13 шт. к каким портам ардуино их лучше подключить ?
Что вы хотите сделать
коммутацию различных устройств.