Скетч на итальнском
- Войдите на сайт для отправки комментариев
Пт, 02/11/2018 - 11:17
Доброго времени суток! Помогите пожалуйста с переводом кола с итальянского на английский...(оговорюсь сразу что переводчики не помогли так как нарушается роботоспособность данного скетча..
// Libraries for DS1307 RTC
#include <Wire.h>
#include <RTClib.h>
// Keyboard libraries
#include <Key.h>
#include <Keypad.h>
// Libraries for creating OTP codes
#include <sha1.h>
#include <TOTP.h>
// Serial software for the display
#include <SoftwareSerial.h>
// config file
#include "CONFIG.h"
// variables
RTC_DS1307 rtc;
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEY_ROWS, KEY_COLUMNS);
SoftwareSerial displaySerial(A1, A2);
TOTP totp = TOTP(hmacKey, 10);
char codiceInserito[7];
int codiceIndex;
char bufferSeriale[14];
int serialIndex;
void setup() {
// Initialize RTC is configured the time when the sketch was compiled
Wire.begin();
rtc.begin();
// Initialize serial communication
Serial.begin(9600);
displaySerial.begin(9600);
// Expect the display boot and the disappearance of the splash screen
delay(500);
Serial.println("Door lock OTP");
Serial.println();
// Initialization PIN
pinMode(PIN_BUZZER, OUTPUT);
pinMode(PIN_LEDROSSO, OUTPUT);
pinMode(PIN_LEDVERDE, OUTPUT);
pinMode(PIN_RELAY, OUTPUT);
// Initialize variables
codiceIndex = -1;
serialIndex = -1;
// Initial state, lock CLOSED
pulisciSchermo();
cambiaStatoSerratura(false);
aggiornaSecondaRiga();
}
void loop() {
// Check whether you have received a serial character
if (Serial.available() > 0) {
byte inByte = Serial.read();
// If the received byte is the character of NewLine (0x0A) interpret the command received
if(inByte == 0x0A) eseguiComandoSeriale();
// Otherwise I record in the buffer
else {
serialIndex++;
if(serialIndex == 14) serialIndex = 0;
bufferSeriale[serialIndex] = inByte;
}
}
// Check if you press a key on the keyboard
char key = keypad.getKey();
if (key != NO_KEY){
// Emit a sound
#ifdef BUZZER_ON
tone(PIN_BUZZER, 440);
delay(100);
noTone(PIN_BUZZER);
#endif
// If the key is a number, I visualize and memorize the array
if(key - '0' >= 0 && key - '0' < 10) {
codiceIndex++;
codiceInserito[codiceIndex] = key;
displaySerial.write(key);
// If it were inserted 6 digits, check the code
if(codiceIndex == 5) verificaCodice();
}
// If the button is '*' gate the last number entered
else if(key == '*' && codiceIndex >= 0) {
codiceIndex--;
aggiornaSecondaRiga();
}
// If the button is '#' it resets the insertion
else if(key == '#') {
codiceIndex = -1;
aggiornaSecondaRiga();
}
}
}
void eseguiComandoSeriale() {
// Possible commands are:
//? displays date and time from the RTC beds
//! GgMMaahhmmss sets the new date and time (dd / mm / yy hh: mm: ss) RTC
// Reset the buffer
serialIndex = -1;
if(bufferSeriale[0] == '?') stampaDataOra();
else if(bufferSeriale[0] == '!') {
// Verify that the twelve following characters are numbers
for(int i = 1; i < 13; i++)
if(!isDigit(bufferSeriale[i])) {
Serial.print(F("Carattere non valido (non e' un numero): "));
Serial.println(bufferSeriale[i]);
return;
}
// Convert in two by two in number characters
int giorno = (bufferSeriale[1] - '0') * 10 + (bufferSeriale[2] - '0');
int mese = (bufferSeriale[3] - '0') * 10 + (bufferSeriale[4] - '0');
int anno = 2000 + (bufferSeriale[5] - '0') * 10 + (bufferSeriale[6] - '0');
int ora = (bufferSeriale[7] - '0') * 10 + (bufferSeriale[8] - '0');
int minuti = (bufferSeriale[9] - '0') * 10 + (bufferSeriale[10] - '0');
int secondi = (bufferSeriale[11] - '0') * 10 + (bufferSeriale[12] - '0');
// I perform data validation checks
if(giorno < 1 || giorno > 31) {
Serial.print(F("Il giorno specificato non e' valido: "));
Serial.println(giorno);
return;
}
if(mese < 1 || mese > 12) {
Serial.print(F("Il mese specificato non e' valido: "));
Serial.println(mese);
return;
}
if(ora > 24) {
Serial.print(F("L'ora specificata non e' valida: "));
Serial.println(ora);
return;
}
if(minuti > 59) {
Serial.print(F("I minuti specificati nono sono validi: "));
Serial.println(minuti);
return;
}
if(secondi > 59) {
Serial.print(F("I secondi specificati non sono validi: "));
Serial.println(secondi);
return;
}
// Save time and visualize updated
rtc.adjust(DateTime(anno, mese, giorno, ora, minuti, secondi));
Serial.println(F("RTC aggiornato"));
stampaDataOra();
}
else {
Serial.print(F("Comando sconosciuto: "));
Serial.println(bufferSeriale[0]);
}
}
void stampaDataOra() {
DateTime now = rtc.now();
Serial.print(F("Data e ora attuali: "));
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.year(), DEC);
Serial.print(" ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
}
void cambiaStatoSerratura(bool serraturaAperta) {
if(serraturaAperta) {
digitalWrite(PIN_RELAY, HIGH);
digitalWrite(PIN_LEDVERDE, HIGH);
digitalWrite(PIN_LEDROSSO, LOW);
displaySerial.write(254);
displaySerial.write(128);
displaySerial.write(" APERTA ");
}
else {
digitalWrite(PIN_RELAY, LOW);
digitalWrite(PIN_LEDVERDE, LOW);
digitalWrite(PIN_LEDROSSO, HIGH);
displaySerial.write(254);
displaySerial.write(128);
displaySerial.write(" CHIUSA ");
}
}
void pulisciSchermo() {
displaySerial.write(254);
displaySerial.write(128);
displaySerial.write(" ");
displaySerial.write(" ");
}
void aggiornaSecondaRiga() {
displaySerial.write(254);
displaySerial.write(192);
displaySerial.write("PIN --> ");
displaySerial.write(254);
displaySerial.write(200);
for(int i = 0; i <= codiceIndex; i++)
displaySerial.write(codiceInserito[i]);
}
void verificaCodice() {
// Get the current timestamp from the RTC and I divide it by 30 (TimeStep Google Authenticator)
DateTime now = rtc.now();
long GMT = now.unixtime();
long timeStep = GMT / 30;
// Verify if the code matches one of the three codes "close" to the current timestamp
bool codiceOk = false;
for(int i = -1; i <= 1; i++) {
char* codiceGenerato = totp.getCodeFromSteps(timeStep + i);
Serial.println(codiceGenerato);
if(strcmp(codiceInserito, codiceGenerato) == 0) codiceOk = true;
}
// I clean the screen
pulisciSchermo();
// If the code is ok, it emits a sound and I open the lock
if(codiceOk) {
#ifdef BUZZER_ON
tone(PIN_BUZZER, 660);
delay(100);
noTone(PIN_BUZZER);
delay(200);
tone(PIN_BUZZER, 660);
delay(100);
noTone(PIN_BUZZER);
#endif
cambiaStatoSerratura(true);
// If the mode is MODO_IMPULSO, look TEMPO_APERTURA milliseconds so I close the lock
if(modoSerratura == MODO_IMPULSO) {
delay(TEMPO_APERTURA);
cambiaStatoSerratura(false);
}
// If it is MODO_STABILE, expect the pressure of TASTO_CHIUSURA button then close the lock
else {
char key;
do {
key = keypad.getKey();
} while(key != TASTO_CHIUSURA);
cambiaStatoSerratura(false);
}
}
// If the code is wrong, I see a message and emit a sound
else {
for(int i = 0; i < 3; i++) {
#ifdef BUZZER_ON
tone(PIN_BUZZER, 220);
#endif
displaySerial.write(254);
displaySerial.write(128);
displaySerial.write(" CODICE ERRATO! ");
delay(500);
#ifdef BUZZER_ON
noTone(PIN_BUZZER);
#endif
pulisciSchermo();
delay(500);
}
displaySerial.write(254);
displaySerial.write(128);
displaySerial.write(" CHIUSA ");
}
// reset
codiceIndex = -1;
aggiornaSecondaRiga();
}
// Private key for generating the OTP codes uint8_t hmacKey[] = {0x65, 0x6c, 0x65, 0x74, 0x74, 0x72, 0x6f, 0x2d, 0x69, 0x6e}; // Buzzer on / off (comment out the line below to disable it #define BUZZER_ON // Of the lock operation mode // impulse mode = // if the code is ok, the lock remains open for many milliseconds (defined below) // stabile mode = // if the code is ok, the lock remains open until you press a key (defined below) #define impulse mode 0 #define stabile mode 1 byte Lock mode = impulse mode; // Of the lock opening time (in milliseconds) if impulse mode #define OPENING TIME 2000 // Button to close the lock if stabile mode #define CLOSING KEY 'D' // ----- Usually you not need to change anything below this line ----- // Definition of PIN #define PIN_BUZZER 6 #define PIN_LEDRED 11 #define PIN_LEDGREEN 12 #define PIN_RELAY 13 #include <Keypad.h> const byte ROWS = 4; //four rows const byte COLS = 4; //four columns //define the cymbols on the buttons of the keypads char hexaKeys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; //initialize an instance of class NewKeypad Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup() { Serial.begin(9600); } void loop() { char customKey = customKeypad.getKey(); if (customKey) {// same as if(customKey != NO_KEY) Serial.println(customKey); } } byte rowpins[] = { 8, 7, 6, 5 }; byte colpins[] = { 12, 11, 10, 9 };Охренеть.
Надо переводчик доработать?
ПС. Так мы скоро дождемся и "помогите! бумажка в сортире закончилась!" Инфантилы вконец уху кушают.
а он чо, по-итальянске плохо работает? Аптамуш, у тебя Ардуина китайская. Купи родную, и код засверкает своими яркими красками.
Помогите пожалуйста с переводом кола с итальянского на английский..
Насколько я вижу, данный "кол" написан не С++, а не на итальянском. Потому перевести его с итальянского невозможно ввиду отсутствия предмета перевода. А если перевести с С++ на англиский, то он не будет работать, т.к. компилятора с английского в коды AVR в поставке IDE нет.
Или Вы имеете в виду перевести текстовые сообщения типа "Il giorno specificato non e' valido: "? Так переводите их в переводчике по одному и втавляйте - не ленитесь.
spannys - сколько платите? Итальянского не знаю, но знаю испанский - они очень похожи. Сообщения в скетче легко могу перевести без гугля
Или Вы имеете в виду перевести текстовые сообщения типа "Il giorno specificato non e' valido: "? Так переводите их в переводчике по одному и втавляйте - не ленитесь.
А форум тогда на что?
А форум тогда на что?
Тоже верно, чёт я не подумал.
Перевести не проблемма даже если по слову переводить... вся проблемма в том что после перевода скетч не проходит компиляцию....появляется куча ошибок... я не очень пока что силен в этом...
Ошибки тоже на италянском?
Ошибка синтаксисе команды или нескольких после перевода ... а я что то могу исправить а что то не выходит..
Звиздец, ты тугой.
услуги переводчика - $10
Spamys - а "итальянский" то код компилируется без ошибок и работает правильно? - вы проверяли?
А то может в нем исходно ошибки есть, и дело не в переводе?
Приложеный код удачно скомпилирован и залит.. выполняются почти все нужные функции.. (немогу пока понять по какой причине не работает экран и коды OTP с приложением не синхронизуруются.. а так работает..
Приложеный код удачно скомпилирован и залит.. выполняются почти все нужные функции.. (немогу пока понять по какой причине не работает экран и коды OTP с приложением не синхронизуруются.. а так работает..
а что там за нужные функции кроме экрана и клавиатуры?
Даный код предназначен лдя генерации одноразового пароля который привязан к телефону на основе общего секрета (пароля) екран в принципе и не нужен.. Тобиш.. даный девайс это кодовый замок который открывается одноразовым кодом..
готов попробовать перевести Вам сообщения с сохранением компилируемости кода. Но поскольку это потребует разбираться в скетче и ставить все библиотеки - не бесплатно.
Если хотите обсудить - пишите ded@cur-ex.ru
Не удается отправить вам сообщениена даную почту.. ваше предложение очень интересное во сколько обойдется ваша помощь? (Скажу сразу я студент...и средствами располагаю слабо..)
почта точно живая, попробуйте еще раз чуть позже. Или напишите свою
Понятно, т.е. получили задание. Нормального кода в сети не нашли, а код с итальянскими сообщениями показывать преподу боитесь, т.к. тот не поверит, что Вы сами писали (и правильно сделает, т.к. сами Вы даже текстовые константы поменять не можете). Всё правильно?
b707 и Вы всерьёз собрались помогать?
Блин, у нас тут есть специалист по таким "заказчикам", мож появится - наведёт порядок :)
b707 и Вы всерьёз собрались помогать?
Ну поможет, заработает денежку. А потом отправил информацию ректору, как сознательный гражданин :-)))
Так, вот и говорю. Куда ворота задевался? Он уже это проделывал с одним кренделем :)
Так, вот и говорю. Куда ворота задевался? Он уже это проделывал с одним кренделем :)
думаете диплом? - тогда я пас
Ну поможет, заработает денежку. А потом отправил информацию ректору, как сознательный гражданин :-)))
не, мы это уже обсуждали. "Сигнализировать" не стану. Просто откажусь делать.
Люди!!!! Что вы городите!? Не хотите что то путное подсказать -ПОМОЛЧИТЕ ТОГДА! Я начинающий ардуинщик нашел интересный девайс и хочу реализовать дома..
Так хотел бы, выложил бы свою попытку, и спросил бы что не так сделано. А так, похоже, хочется просто получить готовое.
Вот я и выложил целый код что бы вы как проффи помогли изменить язык.. я ж непрошу сделать за меня работу.. просто подскажите.. я ардуино только осваивать начал..
Так, те, кто хотят сделать, выкладывают свои коды, которые у них не работают, а не стыренные - работающие.
1) код НЕ ТЫРЕНЫЙ! А свободно распостроняемый!
2)Пока что я не умею писать такие проэкты так как с ардуино работаю недавно.. а девай нужен в ближайшее время..
1) код НЕ ТЫРЕНЫЙ! А свободно распостроняемый!
2)Пока что я не умею писать такие проэкты так как с ардуино работаю недавно.. а девай нужен в ближайшее время..
Нада исчо ношкой топнуть!!!
так что надо то ?
щоб это
Serial.print(F("Carattere non valido (non e' un numero): "));стало этим
Serial.print (F ("Недопустимый символ (не число):"));Что вроди этого.. в данном коде есть команды на итальянском.. после транслейта на английский ардуино ругаетя так как не хватает то переменных то нще чего то..
Только сами команды что бы коректно потом работали.
в данном коде есть команды на итальянском..
вы серьезно ?
например ?
Что вроди этого.. в данном коде есть команды на итальянском.. после транслейта на английский ардуино ругаетя так как не хватает то переменных то нще чего то..
Spamys - в данном коде НЕТ команд на итальянском. Если считаете иначе - приведите для примера номер строки с такой командой.
Все, что вам нужно сделать - это перевести ТОЛЬКО ТЕКСТОВЫЕ строки (в кавычках. подсвечены голубым в коде) Все, что "по-итальянски" в самом коде - ТРОГАТЬ НЕ НАДО.
ЕвгкенийП & dimax - обломали меня :) хотел похвастать знанием языков... не только языков программирования :)
Говорю по-русски. читаю на английском и испанском. пишу на Перле и Си. :))))
int >giorno <= (bufferSeriale[1] - '0') * 10 + (bufferSeriale[2] - '0'); 143 int >mese <= (bufferSeriale[3] - '0') * 10 + (bufferSeriale[4] - '0'); 144 int >anno <= 2000 + (bufferSeriale[5] - '0') * 10 + (bufferSeriale[6] - '0'); 145 int >ora <= (bufferSeriale[7] - '0') * 10 + (bufferSeriale[8] - '0'); 146 int >minuti <= (bufferSeriale[9] - '0') * 10 + (bufferSeriale[10] - '0'); 147 int >secondi <= (bufferSeriale[11] - '0') * 10 + (bufferSeriale[12] - '0');Я так и переводил.. что то проходит а что то потом ругается... вечером сяду за комп перепробую варианты отпишусь.. спасибо за подсказки ребят!
int >giorno <= (bufferSeriale[1] - '0') * 10 + (bufferSeriale[2] - '0'); 143 int >mese <= (bufferSeriale[3] - '0') * 10 + (bufferSeriale[4] - '0'); 144 int >anno <= 2000 + (bufferSeriale[5] - '0') * 10 + (bufferSeriale[6] - '0'); 145 int >ora <= (bufferSeriale[7] - '0') * 10 + (bufferSeriale[8] - '0'); 146 int >minuti <= (bufferSeriale[9] - '0') * 10 + (bufferSeriale[10] - '0'); 147 int >secondi <= (bufferSeriale[11] - '0') * 10 + (bufferSeriale[12] - '0');это имена переменных. Их, конечно, можно тоже перевести :) но для реальной задачи это нафик не нужно, так как абсолютно пофиг. как они называются - mese, month, месяц или вообще ds5665
Если для вас важно перевести эти идентификаторы - это доказывает. что это диплом...
хорошо, а это тады какой язык ?
int minutki = (bufferSeriale[9] - '0') * 10 + (bufferSeriale[10] - '0'); int secundocki = (bufferSeriale[11] - '0') * 10 + (bufferSeriale[12] - '0');Язык уси-пуси....
Ну так это в корни дело меняет! Я то думал что нужно все переводить..
Я так и переводил..
А нафига переводил-то?
Я ж не знал что не все переводить нужно то.. я ж говорю что только начал работу с ардуино..
хорошо, а это тады какой язык ?
int minutki = (bufferSeriale[9] - '0') * 10 + (bufferSeriale[10] - '0'); int secundocki = (bufferSeriale[11] - '0') * 10 + (bufferSeriale[12] - '0');Не, такой неправильно. Надо вот так:
Я ж не знал что не все переводить нужно то.. я ж говорю что только начал работу с ардуино..
Я ж не знал что не все переводить нужно то.. я ж говорю что только начал работу с ардуино..
Была же Рапира, почему нельзя Си, а у Тихонова отличный интерпретатор в его Инфо-Бухгалтере тоже на русском )))
ПС: Важен не язык, а наработаная база и популяроность среди людей занимающихся программированием.
А как же Мир-2?