Пример програма Ардуино кода

#укључити <стдио.х>
#укључити <стринг.х>
#укључити <инттипес.х>
#укључити “Ардуино.х”
#укључити “КСГЗП6859Д.х”
//Иницијализација ИИЦ БУС-а
воид КСГЗП6859Д::ИИЦ_Инит(воид)
{
пинМоде(ИИЦ_СЦЛ, ОУТПУТ); //Поставите пин у излазни режим
пинМоде(ИИЦ_СДА, ОУТПУТ);
дигиталВрите(ИИЦ_СЦЛ, ХИГХ); //Путоут висок ниво
дигиталВрите(ИИЦ_СДА, ХИГХ);
}
//Генеришите стартни сигнал
воид КСГЗП6859Д::ИИЦ_Старт(воид)
{
пинМоде(ИИЦ_СДА, ОУТПУТ);
дигиталВрите(ИИЦ_СДА, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ); //Одложите неколико микросекунди
дигиталВрите(ИИЦ_СЦЛ, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СДА, ЛОВ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СЦЛ, ЛОВ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
}
//Генеришите стоп сигнал
воид КСГЗП6859Д::ИИЦ_Стоп(воид)
{
пинМоде(ИИЦ_СДА, ОУТПУТ);
дигиталВрите(ИИЦ_СДА, ЛОВ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СЦЛ, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СДА, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
}
//Сачекајте АЦК сигнал
//повратак 1 значи неуспех
//повратак 0 значи успех
бајт КСГЗП6859Д::ИИЦ_Ваит_Ацк(воид)
{
бајт уцЕррТиме=0;
пинМоде(ИИЦ_СДА, ИНПУТ);
дигиталВрите(ИИЦ_СДА, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СЦЛ, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
док(дигиталРеад(ИИЦ_СДА)==ХИГХ)
{
уцЕррТиме++;
ако(уцЕррТиме>250)
{
ИИЦ_Стоп();
повратак 1;
}
}
дигиталВрите(ИИЦ_СЦЛ, ЛОВ);
повратак 0;
}
//Генеришите АЦК сигнал
воид КСГЗП6859Д::ИИЦ_Ацк(воид)
{
дигиталВрите(ИИЦ_СЦЛ, ЛОВ);
пинМоде(ИИЦ_СДА, ОУТПУТ);
дигиталВрите(ИИЦ_СДА, ЛОВ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СЦЛ, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СЦЛ, ЛОВ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СДА, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
}
//Не генерише АЦК сигнал
воид КСГЗП6859Д::ИИЦ_НАцк(воид)
{
дигиталВрите(ИИЦ_СЦЛ, ЛОВ);
пинМоде(ИИЦ_СДА, ОУТПУТ);
дигиталВрите(ИИЦ_СДА, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СЦЛ, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СЦЛ, ЛОВ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
}
//Пошаљите један бајт преко ИИЦ магистрале
//Повратна вредност значи одговор од подређеног
//1 значи добијање одговора
//0 значи не добијање одговора
воид КСГЗП6859Д::ИИЦ_Сенд_Бите(бите ткд)
{
бајт т;
пинМоде(ИИЦ_СДА, ОУТПУТ);
дигиталВрите(ИИЦ_СЦЛ, ЛОВ);
за(т=0;т<8;т++)
{
ако(ткд & 0к80)
дигиталВрите(ИИЦ_СДА, ХИГХ);
друго
дигиталВрите(ИИЦ_СДА, ЛОВ);
ткд<<=1;
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СЦЛ, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СЦЛ, ЛОВ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
}
дигиталВрите(ИИЦ_СЦЛ, ЛОВ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СДА, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
}
//Прочитај један бајт, пошаљи АЦК док потврди = 1, пошаљи нАЦК док ацк = 0
бајт КСГЗП6859Д::ИИЦ_Реад_Бите(промени авај)
{
размена у,рецеиве=0;
пинМоде(ИИЦ_СДА, ИНПУТ);
за(и=0;и<8;и++ )
{
дигиталВрите(ИИЦ_СЦЛ, ЛОВ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
дигиталВрите(ИИЦ_СЦЛ, ХИГХ);
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
примити<<=1;
ако(дигиталРеад(ИИЦ_СДА)==ХИГХ)
рецеиве++;
делаиМицросецондс(ИИЦ_ДЕЛАИ_ТИМЕ);
}
дигиталВрите(ИИЦ_СДА, ХИГХ);
вратити примити;
}
//Упишите један бајт на одређену адресу
воид КСГЗП6859Д::Врите_Оне_Бите(у8 адреса ,у8 подаци)
{
ИИЦ_Старт();
ИИЦ_Сенд_Бите((бајт)(Адреса_уређаја + 0));
Сериал.принт(“Адреса_уређаја је “);
Сериал.принтлн(Адреса_уређаја + 0, ХЕКС);
ИИЦ_Ваит_Ацк();
ИИЦ_Сенд_Бите(адреса);
ИИЦ_Ваит_Ацк();
ИИЦ_Сенд_Бите(података);
ИИЦ_Ваит_Ацк();
ИИЦ_Стоп();
}
//Прочитајте један бајт са одређене адресе
бајт КСГЗП6859Д::Реад_Оне_Бите(у8 адреса)
{
бите мидата;
ИИЦ_Старт();
ИИЦ_Сенд_Бите((бајт)(Адреса_уређаја + 0));
ИИЦ_Ваит_Ацк();
ИИЦ_Сенд_Бите(адреса);
ИИЦ_Ваит_Ацк();
ИИЦ_Старт();
ИИЦ_Сенд_Бите((бајт)(Адреса_уређаја + 1));
ИИЦ_Ваит_Ацк();
мидата = ИИЦ_Реад_Бите(0);
ИИЦ_Стоп();
врати моје податке;
}
воид КСГЗП6859Д::КСГЗП6859Д_гет_цал() //Мерна акција КСГЗП6859Д
{
бајт и=0;
бите буфф[5]; //Пет бајтних променљивих, користи се за чување бајтова прочитаних из КСГЗП6859Д
непотписан дуг притисак_ад,Температура_ад; //Променљиве које се користе за чување калибареног притиска и температуре
Врите_Оне_Бите(0к30, 0к0А); //Означите комбиновану конверзију
док ((Реад_Оне_Бите(0к30) & 0к08) == 0к80) //Процијените да ли је прикупљање података завршено
{
Сериал.принтлн(“КСГЗП6859Д није спреман”);; //Сачекајте док подаци нису спремни
кашњење(1000);
}
за(и=0;и<5;и++) //Прочитајте АДЦ излазне податке о притиску и температури
буфф[и] = Реад_Оне_Бите(0к06 + и);
Сериал.принт(“буфф[0…4] је 0к”);
Сериал.принт(буфф[0], ХЕКС);
Сериал.принт(“, 0к”);
Сериал.принт(буфф[1], ХЕКС);
Сериал.принт(“, 0к”);
Сериал.принт(буфф[2], ХЕКС);
Сериал.принт(“, 0к”);
Сериал.принт(буфф[3], ХЕКС);
Сериал.принт(“, 0к”);
Сериал.принтлн(буфф[4], ХЕКС);
//Израчунајте вредност притиска конвертовану АДЦ-ом
притисак_ад = ((непотписано дуго)((непотписано дуго)(буфф[0] * 65536)) + ((унсигнед инт)(буфф[1] * 256)) + ((бајт)буфф[2]));
Сериал.принт(“притисак_ад је “);
Сериал.принтлн(притисак_ад);
ако (притисак_ад > 8388608) //
{
притисак = (дугачак)(((дугачак)(притисак_ад – 16777216)) / 8192);
//Пошто је распон -500Па~+500Па, па к је 8192;к треба променити према актуелном стању; јединица за притисак је Па
}
друго
{
притисак = (дугачак)(притисак_ад / 8192);
}
//Израчунајте вредност температуре коју конвертује АДЦ
температура_ад = ((унсигнед инт)((унсигнед инт)(буфф[3]<<8)) + ((бајт)буфф[4]));
ако (Температура_ад > 32768)
{
температура = (плутати)(((дугачак)(Температура_ад – 65536)) / 256);
//Јединица за температуру је Целзијус
}
друго
{
температура = (плутати)(Температура_ад / 256);
}
}
КСГЗП6859Д Ми_КСГЗП6859Д; //Дефинишите објекат под називом Ми_КСГЗП6859Д класе КСГЗП6859Д
празнина подешавања()
{
Сериал.бегин(9600); //Иницијализација серијског порта
Ми_КСГЗП6859Д.ИИЦ_Инит(); //Иницијализујте пинове ИИЦ магистрале Ми_КСГЗП6859Д
}
празнина петља()
{
Ми_КСГЗП6859Д.КСГЗП6859Д_гет_цал(); //Позовите функцију КСГЗП6859Д_гет_цал() објекта Ми_КСГЗП6859Д за израчунавање притиска и температуре
Сериал.принт(Ми_КСГЗП6859Д.прессуре);
Сериал.принтлн(” Па”);
Сериал.принт(Ми_КСГЗП6859Д.температуре);
Сериал.принтлн(” Целзијус”);
Сериал.принтлн(“”);
кашњење(1000);
}