Проблема ввода ультразвукового датчика 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);
    }  
}

, 👍-1


1 ответ


1

Контакты 3 и 4 используются для USB (во время программирования). Вместо этого попробуйте использовать контакт 5.

Или поменяйте его местами с одним из выходов часов, данных или триггеров (например, 0,1,2)

,

Гербен, спасибо за ваш повтор, я хочу упомянуть одну вещь: я использовал тот же код и включил digispark с моим телефоном otg, и он работает и не работает, когда я подключаю его к USB-выходу зарядного устройства телефона, странно, верно., @Balkrushna Kadam

Это действительно странно. Помогло ли мое предложение о замене / замене штифта?, @Gerben

Этот эхо-вывод отправлял импульс при запуске без триггера. и он возился с USB-сигналами загрузчика при запуске, из-за чего загрузчик зависал. Я сделал то, что вы сказали, поменял пин и все заработало. Но одна проблема заключается в том, что USB-сигналы при запуске возятся с моим дисплеем, отправляя неверные данные, я должен использовать контакты 3,4, потому что 5-й контакт не работает, он установлен как контакт сброса, моя плата является клоном digispark., @Balkrushna Kadam

Попробуйте другие комбинации. Как, например, использование контактов 3 и 4 для «trig» и «data». Насколько я могу судить, пульсирующий загрузчик не будет иметь много побочных эффектов., @Gerben