Помогите пожалуйста избавиться от digitalRead и digitalWrite
- Войдите на сайт для отправки комментариев
Пнд, 08/05/2017 - 22:52
Помогите пожалуйста избавиться от digitalRead () и digitalWrite () не могу понять, запутался очень.
Контроллер Arduino pro mini 328p
Код вот такой:
#include <OneWire.h> #include <RemoteReceiver.h> #include <Ultrasonic.h> Ultrasonic ultrasonicNIZ(11, 10); Ultrasonic ultrasonicVERX(12, 9); int ledPin = 13; const int pinPhoto = A0; int Svet = 0; int AAWWE = 0; byte PL = 2; byte PD = 2; int dataPin1 = 6; int latchPin1 = 5; int clockPin1 = 8; int dataPin2 = 4; int latchPin2 = 3; int clockPin2 = 7; unsigned long receivedCode; unsigned int period; int incomingByte; void setup() { RemoteReceiver::init(0, 0, showCode); pinMode(latchPin1, OUTPUT); pinMode(clockPin1, OUTPUT); pinMode(dataPin1, OUTPUT); pinMode(ledPin, OUTPUT); pinMode(latchPin2, OUTPUT); pinMode(clockPin2, OUTPUT); pinMode(dataPin2, OUTPUT); pinMode(pinPhoto, INPUT); Serial.begin(115200);} void showCode(unsigned long receivedCode, unsigned int period) { digitalWrite(ledPin, HIGH); delay (100); digitalWrite(ledPin, LOW); Svet = analogRead (pinPhoto);// Svet переменная света. float dist_cm = ultrasonicNIZ.Ranging(CM); float dist_cm2 = ultrasonicVERX.Ranging(CM); if (PL == 1) {digitalWrite(latchPin2, LOW); shiftOut(dataPin2, clockPin2, LSBFIRST, B01111111); shiftOut(dataPin2, clockPin2, LSBFIRST, B01111111); digitalWrite(latchPin2, HIGH); delay(30);}
Я смог только понять вот это и то не могу поять верно или нет
DDRD = DDRD | B11111000; DDRB = DDRB | B00100001; DDRC = DDRC | B00000000;
http://arduino.ru/forum/programmirovanie/simmetrichnyi-multivibrator-na-...
// digitalWrite(ledPin, HIGH);
А почему там 5 а не 6 ?
8-9-10-11-12-13, почему 5 ?
DDRB &= ~(1<<5); // сконфигурировать пин PB5 (D13) на вход. Равносильно pinMode(13, INPUT);
DDRB |= (1<<5); // сконфигурировать пин PB5 (D13) на выход. Равносильно pinMode(13, OUTPUT);
PORTB &= ~(1<<5); // установить на пине PB5 (D13) лог 0. Равносильно digitalWrite(13, LOW);
PORTB |= (1<<5); // установить на пине PB5 (D13) лог 1. Равносильно digitalWrite(13, HIGH);
Потому что пин PB5 (пятый пин порта B). Читайте дальше, там есть про распиновку.
Спасибо большое, я начинаю монимать кажется.
Вот в этой статье даже картинка есть - соответсвие пинов чипа пинам ардуины.
Парни проверьте плиз запутался в самой прорамме как заменить шифтаут или аналог реад
shiftОut нельзя заменить одной командой. В файле c:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\wiring_shift.c определяется эта команда. По образу и подобию можно написать свою c заменой digitalWrite работающую быстрее и занимающую меньше места.
analogRead заменять не имеет смысла. Она и так написана нормально.
OdinTakoi, зачем Вам 2 набора latchPin/dataPin/clockPin?
По-хорошему это надо делать на аппаратном SPI, если нужна скорость.
Опять же, если нужна скорость, не следует без нужды применять плавающую точку.
Про shiftОut поня, не осилю.
Про аналогреад понял смысла нет.
2 набора потому что 4 сдвиговых регистра управляющиеся в корне по разному, 2 шт от датчика движения и 2 от света по времени.
Какая разница, одинаково или по-разному? Уникальным должен быть только пин выбора устройства, а остальные пины могут быть общими. У меня, например, к одним и тем же пинам пподключены:
- цепочка входных сдвиговых регистров,
- цепочка выходных сдвиговых регистров,
- несколько АЦП,
- цифровой сигнальный процессор.
Афигеть ты мозг)))))))))))
я так не смогу(((((
А где.. ключевая фраза- я тобой горжусь :)
Вообще-то вопрос не в том, чтобы кто-то кем-то гордился, а в том, что микроконтроллер располагает средствами, позволяющими довольно экономно общаться с массой разнообразной периферии. И раз такие средства существуют, имено ими и нужно пользоваться, а не изобретать собственные костыли, которые обеспечивают гораздо меньшие возможности при гораздо большей ресурсоемкости.
Помогите пожалуйста избавиться от digitalRead () и digitalWrite () не могу понять, запутался очень.
Контроллер Arduino pro mini 328p
Если тяжело - посмотрите на библиотеку CyberLib