Есть вопрос, уважаемые программисты.

Tris
Offline
Зарегистрирован: 11.01.2016

Здравствуйте. Я новичек в работе с arduino. Недавно встретился с проблемой. Проект такой: есть движковый резистор alpha A10k. Подключён к аналоговому входу А0. Программно разделил входящие данные на 133, чтобы получились значения от 0 до 9. Мне нужно, чтобы при определённом положении резистора срабатывал сигнал на реле. Это возможно? Помогите пожалуйста с кодом. Вот что я написал:


#define ZAMOK 11
void setup() {

  Serial.begin(9600);
pinMode (ZAMOK,OUTPUT);
}
int x = 0;
void loop() {
digitalWrite (ZAMOK,HIGH);
x=analogRead(A0)/113;
Serial.println(x);
if (x==2);
{
Serial.print("open");
digitalWrite (ZAMOK,!ZAMOK);
}}

Не работает реле и в мониторе порта постоянно "open". ПОМОГИТЕ!!!!!!!

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

строка 15

digitalWrite (ZAMOK, LOW);

http://arduino.ru/Reference/DigitalWrite

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

UPD: Для начала строка 12, в конце лишняя точка с запятой.

 

MacSim
Offline
Зарегистрирован: 28.11.2012

написанное выше.

+ программа работает один раз. зациклите. ваил(1) {}

2*113=226. поймаите 226(грубо) откроется.

уберите деление, проверяйте лучше промежуток больше или/и меньше <>

да и схему подключения своего резистора покажите, а то может что напутали

MacSim
Offline
Зарегистрирован: 28.11.2012

Tris пишет:

Здравствуйте. Я новичек

Не работает реле

Подайте питание на реле. сщелкает? (проверьте тестером на замыканее контактов) Работает.

Не в реле дело. правьте код прошивки.

Tris
Offline
Зарегистрирован: 11.01.2016

Здравствуйте!

Спасибо всем за ответы. Исправил ";", "ZAMOK, LOW".

Не понимаю что значит "зациклить ваил"

Из резистора 4 контакта под номерами 1,2,2,3. Один контакт 2 на землю, 1 и 3 на сигнал и на +5.

С подключением должно быть всё в порядке,т.к. мониторинг портов рисует символы от 0 до 9 взависимости от положения.

Короче, пока не работает. Ломаю мозг дальше. Сегодня попробую всё таки убрать знак деления и подбирать промежутки.

Tris
Offline
Зарегистрирован: 11.01.2016

Вот, кое что изменил. Теоретически должно работать, но нет.

#define ZAMOK 11
void setup() {
  Serial.begin(9600);
pinMode (ZAMOK,OUTPUT);
}
int x = 0;
void loop() {
digitalWrite (ZAMOK,HIGH);
x=analogRead(A0);
Serial.println(x);
if (x>20&&x<40)
{
digitalWrite (ZAMOK,!digitalRead(ZAMOK));
}}

 

__Alexander
Offline
Зарегистрирован: 24.10.2012

он у вас в цикле крутится, постоянно выполняя обе команды.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

строка 4, вы установили ZAMOK как выход и пытаетесь считать строка 13?

digitalWrite (ZAMOK,LOW);

строку 8 перенести в setup или в добавить 14 строкой else и перенести туда

 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015
#define ZAMOK 11
void setup() {
  Serial.begin(9600);
pinMode (ZAMOK,OUTPUT);
digitalWrite (ZAMOK,HIGH);
}
int x = 0;
void loop() {
x=analogRead(A0);
Serial.println(x);
if (x>20&&x<40)
{
digitalWrite (ZAMOK,LOW);
}
else
{
digitalWrite (ZAMOK,HIGH);
}}

 

Tris
Offline
Зарегистрирован: 11.01.2016

Заработало!!!!!!!!!!!!!!

Спасибо, Друзья огромное за помощь! Отдельное Гран мерси Valera19701!