Массив из переменных
- Войдите на сайт для отправки комментариев
Сб, 04/05/2013 - 11:01
Привет. Нужно создать массив, состоящий из 6 переменных. Выглядят они так:
[color=#CC6600]int[/color] Hour = RTC.get(DS1307_HR,[color=#CC6600]true[/color]);
[color=#CC6600]int[/color] Min = RTC.get(DS1307_MIN,[color=#CC6600]false[/color]);
[color=#CC6600]int[/color] Sec = RTC.get(DS1307_SEC,[color=#CC6600]false[/color]);
[color=#CC6600]int[/color] Dt = RTC.get(DS1307_DATE,[color=#CC6600]false[/color]);
[color=#CC6600]int[/color] Mth = RTC.get(DS1307_MTH,[color=#CC6600]false[/color]);
[color=#CC6600]int[/color] Yr = RTC.get(DS1307_YR,[color=#CC6600]false[/color]);
int Time получается объявить из этих переменных, но в серийный порт выводится лишь одна цифра - 2201.Я так понял, это случайная цифра, т.к это ни год, ни месяц, ни час, ни минута, и ни что-то из них.
Каждая переменная берёт значение из соотв. регистра DS1307 - часов реального времени. Массив мне нужен, чтобы упростить работу с последующим циклом, выводящим кусок кода на дисплей при условии нажатия кнопки.
как-то вот так
Да, ещё вопрос, но не в тему: возможно ли создание нескольких loop()? У меня была идея - в одном loop() сделать счетчик времени, в другом - вольтметр, в третьем - условие вывода их на дисплей. Возможно ли это сделать? Для этого разумеется, нужен вывод массива Time за пределы loop...
Ты хочешь паралельно запустить три процесса?
Да, ещё вопрос, но не в тему: возможно ли создание нескольких loop()? У меня была идея - в одном loop() сделать счетчик времени, в другом - вольтметр, в третьем - условие вывода их на дисплей. Возможно ли это сделать? Для этого разумеется, нужен вывод массива Time за пределы loop...
Возможно, с применением RTOS. Но сложность высокая, поэтому так делают только тогда, когда иначе никак. Т.е. лезть туда без подготовки не рекомендуется
Намного проще все три задачи объединить в одном loop
Переменные, объявленные вне функций (и вне setup и loop), считаются глобальными (если упрощенно, то объявлять их нужно до setup)
Можете показать примеры трёх loop() в таком виде? Как это должно выглядеть?
Да, два процесса парраллельно, но результат от них будет только при условии выполнения условия в 3 цикле.
Можете показать примеры трёх loop() в таком виде? Как это должно выглядеть?
Ну, как-то вот так: http://easyelectronics.ru/avr-uchebnyj-kurs-arxitektura-programm-chast-3...
(и там дальше по ссылкам)
Но непонятно, что вам мешает делать все последовательно
Делая последовательно, у меня не получается подобрать подходящее условие... Если я беру if - else тогда при нажатии на кнопку, информация на дисплее не обновляется. А если я беру while - выполняется то одно, то другое, без нажатия кнопки.
Код приведи, а то не совсем понятно.
int Time[2];
enum {
Hour, // 0
Min, // 1
Sec // 2
};
Тогда вызов Time[Hour]=RTC.get(DS1307_HR,true)
#include <LiquidCrystal.h> #if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif #include <Wire.h> #include <DS1307.h> // written by mattt on the Arduino forum and modified by D. Sjunnesson LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { lcd.begin(16,2); Serial.begin(9600); /* RTC.stop(); RTC.set(DS1307_SEC,0); //set the seconds RTC.set(DS1307_MIN,35); //set the minutes RTC.set(DS1307_HR,20); //set the hours RTC.set(DS1307_DOW,7); //set the day of the week RTC.set(DS1307_DATE,28); //set the date RTC.set(DS1307_MTH,4); //set the month RTC.set(DS1307_YR,13); //set the year RTC.start(); */ } void loop() { int x = analogRead(0); do { lcd.clear(); lcd.setCursor(4,0); lcd.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true lcd.print(":"); lcd.print(RTC.get(DS1307_MIN,false));//read minutes without update (false) lcd.print(":"); lcd.print(RTC.get(DS1307_SEC,false));//read seconds lcd.setCursor(3,1); // some space for a more happy life lcd.print(RTC.get(DS1307_DATE,false));//read date lcd.print("/"); lcd.print(RTC.get(DS1307_MTH,false));//read month lcd.print("/"); lcd.print(RTC.get(DS1307_YR,false)); //read year delay(1000); } while(x<100); do { lcd.clear(); int z = analogRead(3); double y = z/204.6; lcd.print("Voltage is:"); lcd.setCursor(12,0); lcd.print(y); delay(500); } while(x<600); }Собрано из нескольких кусков кода. Компилируется, но работает не корректно.
Adno, массив Time мне нужно использовать в целом. Вызываться он должен в Serial.println() и lcd.print().
Не совсем понятно, где в коде кнопка, похоже на analogRead(0) ???. И что она должна делать. И зачем зацикливать вывод на дисплей в разных циклах.
ну попробуй вот так
#include <DS1307.h> #include <LiquidCrystal.h> #if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif #include <Wire.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int SetCur1=4, SetCur2=12; void setup() { lcd.begin(16,2); Serial.begin(9600); } void loop() { if (analogRead(0)<100) //если кнопка не нажата { SetCur1=4; //Курсор на первой строке SetCur2=12; //Курсор на второй строке } else //если кнопка нажата { SetCur1=12;//Курсор на второй строке SetCur2=4; //Курсор на первой строке } lcd.clear(); lcd.setCursor(SetCur1,0); lcd.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true lcd.print(":"); lcd.print(RTC.get(DS1307_MIN,false));//read minutes without update (false) lcd.print(":"); lcd.print(RTC.get(DS1307_SEC,false));//read seconds lcd.setCursor(3,1); // some space for a more happy life lcd.print(RTC.get(DS1307_DATE,false));//read date lcd.print("/"); lcd.print(RTC.get(DS1307_MTH,false));//read month lcd.print("/"); lcd.print(RTC.get(DS1307_YR,false)); //read year int z = analogRead(3); double y = z/204.6; lcd.setCursor(SetCur2,0); lcd.print("Voltage is:"); lcd.print(y); delay(500); }