Универсальный встраиваемый компьютер


Здравствуйте! Я создаю универсальный код для встраиваемого компьютера. Пока без кнопок,но с 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 комментариев на «“Универсальный встраиваемый компьютер”»

    • Устройство и его варианты исполнения являются примером для встраиваемого компьютера. Его задачи мониторинг, автоматизация… Плюс смысл проекта найти решения для самостоятельного исполнения

  1. Для универсального компьютера процессор Ардуины слабоват будет, на нём, максимум, программируемый калькулятор замутить получится.
    Впрочем…
    Может, я и неправ 🙂
    Помню, был когда-то ЮТ-88, модульный самопальный комп. в минимальном варианте — как раз на программируемый калькулятор и тянул — размером с современный нетбук, на 20-30 микрухах. Сейчас весь его функционал можно на одной Ардуине и замутить, тока лучше взять на Mega2560 — в ней памяти больше.
    А подключив в ЮТ-88 дополнительные модули (ОЗУ, дисплей), получали комп типа Спектрума.

  2. и без обид против не чего не имею, но лучше в таких случаях использовать raspberrypi и я еще слышал что там есть возможность подключения как lcd так и остальной вкуснятины.

    • Моя цель сделать всё на ардуино, ну или хотя бы с использованием ардуиновского боотлоадера и языка Wiring

    • Дружище, попробуй ответить на один вопрос:) Для чего ты делаешь этот прибор? Не для чего он преднозначен, а почему ты его делаешь. Не для подогрева интереса и не из технического интузиазма?
      Так для чего тебе показывать и спрашивать, если ты это делаешь в первую очередь ДЛЯ СЕБЯ?
      Мастери что-то своими руками, получай удовольствие.

  3. В дальнейшем планирую сделать библиотеку UEC(Universal Embedded Computer), где будут вызовы типа

    UEC.TBD(10, temp)

    UEC — объявление библиотеки
    T — temp
    B — DS18B20
    10 — шина на которой висит датчик
    temp- куда писать данные (float temp)
    Мне важно знать, а это надоо?

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение