Algoritma Anti Bouncing

Interupt Rising

  1. set interupt rising.
  2. cek interupt apakah terjadi dalam rentang waktu cepat(ex. 20), jika iya, abaikan(close).
  3. increment event-counter.
  4. thread pengumpul, cek event-counter rising? jika tidak abaikan(close).
  5. delay beberapa saat(ex 20).
  6. cek apakah pin benar2 up? jika tidak abaikan(close).
  7. increment counter!.

 

berlaku juga untuk falling juga. ini digunakan apabila rangkaian sangat tidak stabil dengan frekuensi counter rendah. 🙂

Multithreading di C

assalamu’alaikum semuanya.

saya mau berbagi tentang multithreading di  bahasa C.

pertama include dahulu library-nya. saya menggunakan pthread.h.

selanjutnya beberapa hal yg mesti diperhatikan:

  1. fungsi pthread_create
  2. fungsi pthread_cancel

baru itu yg saya pelajari. hahaha…

 

sesi curhat:

sekarang saya sangat merasa nyaman dengan C/C++ tapi masih sangat bergantung dengan IDE. tapi, bisikan seorang kawan dengan kemudahan yg ditawarkan oleh node.js, saya kok jadi pengen belajar ya? hehe…

 

Saat pikiran manusia berantakan

Saya mau curhat saja. pagi ini tidak ada yg bisa saya bagikan seputar programming. bukan tidak ada yg bisa, tapi tidak bisa. pikiran saya sangat penat. beberapa hal mesti saya pikirkan.

bermula dari beberapa tahun lalu. cengar-cengir seorang kawan. masih ingat di dalam otak saya. mengubah arah kemana saya melangkah. itu satu dosa. berfikir ingin menguasai. berfikir bagaimana mencari uang yang banyak. berfikir bagaimana menjegal. bermula dari cengir manisnya.

dia tidak salah. dia hanya sedang mencari jalan. yang salah adalah saya. saya mengijinkan diri saya menuruti ambisi saya.

kini, saat ini, saya sedang butuh pertolongan. saya saat ini tak jarang bangun siang. bahkan, saya pernah bangun jam 3 sore. tak ada ibadah dari semenjak saya tertidur. saya membenamkan diri pada dosa. tak ada getaran dalam hati di saat menyebut nama Allah. tak ada kerinduan saat disebut nama Rasulullah. aku merindukan rindu itu.

 

apa dosa saya ?

itu yg saat ini saya pikirkan. mencoba mencari kesalahan diri. membuat list dan hingga detik ini belum saya temukan. bukan tidak ada dosa yang berhasil saya temukan, namun saya seakan harus menemukan satu dosa yang menjadi biangkeladi dari tumpukan dosa yang saya lakukan ini.

 

pagi semuanya.

 

Post from Qt5

#include <QCoreApplication>
#include <QDebug>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QUrlQuery>
void sendRequest();
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    sendRequest();
    return 0;// a.exec();
}
void sendRequest(){
   QByteArray data;
    QUrlQuery params;
    params.addQueryItem("param1", "value1");
    params.addQueryItem("param2", "value2");
    params.addQueryItem("param3", "value3");
    data.append(params.toString());
    qDebug()<<data;
    QEventLoop eventLoop;
    QNetworkAccessManager manager;
    QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
    QNetworkRequest request(QUrl("http://mars.dev/test"));
    request.setHeader(QNetworkRequest::ContentTypeHeader,QStringLiteral("application/x-www-form-urlencoded"));
    QNetworkReply *reply = manager.post(request,data);
    qDebug()<<"tunggu";
    eventLoop.exec(); // tunggu hingga request finish
    if (reply->error() == QNetworkReply::NoError) {
        //success
        qDebug() << "Success" <<reply->readAll();
        delete reply;
    }
    else {
        //failure
        qDebug() << "Failure" <<reply->errorString();
        delete reply;
    }
    qDebug()<<"selesai";
}

 

Prosedure MySQL pertamaku.

fasilitas ini sebenernya fasilitas kuno yang tersedia di mysql. cuman kali ini aja kayaknya butuh prosedur untuk menginput datanya. so, belajar dulu. dan alhamdulillah berhasil sesuai dengan yang diinginkan. 🙂

 

ini dia prosedure buatan saya:

DELIMITER $$

DROP PROCEDURE IF EXISTS `save_state`$$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
PROCEDURE `kang_aep`.`save_state`(id_line VARCHAR(10),
fg_qty INT,
ng_qty INT,
er_qty INT)
/*LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT ‘string’*/
BEGIN
DECLARE last_id INT(11) DEFAULT 0;
DECLARE last_fg INT(11) DEFAULT 0;
DECLARE last_ng INT(11) DEFAULT 0;
DECLARE last_er INT(11) DEFAULT 0;
DECLARE newNG BOOL DEFAULT FALSE;
SELECT MAX(t_counting_id)
INTO last_id
FROM t_counting
WHERE t_counting.`line_id` = id_line;

SELECT t_counting_id,
COALESCE( fg_quantity,0),
COALESCE(ng_quantity,0),
COALESCE(e_quantity,0)
INTO last_id, last_fg, last_ng, last_er
FROM t_counting
WHERE t_counting.`line_id` = id_line
AND t_counting_id = last_id;

WHILE last_fg < fg_qty DO
SET last_fg := last_fg + 1;
INSERT INTO t_counting(line_id,ng_quantity, fg_quantity,e_quantity, TYPE)
VALUE(id_line, last_ng, last_fg, last_er, “FG”);
END WHILE;

WHILE last_ng < ng_qty DO
SET last_ng := last_ng + 1;
INSERT INTO t_counting(line_id,ng_quantity, fg_quantity,e_quantity, TYPE)
VALUE(id_line, last_ng, last_fg, last_er, “NG”);
SET newNG := TRUE;
END WHILE;

WHILE last_er < er_qty DO
SET last_er := last_er + 1;
INSERT INTO t_counting(line_id,ng_quantity, fg_quantity,e_quantity, TYPE)
VALUE(id_line, last_ng, last_fg, last_er, “ER”);
END WHILE;
IF newNG THEN
INSERT INTO `t_message`(`number`, `message`)
(SELECT `telp`, CONCAT(“Telah terdeteksi metal di line (“, `linename` ,”), plan (“, `planname`, “) sejumlah “, `ng_quantity`, “pcs dengan klaim error sejumlah “, `e_quantity`, “pcs.”) message
FROM `v_pre_sms` WHERE `v_pre_sms`.`line_id` = id_line);
INSERT INTO outbox(`DestinationNumber`, `TextDecoded`)
(SELECT `telp`, CONCAT(“Telah terdeteksi metal di line (“, `linename` ,”), plan (“, `planname`, “) sejumlah “, `ng_quantity`, “pcs dengan klaim error sejumlah “, `e_quantity`, “pcs.”) message
FROM `v_pre_sms` WHERE `v_pre_sms`.`line_id` = id_line);
END IF;
END$$

DELIMITER ;

alhamdulillah berjalan dengan baik sekali. 🙂

Tutorial Integrasi C++/Qt5 dengan QML.

pagi ini saya bermain-main dengan QML untuk menampilkan data. mungkin sebagian belum familiar dengan QML. yang tidak tahu, boleh cari info di google. gak apa-apa. bukan ilmu agama yang mengharuskan bersanad. cayoo…

QML itu semacam css3. cuman gak pake div-div-an.  kalau mau belajar, sedikit saja. saya kira yang suka ngoprek tampilan akan jatuh cinta.

kali ini saya hanya mau membahas bagaimana untuk mengintegraskan antara QML dan C++. mainset utamanya adalah, C++ menngontrol QML, QML memberikan signal pada C++. jadi bukan signal-slots secara penuh layaknya antar object di C++.

tahap persiapan. buat project untuk membuat qwidget. buat file resource/qrc. lalu buat file qml baru, masukkan ke qrc.

tahapan selanjutnya:

QQuickView * qml = new QQuickView();

QWidget * wid = QWidget::createWindowContainer(qml, this);

qml->setSource(QUrl(“qrc/namaqmlnya.qml”));

QObject * rootQml = qml->rootObject();

QVBoxLayout *ly = new QVBoxLayout(this);

ly->addWidget(wid);

this->setLayout(ly);

nah, kita sudah punya objek qml, wid, dan rootQml. rootQml inilah yang nantinya akans sering kita pakai. cayoo…

saya ngoding dulu ya. saya tinggal dulu. nanti semoga sempat dan “kenceng” saya update lagi. 😀