Есть программка: Код (C++): // Подключаем библиотеку для работы с жидкокристаллическим // экраном (англ. Liquid Crystal Display или просто LCD) #include <LiquidCrystal.h> //Выводит сообщения, помогает при определинии //пороговых необходимых пороговых значений #define PRINT_MESSAGES // Задает используемые цифровые выходы #define CAMERA_FLASH_PIN 3 #define LASER_PIN 4 //Задает вход высоты (задержка) #define HEIGHT_PIN A0 //Задает вход порогового значения срабатывания лазерного триггера #define LASER_THRESSHHOLD_PIN A1 //Задает вход срабатывания на номер капли #define SET_NUMBER_DROP_PIN A2 // Задает используемые аналоговые входы фоторезистора #define LASER_TRIGGER_ANALOG_PIN A3 //Пороговые значения для срабатывания триггера //Определяются в зависимости от окружающих факторов //LASER_THRESHHOLD 813 // Объявляем объект, для управления дисплеем. Для его создания // необходимо указать номера пинов, к которым он подключен в // порядке: RS E DB5 DB6 DB7 DB8 LiquidCrystal lcd(13, 12, 11, 10, 9, 8); int NumberDrop=1; void setup() { // начинаем работу с экраном. Сообщаем объекту количество // строк и столбцов. Опять же, вызывать pinMode не требуется: // функция begin сделает всё за нас //lcd.begin(16, 2); pinMode(CAMERA_FLASH_PIN, OUTPUT); digitalWrite(CAMERA_FLASH_PIN, LOW); pinMode(LASER_PIN, OUTPUT); digitalWrite(LASER_PIN, HIGH); pinMode(HEIGHT_PIN, INPUT_PULLUP); pinMode(LASER_THRESSHHOLD_PIN, INPUT_PULLUP); pinMode(SET_NUMBER_DROP_PIN, INPUT_PULLUP); pinMode(LASER_TRIGGER_ANALOG_PIN, INPUT_PULLUP); #ifdef PRINT_MESSAGES Serial.begin(9600); // открыть серийный порт #endif } //void LcdDATA () //функция вывода на LCD дисплей //{ // устанавливаем курсор, колонку 0, строку 0. На деле — это // левый квадрат 1-й строки, т.к. нумерация начинается с нуля // lcd.setCursor(0, 0); // lcd.print("Laser Scan:"); // lcd.print(laserVal, DEC); // lcd.print(" "); // устанавливаем курсор, колонку 0, строку 1. На деле — это // левый квадрат 2-й строки, т.к. нумерация начинается с нуля // lcd.setCursor(0, 1); // lcd.print("FlashDelay:"); // lcd.print(SpeedDrop, DEC); // lcd.print(" "); // lcd.print("ms"); //} void loop() { // считывание показаний потенциометра высоты (240) задержка int SpeedDrop = analogRead(HEIGHT_PIN); SpeedDrop = map(SpeedDrop, 0, 1023, 20, 300); SpeedDrop = constrain(SpeedDrop, 20, 300); // считывание показаний потенциометра чуствительности (813) int LASER_THRESHHOLD = analogRead(LASER_THRESSHHOLD_PIN); LASER_THRESHHOLD = map(LASER_THRESHHOLD, 0, 1023, 700, 900); LASER_THRESHHOLD = constrain(LASER_THRESHHOLD, 700, 900); // считывание показаний потенциометра количества капель (2) int SetNumberDrop = analogRead(SET_NUMBER_DROP_PIN); SetNumberDrop = map(SetNumberDrop, 0, 1023, 1, 10); SetNumberDrop = constrain(SetNumberDrop, 1, 10); int laserVal; //////////////////////////////////////////////////////////// // Лазерный сенсор //////////////////////////////////////////////////////////// laserVal = analogRead(LASER_TRIGGER_ANALOG_PIN); if (laserVal < LASER_THRESHHOLD) { NumberDrop = NumberDrop + 1; if (NumberDrop > SetNumberDrop) { delay(SpeedDrop); NumberDrop = 1; digitalWrite(CAMERA_FLASH_PIN, HIGH); #ifdef PRINT_MESSAGES Serial.println("Flash Triggered!!!"); #endif delay(100); digitalWrite(CAMERA_FLASH_PIN, LOW); } } #ifdef PRINT_MESSAGES Serial.print("Laser: "); Serial.print(laserVal, DEC); Serial.print("Laser Threshhold: "); Serial.print(LASER_THRESHHOLD, DEC); Serial.print("NumbeDrop: "); Serial.print(NumberDrop, DEC); Serial.print("SetNumbeDrop: "); Serial.print(SetNumberDrop, DEC); Serial.print("Height: "); Serial.println(SpeedDrop, DEC); #endif } До того как сконфигурировал аналоговые порты как pinMode(HEIGHT_PIN, INPUT_PULLUP); было pinMode(HEIGHT_PIN, INPUT); все переменные регулировались одним резистором подключеным на любой из портов одновременно Почему?
вы с аналоговыми входами что то намудрили почитайте http://arduino.ru/Tutorial/AnalogInputPins pinMode(LASER_THRESSHHOLD_PIN, INPUT_PULLUP); pinMode(SET_NUMBER_DROP_PIN, INPUT_PULLUP); pinMode(LASER_TRIGGER_ANALOG_PIN, INPUT_PULLUP); - ВЫКИНУТЬ!!!!!!!!!!!!!!!!!
Я ж объясняю. Когда я выкидываю этот код, то один резистор установленый на любой из этих портов регулирует их все вместе - параллельно, т.е. резистор на А0, но при его вращении происходит и изменемя по пинам А1 А2 А3. когда же включаю INPUT_PULLUP - все становится нормально - из за чего это может быть?
Captain mode=true; Может быть потому, что INPUT_PULLUP подключает внутренний подтягивающий резистор? Captain mode=false;