C/C++

Программирование скетча ардуино

Помогите исправить ошибку в коде

void setup() {
Serial.begin(9600);
pinMode(6, OUTPUT);
pinMode(7, INPUT);
pinMode(8, OUTPUT);
}

void loop() {
int t = 24;
int dist = getMm(t);
Serial.println(dist);
delay(50);
}
int getMm(int t) {
digitalWrite(6, HIGH);
delayMicroseconds(10);
digitalWrite(6, LOW);
uint32_t us = pulseIn(7, HIGH);
return (us * (t * 6 / 10 + 330) / 2000ul);
}
if(dist()>100){
digitalWrite(3, HIGH);
delay(500);
digitalWrite(3, LOW);
delay(500);
}
 void setup() //сетап окей
{
Serial.begin(9600);
pinMode(6, OUTPUT);
pinMode(7, INPUT);
pinMode(8, OUTPUT);
}

void loop() //луп окей
{
int t = 24;
int dist = getMm(t);
Serial.println(dist);
delay(50);
}

int getMm(int t) //функция окей
{
digitalWrite(6, HIGH);
delayMicroseconds(10);
digitalWrite(6, LOW);
uint32_t us = pulseIn(7, HIGH);
return (us * (t * 6 / 10 + 330) / 2000ul);
}

if(dist()>100) //а это что за неведомая херь и к чему относится?
//если нужно сделать перемигивание светодиодами - оформите это функцией
//или включите в loop. Это рас. Два - dist это у вас переменная int. А
//что такое dist() ?
//Да и еще - 3 пин не задан в PinMode.
{
digitalWrite(3, HIGH);
delay(500);
digitalWrite(3, LOW);
delay(500);
}
Алексей Кохановский
Алексей Кохановский
51 416
Лучший ответ
Код содержит несколько ошибок.

Во-первых, переменная dist никогда не используется в операторе if. Вместо вызова функции dist вам следует просто использовать переменную dist.

Во-вторых, в функции dist отсутствует параметр. При вызове функции dist вам необходимо передать переменную t в качестве аргумента, например: dist(t).

В-третьих, функция digitalWrite вызывается с неправильным pin-кодом в инструкции if. В инструкции if вы пытаетесь выполнить запись на вывод 3, но вы не объявили вывод 3 в качестве вывода в функции настройки. Вместо этого вам следует использовать pin-код, который вы объявили в качестве выходного в функции настройки.

Вот исправленный код:
 void setup() { 
Serial.begin(9600);
pinMode(6, OUTPUT);
pinMode(7, INPUT);
pinMode(8, OUTPUT);
}

void loop() {
int t = 24;
int dist = getMm(t);
Serial.println(dist);
delay(50);

if (dist > 100) {
digitalWrite(8, HIGH);
delay(500);
digitalWrite(8, LOW);
delay(500);
}
}

int getMm(int t) {
digitalWrite(6, HIGH);
delayMicroseconds(10);
digitalWrite(6, LOW);
uint32_t us = pulseIn(7, HIGH);
return (us * (t * 6 / 10 + 330) / 2000ul);
}
Я надеюсь, что это поможет! Дайте мне знать, если у вас возникнут какие-либо другие вопросы.
Kairat Zhamangaliev
Kairat Zhamangaliev
16 137
А что ты на форум андуиншиков не пойдешь ?
Раз уж занимаешься этим.