Здравствуйте! Я создаю универсальный код для встраиваемого компьютера. Пока без кнопок,но с lcd дисплеем и датчиками. Пока не подключил магнитный датчик.
#include <LiquidCrystal.h> #include <OneWire.h> //объявление переменных int magPin = 0; int photoPin = 1; int photo = 0; int mag = 0; uint16_t raw_bandgap = 0; float volt_battery = 0.0; int menu = 1; int sek=0;//значение секунд int min=0;//значение минут int chas=0;//значение часов OneWire ds( 10 ); // линия 1-Wire будет на pin 10 LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup(void) { Serial.begin(9600); lcd.begin(16, 2); Serial.begin(9600); } void loop(void) { if(chas == 24) { chas=0; den++; } if(sek>59)//если переменная секунда больше 59 ... { sek=0;//сбрасываем ее на 0 min++;//пишем +1 в переменную минута } if(min>59)//если переменная минута больше 59 ... { min=0;//сбрасываем ее на 0 chas++;//пишем +1 в переменную час } if(chas>23)//если переменная час больше 23 ... { chas=0;//сбрасываем ее на 0 } analogReference(DEFAULT); // использовать Vcc как AREF raw_bandgap = analogRead(14); // холостое чтение после смены AREF (см. 23.5.2 в руководстве) raw_bandgap = analogRead(14); // измерить значение внутреннего bandgap volt_battery = (1.05 * 1024) / raw_bandgap; // вычислить Vcc photo = analogRead(photoPin); mag = analogRead(magPin); photo = photo*2; photo = photo/4; byte i; byte present = 0; byte data[12]; byte addr[8]; if ( !ds.search(addr)) { //Serial.print("No more addresses.\n"); ds.reset_search(); return; } //Serial.print("R="); for( i = 0; i < 8; i++) { // Serial.print(addr[i], HEX); //Serial.print(" "); } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.print("CRC is not valid!\n"); return; } if ( addr[0] != 0x28) { Serial.print("Device is not a DS18B20 family device.\n"); return; } ds.reset(); ds.select(addr); ds.write(0x44,1); // запускаем конвертацию delay(1000); sek++; // До этого места выполняем все операции present = ds.reset(); ds.select(addr); ds.write(0xBE); // считываем ОЗУ датчика //Serial.print("P="); //Serial.print(present,HEX); //Serial.print(" "); for ( i = 0; i < 9; i++) { // обрабатываем 9 байт data[i] = ds.read(); //Serial.print(data[i], HEX); //Serial.print(" "); } //Serial.print(" CRC="); //Serial.print( OneWire::crc8( data, 8), HEX); // Serial.println(); // высчитываем температуру :) int HighByte, LowByte, TReading, Tc_100, SignBit, Whole, Fract; LowByte = data[0]; HighByte = data[1]; TReading = (HighByte << 8) + LowByte; SignBit = TReading & 0x8000; // test most sig bit if (SignBit) // negative { TReading = (TReading ^ 0xffff) + 1; // 2's comp } Tc_100 = (6 * TReading) + TReading / 4; // multiply by (100 * 0.0625) or 6.25 Whole = Tc_100 / 100; // separate off the whole and fractional portions Fract = Tc_100 % 100; Serial.print(menu); lcd.clear(); // отображаем информацию меню датчиков 1 if (menu ==1){ Serial.print("1"); lcd.setCursor(0 , 0); lcd.print("T="); if (SignBit) // If its negative { lcd.print("-"); } lcd.print(Whole); lcd.print("."); if (Fract < 10) { lcd.print("0"); } lcd.print(Fract); lcd.setCursor(0 , 1); lcd.print("Vcc="); //Serial.print(volt_battery); lcd.print(volt_battery); lcd.setCursor(9 , 1); lcd.print("SR="); lcd.print(photo); } else { if ( menu == 2){ Serial.print("2"); lcd.setCursor(0, 1); lcd.print(den); lcd.print("."); lcd.print(chas);//количество часов lcd.print(":"); lcd.print(min);//количество минут lcd.print(":"); lcd.print(sek);//количество секунд } else { lcd.setCursor(0, 0); lcd.print("Error 1. Not int"); lcd.setCursor(0, 1); lcd.print("Int menu="); lcd.print(menu); } } }
Offtopic: как публиковать в блог программирования?
Если вам интересна судьба этого проекта то следующая статья будет о написание библиотеки
int menu = 1
int menu = 2
10 комментариев на «“Универсальный встраиваемый компьютер”»
А что вообще это устройство делает и для чего оно предназначено, где используется?
Устройство и его варианты исполнения являются примером для встраиваемого компьютера. Его задачи мониторинг, автоматизация… Плюс смысл проекта найти решения для самостоятельного исполнения
Для универсального компьютера процессор Ардуины слабоват будет, на нём, максимум, программируемый калькулятор замутить получится.
Впрочем…
Может, я и неправ 🙂
Помню, был когда-то ЮТ-88, модульный самопальный комп. в минимальном варианте — как раз на программируемый калькулятор и тянул — размером с современный нетбук, на 20-30 микрухах. Сейчас весь его функционал можно на одной Ардуине и замутить, тока лучше взять на Mega2560 — в ней памяти больше.
А подключив в ЮТ-88 дополнительные модули (ОЗУ, дисплей), получали комп типа Спектрума.
простенький информетр я делал такой, тока потом зжег температурный датчик)
А я магнитный. xD
и без обид против не чего не имею, но лучше в таких случаях использовать raspberrypi и я еще слышал что там есть возможность подключения как lcd так и остальной вкуснятины.
Моя цель сделать всё на ардуино, ну или хотя бы с использованием ардуиновского боотлоадера и языка Wiring
Так вам интересна судьба проекта
Дружище, попробуй ответить на один вопрос:) Для чего ты делаешь этот прибор? Не для чего он преднозначен, а почему ты его делаешь. Не для подогрева интереса и не из технического интузиазма?
Так для чего тебе показывать и спрашивать, если ты это делаешь в первую очередь ДЛЯ СЕБЯ?
Мастери что-то своими руками, получай удовольствие.
В дальнейшем планирую сделать библиотеку UEC(Universal Embedded Computer), где будут вызовы типа
UEC — объявление библиотеки
T — temp
B — DS18B20
10 — шина на которой висит датчик
temp- куда писать данные (float temp)
Мне важно знать, а это надоо?