Изменение состояния отдельных пинов из масива

Нет ответов
VOS
Offline
Зарегистрирован: 07.08.2015

Всем здравствуйте. Чтоб вы не удивлялись последующим глупостям, предупрежу - я новичок и тему для новичков читал и кучу всего пробовал сам (при запросе приложу 100500 гавнокодов). Теперь на форум уповаю.

Ситуация такая: Есть софтовый ДТМФ декодер (сигнал с мобилы превращает в управление на УНО). В коде есть массив пинов, который при старте весь делается HIGH, а при поступлении сигнала - LOW на 1 секунду.

#include <DTMF.h>
int sensorPin = A0;
float n = 128.0;
float sampling_rate = 8926.0;
DTMF dtmf = DTMF(n, sampling_rate);
float d_mags[8];
char thischar;
int ledPins[] = { // Массив для 10 PINS / реле.
2, 3, 5, 6, 7, 8, 9, 10, 11, 12 // 4-Pin, используется библиотекой!
};
void setup() {
for (int i = 0; i <= 9; i++) {
pinMode(ledPins[i], OUTPUT); // Весь массив ledPins делаем OUTPUT.
digitalWrite(ledPins[i], HIGH); // Весь массив ledPins делаем HIGH.
}
}
void loop() {
dtmf.sample(sensorPin);
dtmf.detect(d_mags, 506);
thischar = dtmf.button(d_mags, 1800.);
if (thischar) {
digitalWrite(ledPins[thischar - 48], LOW);
delay(1000);
digitalWrite(ledPins[thischar - 48], HIGH);
}
}

 В основном, УНО управляет релюхами, но с пинов 7,8,9 (на телефонне клавиши 4,5,6) нужно управлять серво SG90. Для этого планировал с пинов 7,8,9 на уно отдать сигнал на пины 5,6,7 на НАНО, которая через 12-й пин управляет сервой.



#include "Servo.h"
Servo servoMain; // Объект Servo
void setup()
{
  servoMain.attach(12); // Servo присоединен к 12 выводу
    pinMode(5, INPUT);
    pinMode(6, INPUT);
    pinMode(7, INPUT);
} 
void loop()
{
  servoMain.write(90);
 if(digitalRead(5) == HIGH) // Условие 1-й кнопки
  {
   servoMain.write(45);  // Повернуть серво влево на 45 градусов
  }
 if(digitalRead(6) == HIGH) // Условие 2-й кнопки
  {
   servoMain.write(90);  // Вернуть серво вцентр
  }
 if(digitalRead(7) == HIGH) // Условие 3-й кнопки
  {
   servoMain.write(135);  // Повернуть серво вправо на 45 градусов
  }

Думал, что если в строках 13,17,21 напишу LOW, то серва нормально это примет, а она бестия трусится. Пробовал пины стягивать через 10к, как кнопки - не помогает.

Два варианта выхода из этой ситуации вижу

Наконец-то вопрос: 

1) Как сделать, чтоб все пины, кроме 7,8,9 остались, как есть, а эти же 7,8,9 стартовали с LOW и при своем сигнале на секунду делались HIGH?

 или

2) Как сделать, чтоб серва с НАНО управлялась сменой состояния с LOW на HIGH?

П.С.: Ели нуно знать зачем, то делаем с сыном катер (уже пару месяцев :) ). Сейчас заканчиваем и уперлись в руль.

Заранее блгодарен.