Работа с мультиплексором
- Войдите на сайт для отправки комментариев
Добрый день!
Ребят, подскажите пожалуйста! У меня есть необходимость управлять сервоприводами (подключены 8 серво при помощи сдвигового регистра 74HC595) при помощи фоторезисторов (их тоже 8, подключены к мультиплексору 4051) путём преобразования процента освещённости фоторезистора в процент поворота сервопривода.
Управляется всё то дело с Arduino Uno на базе Atmega 328. А теперь сама проблема: ардуинка имеет толь 6 аналоговых входов, мне пока что необходимо минимум 8, и поэтому стал использовать мультиплексор. Для начала просто тренировался получать на компьютер данные с контроллера (8 фоторезисторов с мультиплексором) - всё работало отлично! Но вот когда стал уже полученные значения (с фоторезисторов подключенных через мультиплексор к контроллеру) использовать в контроллере и расчитывать угол поворота сервоприводов - то одним фоторезистором я почему то управляю всеми сервоприводами.....
Вот код прошивки ардуинки:
#include <LineDriver.h>
#include <SPI.h>
#include <SPI_Bus.h>
#include <ServoExt.h>
#define S0 2
#define S1 3
#define S2 4
SPI_Bus shreg(_8bit, 10);
Servo servos[8] = { &shreg, &shreg, &shreg, &shreg, &shreg, &shreg, &shreg, &shreg };
void setup ( )
{
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(10, OUTPUT);
for (int i = 0; i < 8; i++)
{
servos[i].attach(i);
}
Serial.begin(9600);
}
void loop ( )
{
for ( int i = 0 ; i < 8 ; i++)
{
digitalWrite(S0, (i >> 0) & 0x01);
digitalWrite(S1, (i >> 1) & 0x01);
digitalWrite(S2, (i >> 2) & 0x01);
int Z = analogRead(A0);
int val = (Z/10.24)*1.8;
servos[i].write(val);
}
}
Помогите пожалуйста сделать управление таким что бы каждый фоторезистор управлял своим сервоприводом.
Народ, кто то может помочь?
for ( int i = 0 ; i < 8 ; i++) { digitalWrite(S0, (i >> 0) & 0x01); digitalWrite(S1, (i >> 1) & 0x01); digitalWrite(S2, (i >> 2) & 0x01); delay(5); int Z = analogRead(A0); int val = (Z/10.24)*1.8; servos[i].write(val); }... - то одним фоторезистором я почему то управляю всеми сервоприводами.....
Вот код прошивки ардуинки:
Что означают параметры в SPI_Bus shreg(_8bit, 10); ?
Эта команда назначает SS-slave select (CS-chip select) ?
for(inti = 0; i < 8; i++)20{21servos[i].attach(i);22}