Задача: вывести показание фоторезистора на экран в процентах Проблема: Напрямую analogRead выводит корректное число, но если перевести в проценты на выходе всегда будет 0. Скетч: void setup() { Serial.begin(9600); } void loop() { int X = analogRead(A0) / 900 * 100; Serial.print(X); delay(500); } Заранее спасибо.
хммммм .. может надо иногда заглядывать в примеры, которые встроены в Arduino IDE !? .. там есть пример считывания аналогового значения и вывода его в сериал .. немного переделать его для вывода процентов и вуаля .. скетч готов .. как вы считаете нормальная меня идея посетила? ) void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): float voltage = sensorValue * (5.0 / 1023.0); // print out the value you read: Serial.println(voltage); }
Вы не уловили сути проблемы. Сфокусирую внимание на непонятном мне моменте: почему при выражении: int X = 750 / 900 * 100; X = 0? Скетч: void setup() { Serial.begin(9600); } void loop() { int X = 750 / 900 * 100; Serial.print(X); delay(500); }
а что тут не понятного? int целочисленное .. float дробное .. вот вы и пытаетесь присвоить дробь, переменной которая понимает только целые числа суть как раз проста как три копейки .. надо сначала разобраться с типами данных .. какие бывают .. что умеют .. вот вам ресурс для этого http://arduino.ru/Reference .. читайте набирайтесь опыта .. практикуйтесь .. всё просто
int X = map(analogRead(A0), 0, 1023, 0, 100); 750 поделить на 900 будет 0 целых. Ноль помножить на 100 будет 0. Никакой ошибки в вычислениях тут нет.
Отличный рабочий вариант, спасибо. Так если int отображает только целые числа, то ответом на выражение int X = 750 / 900 * 100 будет 83? Если использовать float, который в свою очередь говорит о плавающей запятой, то ответ получатся 0,00
Потому что ты компилятору явно указал, что надо использовать целочисленные умножение и деление и присвоить целочисленный результат переменной с плавающей точкой. Что он тупо и сделал Код (C++): float X = (float)(750 / 900) * 100.0; float X = 750.0 / 900.0 * 100.0;
на вот как говорится с пылу с жару только что опробованный скетч void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A1); // print out the value you read: float x = 700.0/900.0*100.0; float y = sensorValue/900.0*100.0; Serial.println(x); Serial.println(y); Serial.println(sensorValue); delay(500); // delay in between reads for stability }
Ребят, вы бы так и сказали, что в выражении следует писать дробные представления чисел: int X = 750 / 900 * 100 - НЕ ВЕРНО int X = 750,0 / 900.0 * 100.0 - ВЕРНО и X обрел свои 83....
и то и другое выражение верно .. ошибок там нет .. потому что ошибка в голове .. так как голова не понимает то, чего просит от контроллера!!!! в первом выражении голова говорит контроллеру раздели мне 750 на 900 .. контроллер кивнул .. разделил .. и получил целочисленный результат 0 .. дальше голова говорит умножь мне то что получилось на 100 .. контроллер кивнул как те двое из ларца одинаковы с лица и умножил 0 на 100 .. и получил целочисленный ноль .. суть сей басни такова что голова не разделяет целочисленные и дробные для контроллера .. думает что контроллер умный и сам догадается .. а контроллер собака серая не хочет догадываться и делает всё так, как в него заложили разработчики во втором выражение всё тоже самое с оговоркой что контроллер уже выполняет теже действия , но только с уже дробными числами .. но вот тут загадка .. если числа дробные то куда делась дробная часть числа???? .. наверно потому что голова сказала контроллеру затолкай ка мне дробное число в целочисленную переменную .. контроллер кивнул и затолкал только целочисленную часть числа выкинув к чертям дробную часть числа мораль сей басни такова: сначала надо понять что такое контроллер .. понять как он работает .. как думает .. чем живёт .. а уже потом писать что верно , а что нет