Передача значений по serial. Что я делаю не так?
- Войдите на сайт для отправки комментариев
Сб, 25/05/2013 - 08:58
Здравствуйте. Необходимо передать с 1-й ардуины по сериал-порту на 2-ю несколько значений.
Написал код передатчика, где при вращении ручки переменника его значение отправляется в порт.
Также написал код приемника, где в зависимости от принятого значения изменяется яркость светодиода.
Но когда все соединил воедино. на 2-й ардуине не загорается и не регулируется светодиод.
(rx 1-й соединил с tx второй, и наоборот) (это моя первая программа на ардуино)
Код передатчика:
// Передатчик команд управления v0.2 // Органы управления - 2 переменника, 2 кнопки. // Исполнительные механизмы - 1 сервомашинка, 2 светодиода. //Цель: (уже неактуальна!!!) // а)при нажатии кнопки1 отправить в сериал-порт информацию о текущем значении. (кнопка с фиксацмей значения) // б)при нажатии кнопки2 отправить в сериал-порт информацию о текущем значении. (кнопка без фиксации значения // в)при вращении ручки потенциометра1 отправить в сериал-порт информацию о текущем значении. // г)при вращении ручки потенциометра2 отправить в сериал-порт информацию о текущем значении. // д)вывести информацию о состоянии всех органов управления в мониторе порта. int pot1x = 0; //Обьявляем А0 аналоговый пин считывания показаний потенциометра1 (ось x) (погружение-всплытие) int pot1y = 1; //Обьявляем А1 аналоговый пин считывания показаний потенциометра1 (ось y) (неиспользуется) int pot2x = 2; //Обьявляем А0 аналоговый пин считывания показаний потенциометра2 (ось x) (влево-вправо) int pot2y = 3; //Обьявляем А1 аналоговый пин считывания показаний потенциометра2 (ось y) (вперед-назад) int knopka1 = 3; //кнопка1 подключена к 3 цифровому контакту (фиксируемая) (освещение 1) int knopka2 = 4; //кнопка2 подключена к 4 цифровому контакту (фиксируемая) (освещение 2) int knopka3 = 5; //кнопка3 подключена к 5 цифровому контакту (фиксируемая) (освещение 3) int knopka4 = 6; //кнопка4 подключена к 6 цифровому контакту (фиксируемая) (освещение 4) int knopka7 = 7; //кнопка7 подключена к 7 цифровому контакту (манипулятор - расжать) int knopka8 = 8; //кнопка8 подключена к 8 цифровому контакту (манипулятор - сжать) int knopka9 = 9; //кнопка9 подключена к 9 цифровому контакту (камера - вверх) int knopka11 = 10; //кнопка11 подключена к 10 цифровому контакту (камера - вниз) int knopka12 = 11; //кнопка12 подключена к 11 цифровому контакту (резервная) int motorPin = 12; //моторы в пульте управления подключены к 12 цифровому контакту int ledPin = 13; //светодиод в пульте управления подключен к 13 цифровому контакту void setup() { analogReference(DEFAULT); //Объявляем диапазон чтения с аналогового порта. Значение DEFAULT оставляем, если используем переменные резистры (в моем случае 10ком) (считывание от 0 до 5вольт) Serial.begin(9600); //Включаем сериал-порт pinMode(ledPin, OUTPUT); // Инициализируем 13 выход под светодиод. pinMode(knopka1, INPUT); //отмечаем контакт кнопки 1 - как вход digitalWrite(knopka1, HIGH); // включить подтягивающий резистор к питанию. pinMode(knopka2, INPUT); //отмечаем контакт кнопки 2 - как вход digitalWrite(knopka2, HIGH); // включить подтягивающий резистор к питанию. pinMode(knopka3, INPUT); //... digitalWrite(knopka3, HIGH); pinMode(knopka4, INPUT); digitalWrite(knopka4, HIGH); pinMode(knopka7, INPUT); digitalWrite(knopka7, HIGH); pinMode(knopka8, INPUT); digitalWrite(knopka8, HIGH); pinMode(knopka9, INPUT); digitalWrite(knopka9, HIGH); pinMode(knopka11, INPUT); digitalWrite(knopka11, HIGH); pinMode(knopka12, INPUT); digitalWrite(knopka12, HIGH); } void loop() { // Печатаем в сериал-порт данные, как Анси текст. Serial.println(analogRead(pot1x)); //потенциометр 1x Serial.println(analogRead(pot1y)); //потенциометр 1y Serial.println(analogRead(pot2x)); //... Serial.println(analogRead(pot2y)); Serial.println(digitalRead(knopka1)); //кнопка 1 Serial.println(digitalRead(knopka2)); //кнопка 2 Serial.println(digitalRead(knopka3)); //... Serial.println(digitalRead(knopka4)); Serial.println(digitalRead(knopka7)); Serial.println(digitalRead(knopka8)); Serial.println(digitalRead(knopka9)); Serial.println(digitalRead(knopka11)); Serial.println(digitalRead(knopka12)); // Отправляем в сериал-порт данные в двоичном виде. Serial.write('a'); //метка начала передачи последовательности команд Serial.write(pot1x); //потенциометр 1x Serial.write(pot1y); //потенциометр 1y Serial.write(pot2x); //... Serial.write(pot2y); Serial.write(knopka1); //кнопка 1 Serial.write(knopka2); //кнопка 2 Serial.write(knopka3); //... Serial.write(knopka4); Serial.write(knopka7); Serial.write(knopka8); Serial.write(knopka9); Serial.write(knopka11); Serial.write(knopka12); delay(50); }
А вот код приемника:
тут вы отправляете всегда номера пинов, analogRead() не забыли?
Спасибо за ответ. Исправил. Но продолжаю ломать голову:
Вроде весь код приемника и передатчика прошерстил - но не работает как надо. То светодиоды беспорядочно мигают, то одновременно регулируются. Еще заметил, что светодиод tx моргает на передающей ардуине секунд 5-10, а затем горит постоянно. (а после отсоединения питания и повторного подключения он вообще не моргает. Не могу понять - может с кодом приемника или передатчика что-то не так?
Вот последний код передатчика:
И вот приемника: