помогите плиз с кодом
- Войдите на сайт для отправки комментариев
Ср, 11/10/2017 - 19:46
пишу вольтметр, как бы всё понятно но есть две строки это мин и мах напряжения я не могу понять как их сохронять и перезаписывать если они отличаются от предыдущих значений
#include <SPI.h> #include <Wire.h> #include <EEPROM.h> // подключаем библу для епром #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); int smallNum = 123; // целое число от 0 до 255 EEPROM.write(0, smallNum); // запись числа в ячейку 0 int bigNum = 789; // число > 255 разбиваем на 2 байта (макс. 65536) byte hi = highByte(bigNum); // старший байт byte low = lowByte(bigNum); // младший байт EEPROM.write(1, hi); // записываем в ячейку 1 старший байт EEPROM.write(2, low); // записываем в ячейку 2 младший байт } void loop() { display.setCursor(30,5); display.setTextSize(3); display.clearDisplay(); display.setTextColor(WHITE); int sensorValue = analogRead(A0); float voltage = sensorValue * (15 / 1023.0);//(5.0 / 1023.0)15.00 для делителя display.println(voltage); display.setCursor(0,0); display.setTextSize(1); display.println("min"); if (voltage <= 11.5) display.println(voltage);// напряжение минимум display.setCursor(0,15); display.setTextSize(1); display.println("max"); display.println(voltage);// напряжение максимум delay(500); // задержка 500 мс display.display(); }
очень хорошо, что вам почти все понятно, потому как не могу того же сказать о себе :)
Пожалуйста, изложите четко. что именно вы хотите получить от скетча, что получаете и что не работает.
это вольтметр, мне надо что бы он сохранял минимальное и максимальное напряжение и выводил его на экран в месте с с тем что в реальном времени замеряет, на экран сейчас он выводит всё кроме того что было минимум и максимум, то есть мерием напряжение и если оно ниже 11,5 вольт то заносим его в память и выводим на экран в уголочек с надписью мин и так же с тем что максимум то есть больше 14 вольт к примеру, а если минимум или максимум изменилось а значит надо постоянно сравнивать с тем что в памяти переписать его и изменить на экране.
так вот всё сделал кроме того что бы оно сохранялось в памяти сравниволось и выводилось на экрана сейчас вот что

Ну, скетч то Вы не сами писали, где-то взяли, так ведь? И совсем не понимаете, что там написано. Или я не прав?
вы не правы я его сам писал
winzivul. Есть код и есть контент (я так называю) это то что делает , или должна делать программа. По идее это одно и тоже. Но практика показавает иначе. Вот человек суетится что-то пытается делать и в результате ничего. То есть контент работы человека ничего не делать.
Продолжаю. Вы делаете вольтметр. Контент у вас выводить показание на экран. Усложнили записываем текущие показания в память. Дальше найти максимум минимум от чего? Ясно что от текщего значения. Но начиная откуда. От создания вселеной, или прошивки программы . И наконец вы значений максимума и минимума и дальше что работа закончена , можно жечь Ардуину или все же надо значения максимума и минимума сбрасывать.
я знаю и минимум и максиму, в скейче я написал
if
(voltage <= 11.5) это для минимального а для максимального я не дописывал пока что нет смысла надо разобратся с епром как записать и читать для вывода и сравнения пока что минимум ну а максимум проблемой не будет, если я правельно понял алгоритм будет такой же только надо будет изменить адрес записи и чтения в епром
вы не правы я его сам писал
Тогда в строке 14, вместо 123 поставьте 1023, а в 18-ой, вместо 789, поставьте ноль. Все нормальные люди так делают - изначально минимальное число ставится как можно бОльшим, а максимальное - как можно меньшим.
После 31 строки поставьте проверку такоего типа:
ЕСЛИ sensorValue больше текущего наибольшего, то "текущее наибольшее" = sensorValue;
ИНАЧЕ ЕСЛИ sensorValue меньше текущего наименьшего, то "текущее наименьшее" = sensorValue;
После этого текщие наименьшее и наибльшее преобразуйте в вольты (также, как в строке 32) и показывает где Вам надо.
мне кажется все, ну я могу и ошибаться, работа с дисплеем, епром, обмен и2ц и спи, а что ещё
это вольтметр, мне надо что бы он сохранял минимальное и максимальное напряжение и выводил его на экран в месте с с тем что в реальном времени замеряет, на экран сейчас он выводит всё кроме того что было минимум и максимум
А вы пытались сделать минимум и максимум? А то в коде - никаких следов.
Делается это просто. Заводите две переменные - Vmin и Vmax. В момент старта программы берете первое измеренное значение и сохраняете его и в Vmin и в Vmax. Это же логично - если у вас значение всего одно, они и максимальное и минимальное, верно?
А дальше не сложнее. После измерения каждого нового значения вы сравниваете его с Vmin. Если новое значение меньше -сохраняете это значение в переменной Vmin как новый минимум. И точно так же с Vmax, только знак сранения - "больше".
Надеюсь все понятно.
if
(voltage <= 11.5) минимум строка 38, а максимум я же написал пока не делал надо что то одно сночало сделать
А причём тут вообще 11.5? Почему не 11.49?
Делайте как я Вам написал (или как написал b707 - практически тоже самое) и не пудрите себе и нам мозг.
спасибо попробую но это уже завтра
я знаю и минимум и максиму, в скейче я написал if (voltage <= 11.5) это для минимального
Если вы про строку 38 в коде, то там написан бред, так как это условие абсолютно бесполезно. Любое компьютерное условие if-then состоит из двух частей - части if "если", где проверяется условие, и части then-"то" , где описано что надо сделать, если условие выполнено. У вас части "то" нет, условие вы проверяете, но ничего не делаете.
а для максимального я не дописывал пока что нет смысла надо разобратся с епром как записать и читать для вывода и сравнения
вот что вам на данном этапе совсем не нужно - это разбираться с EEPROM. Для максимума и минимума EEPROM совсем не нужен. Решите задачу пока так, в локальных переменных.
Для начала надо глобаль объявить 3 переменные voltage,Max_voltage,Min_voltage. В сетапе определить voltage и это значение присвоить Max_voltage,Min_voltage. зНу а дальше в лупе измерять текучку и приваивать если она больше большего и меньше меньшего. Вы так пытаетесь придумать код, что забываете зачем вам программа. Не путайте код и контент. Это совершенно разные вещи. Вот к примеру вы каждый день ходите на работу , к примеру делать мебель. В чем контент вашей жизни - бегать на работу или делать мебель. Бегать на работу это текучка. А делать мебель это контент. Вот так и в коде. Вы просто запутались в кодах текучки и не можете понять почему контент программы у вас неправильно работает.
если правельно понял то вот
если правельно понял то вот
НеправЕльно...
По-моему вы скетч перепутали и снова загрузили тот же код, что и в первом посте.
строка 13 14
сейчас всё отображает всё показывает но не сохраняет, простите но я раньше не работал с ардуино, мне проще написать для пика а вот теперь решил освоить ардуинку
Текучку выкинул из программы.
строка 13 14
И что? Вы ввели две новые переменные, а дальше? Где все то, о чем вам писал Евгений и я? Где присваивание этой переменной текущего значения, где сравнени со старым мин и макс? Вы сделали одну десятую часть. Или Вы на каждый новый символ нам будете постить новый код?
Кроме того, в строке 14 сразу две ошибки - имя переменной из двух слов быть не может, а кроме того тип int не может равняться дробному числу.
Так же, как и Евгений, я очень сомневаюсь, что остальной код писали вы. Как это может быть, если вы, практически, букв не знаете?
мне проще написать для пика а вот теперь решил освоить ардуинку
Про "мне проще" - вранье. Мин и макс считается везде одинаково, это азы даже не программирования, а простой логики
зря ты это. Теперь он ничему не научится, и так же будет заливать всем, что просто ардуину не знает, а вообще спец по пикам... по бубнам тоже :)
b707 , вы думаете это все. Найдется еще место где он затупит. Синтаксис языка конечно лучше знать. Но понимать программа должна сделать еще важнее. Но похоже для некоторых это лишнее.
круто спасибо всем за "помощь" обосрать человека может каждый умники тут сидят блять
похоже, не надо было вам обьяснять, как определять мин и макс...