Одометр

Denchik200401
Offline
Зарегистрирован: 17.07.2016

Имеется вот такой код, нужно посчитать кол-во оборотов колёса. Этот код всегда возвращает 1. Почему так?

While (digitalRead(btn) == HIGH);
dst++;

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Потому что точка с запятой в конце первой строки. И он вообще компилироваться не должен - while с большой буквы написано.

Denchik200401
Offline
Зарегистрирован: 17.07.2016

В коде с маленькой, это здесь, я так написал. А в целом что может быть не так в 2 строчках? dst это должно быть int или что-то другое?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Denchik200401 пишет:

В коде с маленькой, это здесь, я так написал. А в целом что может быть не так в 2 строчках? dst это должно быть int или что-то другое?

Я вам написал - уберите точку с запятой в конце первой строки. У вас из-за этой точки с запятой отсутствует тело цикла, которое будет выполняться при совпадении по условию.

Denchik200401
Offline
Зарегистрирован: 17.07.2016

выводит различные числа, от -32854 до 12856

Araris
Offline
Зарегистрирован: 09.11.2012

Приведённый Вами скетч не может ничего никуда выводить, если желаете помощи/советов/предметного разговора - выкладывайте  скетч полностью.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Denchik200401 пишет:

В коде с маленькой, это здесь, я так написал. 

Вы издеваетесь? Люди тратят время на поиск ошибок в бреде, который Вы "здесь так написали"?

Код выкладывается

а) полностью
б) копи-пастом, а не ручным переписыванием.

a5021
Offline
Зарегистрирован: 07.07.2013

Не кусайтесь. Ребенок же.

Денчик, если тело цикла состоит из одного только dst++, то этот самый цикл начинает крутиться со страшной скоростью и переменная тупо переполняется неизвестное количество раз, пока не случится выполнение условия выхода из цикла. Можно скзать, что при выходе из цикла переменная имеет случайное значение.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Дополню предыдущего оратора: чтобы написать корректно работающий код, надо точно знать, что именно хочется сделать/получить. Без всех необходимых вводных - результат может быть ХЗ.

Denchik200401
Offline
Зарегистрирован: 17.07.2016
const int  pin = 2;
int k = 0;
void setup() {
  // put your setup code here, to run once:
pinMode(pin, INPUT_PULLUP);

Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeated
  while (digitalRead(pin)==HIGH)
 k++ ;
  Serial.println(k);
}

 

 
а5021,Вот выручайте, пожалуйста.
a5021
Offline
Зарегистрирован: 07.07.2013
void loop() {
  while(digitalRead(pin) == HIGH);  // на этом цикле все будет стоять, пока не приедет магнит
  k++; // если мы тут, то магнит приехал, увеличиваем счетчик
  Serial.println(k); // выводим значение
  delay(50); // ждем, пока магнит уедет
}

 

Denchik200401
Offline
Зарегистрирован: 17.07.2016

Спасибо, работает