вольтметр на arduino nano и SSD1306 дисплее
- Войдите на сайт для отправки комментариев
Чт, 22/06/2017 - 05:16
прошу помощи, я начинающий, прошу не бить )
суть проблемы- пытаюсь создать простейший вольтметр на nano и SSD1306
до этого выводил изображение на экран, все получилось. Но вот при компиляции кода на вольтметр постоянно выскакивает проблема с VOID SETUP а точнее со строками, в которых описывается операция с дисплеем, пытался удалять, переставлять, но все четно!( ошибка одна и также (exit status 1
'display' was not declared in this scope)
знающие люди, ткните носом что я не так делаю, очень хочу научиться программировать arduio но - пока только ломаю голову !
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
int analogInput = 0; // переменная для удобства инициализации и работы с аналог. портом 0
float vout = 0.0; // переменная с значением выходного напряжения
float vin = 0.0; // переменная с результатом измерений
float R1 = 100000.0; // сопротивление R1
float R2 = 10000.0; // сопротивление R2
int value = 0; // переменная хранения данных
void setup(){
Serial.begin(9600);
pinMode(analogInput, INPUT); // инициализируем аналоговый порт 0, как вход
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Hello, world!");
display.setTextColor(BLACK, WHITE); // установка курсора
}
void loop() // производим чтение аналогового сигнала и выводим на дисплей
{
value = analogRead(analogInput);// читаем аналоговый сигнал, с аналог. порта - 0
vout = (value * 5.0) / 1024.0; // не забываем про внесение поправки (5.0 - это идеальный вариант,хотя все возможно)
vin = vout / (R2/(R1+R2)); // в переменной будет значение входного напряжения
if (vin<0.09) // проверка, для получ. 0
{
vin=0.0; // обнуляем нежелательное значение
}
void loop()
display.println("U = ","vin","volt");
delay(500); // задержка 500 мс.
}
где и как описана/объявлена переменная display?
в VOID SETUP
начина вот с этой строки
display.setTextSize(1);это использование (обращение к) переменной. А объявление где? Какого она типа?
и пошто 2 раза void loop() написано?
прошу простить за тупость обьявление к чему должно относиться ?!
действительно 2 void loop(((
убрал его теперь придерается к
display.println("U = ","vin","volt");
пишет - 'display' was not declared in this scope
к переменной display
вот это
intanalogInput = 0;// переменная для удобства инициализации и работы с аналог. портом 008floatvout = 0.0;// переменная с значением выходного напряжения09floatvin = 0.0;// переменная с результатом измерений10floatR1 = 100000.0;// сопротивление R111floatR2 = 10000.0;// сопротивление R212intvalue = 0;// переменная хранения данныхобъявления. Вот это
vin = vout / (R2/(R1+R2));// в переменной будет значение входного напряженияиспользование переменных vin, vout, R1, R2, ОБЪЯВЛЕННЫХ ранее
все-же я тормоз, я вроде понимаю что вы имеете в виду, но понять не могу как правильно сформулировать в прошивке, если вам не трудно- можете иправить ошибку, что-бы я наконец-то увидел?
я учусь по статьям и готовым прошивкам и некоторые нюансы пока туго доходят (
Ёптваюмать!!! ты сам писал
"до этого выводил изображение на экран"
ну дак посмотри же прошлый код, КАКОГО ТИПА была переменная display.
в ОБЬЯВЛЕНИЯХ, между #Includ-ами и void setup(). И обьяви ты ее наконец так же.
вот все что было между ними
Adafruit_SSD1306 display(OLED_RESET);
все, больше ничего не было
и что тебе мешает вставить
Adafruit_SSD1306 display(OLED_RESET); // ОБЪЯВЛЕНИЕ ТИПА
где нить между другими обьявлениями
intanalogInput = 0;// переменная для удобства инициализации и работы с аналог. портом 008floatvout = 0.0;// переменная с значением выходного напряжения09floatvin = 0.0;// переменная с результатом измерений10floatR1 = 100000.0;// сопротивление R111floatR2 = 10000.0;// сопротивление R212intvalue = 0;// переменная хранения данныхAdafruit_SSD1306 display(OLED_RESET);
опять проблема с дисплеем exit status 1
на строке
нужна константа, но я не знаю как она пишится
потому что вот так надо писать
display.print("U = ");display.print("vin"); display.println("volt");
спасибо большое за помощь, все заработало
вот готовый код прошивки
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 int analogInput = 0; // переменная для удобства инициализации и работы с аналог. портом 0 float vout = 0.0; // переменная с значением выходного напряжения float vin = 0.0; // переменная с результатом измерений float R1 = 100000.0; // сопротивление R1 float R2 = 10000.0; // сопротивление R2 int value = 0; // переменная хранения данных Adafruit_SSD1306 display(OLED_RESET); void setup(){ pinMode(analogInput, INPUT); // инициализируем аналоговый порт 0, как вход Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64) display.display(); delay(2000); display.clearDisplay();} void loop() { // производим чтение аналогового сигнала и выводим на дисплей display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0, 0); value = analogRead(analogInput);// читаем аналоговый сигнал, с аналог. порта - 0 vout = (value * 5.0) / 1024.0; // не забываем про внесение поправки (5.0 - это идеальный вариант,хотя все возможно) vin = vout / (R2/(R1+R2)); // в переменной будет значение входного напряжения if (vin<0.09) // проверка, для получ. 0 { vin=0.0; // обнуляем нежелательное значение } display.print("U = ");display.print(vin); display.println("volt"); display.display(); delay(500); }нальешь при случае.