Проблема ввода ультразвукового датчика Digispark Attiny85
Я пытался использовать ультразвук с платой digispark Attiny85 и использовал отдельные контакты для триггера и эха, а также использовал светодиодный контроллер MM5451 в качестве дисплея. Я успешно загрузил код, проблема в том, что контакт эха подключен к нему при запуске платы. останавливается/зависает, я не знаю, но код не работает, и если я подключаю эхо-вывод через несколько секунд после запуска платы, все работает нормально.
Ниже приведен код, который я написал
#define clock 0
#define data 1
#define trig 2
#define echo 3
byte c[5]={10,11,11,0,12};
long dist=0;
const uint8_t digits[15]={
B1110111,
B1000100,
B1101011,
B1101110,
B1011100,
B0111110,
B0111111,
B1100100,
B1111111,
B1111110,
B0111011,
B0010011,
B1011101,
B0111001,
B0000000
};
void setup()
{
pinMode(clock,OUTPUT);
pinMode(data,OUTPUT);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
digitalWrite(clock,LOW);
digitalWrite(data,LOW);
digitalWrite(trig,LOW);
}
void pulse()
{
delayMicroseconds(5);
digitalWrite(clock,HIGH);
delayMicroseconds(10);
digitalWrite(clock,LOW);
delayMicroseconds(5);
}
long ultrasonic(boolean ci)
{
long distance;
unsigned long pulsetime;
digitalWrite(trig,LOW);
delayMicroseconds(5);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
pulsetime=pulseIn(echo,HIGH);
if(ci)
{
distance=pulsetime/58;
}
else
{
distance=pulsetime/148;
}
delay(50);
if((distance<450)&&ci)
{
return distance;
}
else if((distance<180)&&(!ci))
{
return distance;
}
else
{
return 0;
}
}
void show(byte a[5])
{
delayMicroseconds(5);
digitalWrite(data,HIGH);
pulse();
for(byte x=0;x<5;++x)
{
byte data1=digits[a[x]];
for(byte y=0;y<7;++y)
{
if(data1&(1<<y))
{
digitalWrite(data,HIGH);
pulse();
}
else
{
digitalWrite(data,LOW);
pulse();
}
}
}
digitalWrite(data,LOW);
pulse();
}
void loop()
{
show(c);
delay(2000);
while(1)
{
dist=ultrasonic(true);
if(dist>0)
{
byte i=3;
c[4]=14;
c[0]=14;
c[1]=14;
c[2]=14;
c[3]=14;
while(dist>0)
{
c[i]=(dist%10);
if(i==0)
{
i=4;
}
dist/=10;
--i;
}
show(c);
}
delay(200);
}
}
@Balkrushna Kadam, 👍-1
1 ответ
▲ 1
Контакты 3 и 4 используются для USB (во время программирования). Вместо этого попробуйте использовать контакт 5.
Или поменяйте его местами с одним из выходов часов, данных или триггеров (например, 0,1,2)
,
@Gerben
Смотрите также:
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- (Код ультразвукового датчика: такого файла или каталога нет)
- Несколько неблокирующих таймеров обратного отсчета?
- Датчик HC-SR505 PIR выдает только HIGH уровень
- Отправка данных из ESP8266 в PHP
- Определение уровня заряда с помощью датчика тока (ACS758) с arduino uno
- Использование YS-IRTM с Arduino Uno
- Как объединить два разных скетча датчика в один полный скетч?
Гербен, спасибо за ваш повтор, я хочу упомянуть одну вещь: я использовал тот же код и включил digispark с моим телефоном otg, и он работает и не работает, когда я подключаю его к USB-выходу зарядного устройства телефона, странно, верно., @Balkrushna Kadam
Это действительно странно. Помогло ли мое предложение о замене / замене штифта?, @Gerben
Этот эхо-вывод отправлял импульс при запуске без триггера. и он возился с USB-сигналами загрузчика при запуске, из-за чего загрузчик зависал. Я сделал то, что вы сказали, поменял пин и все заработало. Но одна проблема заключается в том, что USB-сигналы при запуске возятся с моим дисплеем, отправляя неверные данные, я должен использовать контакты 3,4, потому что 5-й контакт не работает, он установлен как контакт сброса, моя плата является клоном digispark., @Balkrushna Kadam
Попробуйте другие комбинации. Как, например, использование контактов 3 и 4 для «trig» и «data». Насколько я могу судить, пульсирующий загрузчик не будет иметь много побочных эффектов., @Gerben