Arduino Projects For Beginners
Arduino Projects For Beginners
Tulisan ini ditujukan kepada penggemar micro controller berbasis arduino tingkat pemula. Semua
materi adalah rangkuman dari berbagai sumber, kemudian dilakukan pengujian dan modifikasi.
Pengetahuan ini diperuntukkan untuk tujuan kebaikan, penerapan untuk tujuan-tujuan kejahatan
diluar tanggung jawab penyusun.
DAFTAR ISI
Pada proyek ini kita sajikan penginstalan module L298N pada arduino. Kita menggunakan dua
motor DC, modul ini dapat dipasang dengan dua motor maksimum. Program yang kita sajikan
adalah modifikasi dari progran yang dibuat oleh Reichenstein.
// 1 -Motor 1 Left
// 2 -Motor 1 Stop
// 3 -Motor 1 Right
//
// 4 -Motor 2 Left
// 5 -Motor 2 Stop
// 6 -Motor 2 Right
// Declare L298N Dual H-Bridge Motor Controller directly since there is not a library to load.
// Motor 1
int dir1PinA = 2;
int dir2PinA = 3;
int speedPinA = 9; // Needs to be a PWM pin to be able to control motor speed
// Motor 2
int dir1PinB = 4;
int dir2PinB = 5;
int speedPinB = 10; // Needs to be a PWM pin to be able to control motor speed
pinMode(dir1PinA,OUTPUT);
pinMode(dir2PinA,OUTPUT);
pinMode(speedPinA,OUTPUT);
pinMode(dir1PinB,OUTPUT);
pinMode(dir2PinB,OUTPUT);
pinMode(speedPinB,OUTPUT);
void loop() {
henti();
delay(1000);
maju();
delay(5000);
henti();
delay(1000);
mundur();
delay(5000);
henti();
delay(1000);
kanan();
delay(5000);
henti();
delay(1000);
kiri();
delay(5000);
}
void maju(){
analogWrite(speedPinA, 80);//Sets speed variable via PWM
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
analogWrite(speedPinB, 80);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
}
void mundur(){
analogWrite(speedPinA, 80);
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
analogWrite(speedPinB, 80);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
}
void kanan(){
analogWrite(speedPinA, 80);//Sets speed variable via PWM
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
analogWrite(speedPinB, 80);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
}
void kiri(){
analogWrite(speedPinA, 80);
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
analogWrite(speedPinB, 80);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
}
void henti(){
analogWrite(speedPinA, 0);
analogWrite(speedPinB, 0);
}
------------------------------------------------------------------------------------------------------
2. MOTOR DC DENGAN L298N DUAL H-BRIDGE MOTOR CONTROLLER BY
KEYBOARD
//Keyboard Controls:
//
// 1 -Motor 1 Left
// 2 -Motor 1 Stop
// 3 -Motor 1 Right
//
// 4 -Motor 2 Left
// 5 -Motor 2 Stop
// 6 -Motor 2 Right
// Declare L298N Dual H-Bridge Motor Controller directly since there is not a library to load.
// Motor 1
int dir1PinA = 2;
int dir2PinA = 3;
int speedPinA = 9; // Needs to be a PWM pin to be able to control motor speed
// Motor 2
int dir1PinB = 4;
int dir2PinB = 5;
int speedPinB = 10; // Needs to be a PWM pin to be able to control motor speed
pinMode(dir1PinA,OUTPUT);
pinMode(dir2PinA,OUTPUT);
pinMode(speedPinA,OUTPUT);
pinMode(dir1PinB,OUTPUT);
pinMode(dir2PinB,OUTPUT);
pinMode(speedPinB,OUTPUT);
void loop() {
if (Serial.available() > 0) {
int inByte = Serial.read();
int speed; // Local variable
switch (inByte) {
//______________Motor 1______________
//______________Motor 2______________
-------------------------------------------------------------------------------------------------------
3. KONTROL SERVO MOTOR DENGAN POTENSIOMETER
#include <Servo.h>
Servo head;
int sensorPin = A0;
int sensorValue = 0;
int sudut = 0;
void setup()
{
head.attach(7); // pin terkoneksi ke input servo motor
head.write(80);
pinMode(sensorPin,INPUT);
Serial.begin(9600);
}
void loop(){
float sensorValue = analogRead(sensorPin);
int sudut = (sensorValue/1023)*180;
Serial.println(sudut);
head.write(sudut);
}
4. PENGUKURAN SUHU DAN KELEMBABAN DENGAN DHT 11
#include <dht.h>
dht DHT;
#define DHT11_PIN 5
void setup()
{
Serial.begin(9600);
void loop()
{
delay(100);
}
================================================================
5. DHT22 ARDUINO
// Version number
const float fVerNum = 0.03;
//////////////////////////////////////////////////////
//
// SETUP
//
void setup() {
// Setup serial monitor
Serial.begin(9600);
// Wait 3 seconds
delay(3000);
Serial.println(F("\nAM2302 Sensor"));
Serial.print(F("Version : "));
Serial.println(fVerNum);
Serial.println(F("Arduino - Derek Erb\n"));
delay(5000);
dht.begin();
}
void loop() {
// Wait 3 seconds
delay(3000);
}
--------------------------------------------------------------------------------------------------------
6. PRESSURE BAROMETER BMP 180
This sketch shows how to use the SFE_BMP180 library to read the
Bosch BMP180 barometric pressure sensor.
https://www.sparkfun.com/products/11824
Once you have a temperature reading, you can take a pressure reading.
This is done with startPressure() and getPressure().
The result is in millibar (mb) aka hectopascals (hPa).
If you want to measure altitude, you will need to know the pressure
at a baseline altitude. This can be average sealevel pressure, or
a previous pressure reading at your altitude, in which case
subsequent altitude readings will be + or - the initial baseline.
This is done with the altitude() function.
Hardware connections:
- (GND) to GND
+ (VDD) to 3.3V
You will also need to connect the I2C pins (SCL and SDA) to your
Arduino. The pins are different on different Arduinos:
Our example code uses the "beerware" license. You can do anything
you like with this code. No really, anything. If you find it useful,
buy me a beer someday.
// Your sketch must #include this library, and the Wire library.
// (Wire is a standard library included with Arduino.):
#include <SFE_BMP180.h>
#include <Wire.h>
SFE_BMP180 pressure;
void setup()
{
Serial.begin(9600);
Serial.println("REBOOT");
// Initialize the sensor (it is important to get calibration values stored on the device).
if (pressure.begin())
Serial.println("BMP180 init success");
else
{
// Oops, something went wrong, this is usually a connection problem,
// see the comments at the top of this sketch for the proper connections.
void loop()
{
char status;
double T,P,p0,a;
Serial.println();
Serial.print("provided altitude: ");
Serial.print(ALTITUDE,0);
Serial.print(" meters, ");
Serial.print(ALTITUDE*3.28084,0);
Serial.println(" feet");
// If you want to measure altitude, and not pressure, you will instead need
// to provide a known baseline pressure. This is shown at the end of the sketch.
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
Serial.print("temperature: ");
Serial.print(T,2);
Serial.print(" deg C, ");
Serial.print((9.0/5.0)*T+32.0,2);
Serial.println(" deg F");
status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
Serial.print("absolute pressure: ");
Serial.print(P,2);
Serial.print(" mb, ");
Serial.print(P*0.0295333727,2);
Serial.println(" inHg");
// The pressure sensor returns abolute pressure, which varies with altitude.
// To remove the effects of altitude, use the sealevel function and your current altitude.
// This number is commonly used in weather reports.
// Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in m.
// Result: p0 = sea-level compensated pressure in mb
// On the other hand, if you want to determine your altitude from the pressure reading,
// use the altitude function along with a baseline pressure (sea-level or other).
// Parameters: P = absolute pressure in mb, p0 = baseline pressure in mb.
// Result: a = altitude in m.
a = pressure.altitude(P,p0);
Serial.print("computed altitude: ");
Serial.print(a,0);
Serial.print(" meters, ");
Serial.print(a*3.28084,0);
Serial.println(" feet");
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}
else Serial.println("error starting temperature measurement\n");
#include <Wire.h>
#include "BMP280.h"
#define P0 1013.25
BMP280 bmp;
void setup(){
if(!bmp.begin()){
Serial.println("BMP init failed!");
while(1);
}
else {
Serial.println("BMP init success!");
}
bmp.setOversampling(4);
Serial.begin(9600);
Wire.begin();
}
void loop(){
{
double T,P;
char result = bmp.startMeasurment();
if(result!=0){
delay(result);
result = bmp.getTemperatureAndPressure(T,P);
if(result!=0)
{
double A = bmp.altitude(P,P0);
Serial.print("T = \t");
Serial.print(T,2);
Serial.print(" degC\t");
Serial.print("P = \t");
Serial.print(P,2);
Serial.print(" mBar\t");
Serial.print("A = \t");
Serial.print(A,2);
Serial.println(" m");
}
else {
Serial.println("Error.");
}
}
else {
Serial.println("Error.");
}
delay(100);
}
}
===========================================================
8. STEPPER MOTOR 28BYJ-48 WITH L293D CONTROLLED BY KEYBOARD
/*
Adafruit Arduino - Lesson 16. Stepper
*/
#include <Stepper.h>
void setup()
{
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(in3Pin, OUTPUT);
pinMode(in4Pin, OUTPUT);
Serial.begin(9600);
motor.setSpeed(25);
}
void loop()
{
if (Serial.available())
{
int steps = Serial.parseInt();
motor.step(steps);
}
}
==============================================================
9. PUSH BUTTON IR REMOTE
#include <IRremote.h>
int RECV_PIN = 8; // the pin where connect the output pin of IR receiver
int led4 = 9;//connect this pin to relay module
int led5 = 10;
int led6 = 11;
int itsONled[] = {0,0,0};
#define code1 16724175 // code received from button IR remote
#define code2 16718055
#define code3 16743045
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
void loop() {
if (irrecv.decode(&results)) {
unsigned int value = results.value;
switch(value) {
case code1:
if(itsONled[1] == 1) { // if first led is on then
digitalWrite(led4, HIGH);
delay(500);
digitalWrite(led4, LOW);
//digitalWrite(led2, LOW);
//digitalWrite(led3, HIGH); // turn it off when button is pressed
itsONled[1] = 0; // and set its state as off
} else { // else if first led is off
digitalWrite(led4, HIGH);
delay(500);
digitalWrite(led4, LOW);
//digitalWrite(led2, HIGH);
//digitalWrite(led3, LOW); // turn it on when the button is pressed
itsONled[1] = 1; // and set its state as on
}
break;
case code2:
if(itsONled[1] == 1) { // if first led is on then
digitalWrite(led5, HIGH);
delay(500);
digitalWrite(led5, LOW);
//digitalWrite(led2, LOW);
//digitalWrite(led3, HIGH); // turn it off when button is pressed
itsONled[1] = 0; // and set its state as off
} else { // else if first led is off
digitalWrite(led5, HIGH);
delay(500);
digitalWrite(led5, LOW);
//digitalWrite(led2, HIGH);
//digitalWrite(led3, LOW); // turn it on when the button is pressed
itsONled[1] = 1; // and set its state as on
}
break;
case code3:
if(itsONled[1] == 1) { // if first led is on then
digitalWrite(led6, HIGH);
delay(500);
digitalWrite(led6, LOW);
//digitalWrite(led2, LOW);
//digitalWrite(led3, HIGH); // turn it off when button is pressed
itsONled[1] = 0; // and set its state as off
} else { // else if first led is off
digitalWrite(led6, HIGH);
delay(500);
digitalWrite(led6, LOW);
//digitalWrite(led2, HIGH);
//digitalWrite(led3, LOW); // turn it on when the button is pressed
itsONled[1] = 1; // and set its state as on
}
break;
}
Serial.println(value);
irrecv.resume(); // Receive the next value
}
}
------------------------------------------------------------------------------------------------------------
10. LIFT 3 FLOOR
/*
Elevator project with arduino pro mini 328 5v 8mhz
void setup()
pinMode(dir1PinA,OUTPUT);
pinMode(dir2PinA,OUTPUT);
pinMode(speedPinA,OUTPUT);
pinMode(sensorL1, INPUT);
pinMode(sensorL2, INPUT);
pinMode(sensorL3, INPUT);
pinMode(tombolL1, INPUT);
pinMode(tombolL2, INPUT);
pinMode(tombolL3, INPUT);
Serial.begin(9600);
void loop()
{
digitalWrite(poweron, HIGH);
tombolL1state = digitalRead(tombolL1);
tombolL2state = digitalRead(tombolL2);
tombolL3state = digitalRead(tombolL3);
sensorL1state = digitalRead(sensorL1);
sensorL2state = digitalRead(sensorL2);
sensorL3state = digitalRead(sensorL3);
if (tombolL1state == HIGH)
{
delay(200);
while(tombolL1state == HIGH)
{
tombolL1state = digitalRead(tombolL1);//check the value of the button again
delay(10);//keep running smoothly
}//wait for the relese of the button to continue
delay(1000);
floor1function();//go to the floor 1 fuction of the elevator
}
{
delay(200); //software debounce of the button
while(tombolL2state == HIGH)
{
tombolL2state = digitalRead(tombolL2);//check the value of the button again
delay(10);//keep running smoothly
}//wait for the relese of the button to continue
delay(1000);
floor2function();//go to the floor 2 fuction of the elevator
}
{
delay(200); //software debounce of the button
while(tombolL3state == HIGH)
{
tombolL3state = digitalRead(tombolL3);//check the value of the button again
delay(10);//keep running smoothly
}//wait for the relese of the button to continue
delay(1000);
floor3function();//go to the floor 3 fuction of the elevator
}
void floor1function()
if(sensorL1state != HIGH) // check the proximity sensor of the first floor to see if the
elevator is there
void floor2function()
if(sensorL3state == HIGH) // check the proximity sensor of the third floor to see
if the elevator is there
{
turun();
//digitalWrite(buzzer, HIGH);//some noise in the mic
sensorL2state = digitalRead(sensorL2);
delay(10);//a few delay to keep running the routine smoothly
}
while( sensorL2state==HIGH)//the motor begins and stops when the
appropriate floor proximity give the signal
{
henti();
//digitalWrite(buzzer, HIGH);//some noise in the mic
sensorL2state = digitalRead(sensorL2);
delay(10);//a few delay to keep running the routine smoothly
resetFunc(); //call reset
}
}
else if(sensorL1state == HIGH) // check the proximity sensor of the first floor to
see if the elevator is there
{
naik();
//digitalWrite(buzzer, HIGH);//some noise in the mic
sensorL2state = digitalRead(sensorL2);
delay(10);//a few delay to keep running the routine smoothly
}
while( sensorL2state==HIGH)//the motor begins and stops when
the appropriate floor proximity give the signal
{
henti();
//digitalWrite(buzzer, HIGH);//some noise in the mic
sensorL2state = digitalRead(sensorL2);
delay(10);//a few delay to keep running the routine smoothly
resetFunc(); //call reset
}
void floor3function()
{
henti();
//digitalWrite(buzzer, HIGH);//some noise in the mic
sensorL3state = digitalRead(sensorL3);
delay(10);//a few delay to keep running the routine smoothly
resetFunc(); //call reset
}
void naik(){
analogWrite(speedPinA, 80);//Sets speed variable via PWM
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
}
void turun(){
analogWrite(speedPinA, 80);
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
}
void henti(){
analogWrite(speedPinA, 0);
}
--------------------------------------------------------
11. SWITCH OTOMATIS POMPA AIR DENGAN SENSOR KAPASITIF
Metode ini pada prinsipnya menggunakan pelepasan muatan pada kawat sensor, sensor sangat peka,
karena kepekaannya maka metode ini kadang memberikan kesalahan. Peletakan kabel sensor sangat
banyak berpengaruh.
#include <CapacitiveSensor.h>
#define led 11 //this pin for drive relay
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); // 10M resistor between pins 4 & 2, pin 2
is sensor pin, add a wire and or foil if desired
CapacitiveSensor cs_5_6 = CapacitiveSensor(5,6); // 10M resistor between pins 5 & 6, pin 6
is sensor pin, add a wire and or foil
void setup() {
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an
example
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
long start = millis();
long total1 = cs_4_2.capacitiveSensor(30);
long total2 = cs_5_6.capacitiveSensor(30);
}
if (total2 >= 15000) {
digitalWrite(led, HIGH);
Serial.print(total1);
Serial.print(" ");
Serial.println(total2);
delay(100);
}
-------------------------------------------
12. ALAT PENGUJI WEATHERING LPG
/*
In this project we use LM324 chip for amplify signal from RTD PT100, amplified signal than go to
ADS1015 for increase digital resolution.
*/
#include <Wire.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads(0x48);
#include <LiquidCrystal.h>
int temp0;
int temp1;
int delta;
void setup() {
Serial.begin(9600);
ads.begin();
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("WEATHERING TEST");
lcd.setCursor(4,1);
lcd.print("VERSION 3");
delay(5000);
}
void loop() {
int16_t adc0; // we read from the ADC, we have a sixteen bit integer as a result
int16_t adc1;
adc0 = ads.readADC_SingleEnded(0);
adc1 = ads.readADC_SingleEnded(1);
temp1 = adc1;
temp0 = adc0;
float fhrt = (temp0*0.0466)-671.48;
int delta = temp1-temp0;
if (delta>=70 || fhrt>40){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("T=");
lcd.setCursor(2,0);
lcd.print(fhrt,2);
lcd.setCursor(7,0);
lcd.print("F");
lcd.setCursor(12,0);
lcd.print("END");
lcd.setCursor(0,1);
lcd.print(delta);
lcd.setCursor(11,1);
lcd.print(temp1);
delay(36000000);
}
else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("T=");
lcd.setCursor(2,0);
lcd.print(fhrt,2);
lcd.setCursor(7,0);
lcd.print("F");
lcd.setCursor(0,1);
lcd.print(delta);
lcd.setCursor(11,0);
lcd.print(temp0);
lcd.setCursor(11,1);
lcd.print(temp1);
Serial.print(temp0);
Serial.print(" ");
Serial.println(temp1);
delay(400);
}
}
----------------------------------------------------------------------
13. SWITCH OTOMATIS POMPA AIR DENGAN SENSOR CONDUCTIVITY
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
int sensorValue0 = analogRead(A0);
int sensorValue1 = analogRead(A1);
}
if (sensorValue1 >= 500) {
digitalWrite(led, HIGH);
}
Serial.print(sensorValue0);
Serial.print(" ");
Serial.println(sensorValue1);
delay(100);
}
---------------------------------------------------------------------------------------------
14. SETUP LCD 16X2
/*
LiquidCrystal Library - Hello World
The circuit:
* LCD RS pin to digital pin 8
* LCD Enable pin to digital pin 7
* LCD D4 pin to digital pin 6
* LCD D5 pin to digital pin 5
* LCD D6 pin to digital pin 4
* LCD D7 pin to digital pin 3
* LCD R/W pin to ground
* LCD VSS pin to ground
* LCD VCC pin to 5V
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis() / 1000);
}
---------------------------------------------------------------------------------------------------------
15. GENERATOR NADA
pada sket di atas harus dilengkapi folder dengan nama pitches.h, buatlah folder baru pada IDE beri
nama folder pitches.h, selanjutnya paste sket di bawah ini kemudian save.
/*************************************************
* Public Constants
*************************************************/
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978
------------------------------------------------------------------------------------------------------------
16. MEMBACA TEGANGAN 5V
/*
ReadAnalogVoltage
Reads an analog input on pin 0, converts it to voltage, and prints the result to the serial monitor.
Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.
--------------------------------------------------------------------------------------------------------------
17. SETUP RTC
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Serial.begin(9600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop () {
DateTime now = RTC.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
}
------------------------------------------------------------------------------------------------
18. ALARM NADA
// coder elangsakti
// tangga nada C
#define NOTE_C4 262
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
// DO
// RE
// MI
// FA
// SOL
// LA
// SI
// DO
// speaker ada di pin 9
const int pinSpeaker = 9;
void setup() {
pinMode(pinSpeaker, OUTPUT);
}
void loop() {
tone(pinSpeaker,NOTE_C4, 500);
delay(500);
tone(pinSpeaker,NOTE_D4, 500);
delay(500);
tone(pinSpeaker,NOTE_E4, 500);
delay(500);
tone(pinSpeaker,NOTE_F4, 500);
delay(500);
tone(pinSpeaker,NOTE_G4, 500);
delay(500);
tone(pinSpeaker,NOTE_A4, 500);
delay(500);
tone(pinSpeaker,NOTE_B4, 500);
delay(500);
tone(pinSpeaker,NOTE_C5, 500);
delay(500);
-----------------------------------------------------------------------------------------------------------
/*
SparkFun Inventor's Kit
Example sketch 11
BUZZER
Hardware connections:
The buzzer has two pins. One is positive and one is negative.
The postitive pin is marked by a "+" symbol on both the top
and bottom of the buzzer.
/*
This sketch uses the buzzer to play songs.
The Arduino's tone() command will play notes of a given frequency.
We'll provide a function that takes in note characters (a-g),
and returns the corresponding frequency from this table:
note frequency
c 262 Hz
d 294 Hz
e 330 Hz
f 349 Hz
g 392 Hz
a 440 Hz
b 494 Hz
C 523 Hz
void setup()
{
pinMode(buzzerPin, OUTPUT);
}
void loop()
{
int i, duration;
int i;
const int numNotes = 8; // number of notes we're storing
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int frequencies[] = {262, 294, 330, 349, 392, 440, 494, 523};
-----------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
/* Play Melody
* -----------
*
* Program to play melodies stored in an array, it requires to know
* about timing issues and about how to play tones.
*
* The calculation of the tones is made following the mathematical
* operation:
*
* timeHigh = 1/(2 * toneFrequency) = period / 2
*
* where the different tones are described as in the table:
*
* note frequency period PW (timeHigh)
*c 261 Hz 3830 1915
*d 294 Hz 3400 1700
*e 329 Hz 3038 1519
*f 349 Hz 2864 1432
*g 392 Hz 2550 1275
*a 440 Hz 2272 1136
*b 493 Hz 2028 1014
*C 523 Hz 1912 956
*
* (cleft) 2005 D. Cuartielles for K3
*/
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
analogWrite(speakerOut, 0);
for (count = 0; count < MAX_COUNT; count++) {
statePin = !statePin;
digitalWrite(ledPin, statePin);
for (count3 = 0; count3 <= (melody[count*2] - 48) * 30; count3++) {
for (count2=0;count2<8;count2++) {
if (names[count2] == melody[count*2 + 1]) {
analogWrite(speakerOut,500);
delayMicroseconds(tones[count2]);
analogWrite(speakerOut, 0);
delayMicroseconds(tones[count2]);
}
if (melody[count*2 + 1] == 'p') {
// make a pause of a certain size
analogWrite(speakerOut, 0);
delayMicroseconds(500);
}
}
}
}
}
----------------------------------------------------------------------------------------------------------------
/*
Piezo
*/
void setup() {
// declare pin 9 to be an output:
pinMode(9, OUTPUT);
beep(50);
beep(50);
beep(50);
delay(1000);
}
void loop() {
beep(200);
}
------------------------------------------------------------------------------------------------------
int pinSpeaker = 9;
void setup () {
pinMode(pinSpeaker, OUTPUT);
}
void loop () {
playTone(750, 500);
delay(750);
}
------------------------------------------------------------------------------------------------------
Ambulans alarm
int speaker = 9;
#define wait 1
#define time 100
int freq = 0;
void setup()
{
Serial.begin(9600);
pinMode(speaker, OUTPUT);
}
void loop()
{
digitalWrite(speaker, HIGH);
for (freq = 500; freq < 3000; freq += 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 3000; freq > 500; freq -= 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 500;
freq < 3000;
freq += 10) //
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 3000;
freq > 500; freq -= 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 500;
freq < 3000;
freq += 10) //
{
tone(speaker,
freq, time);
delay(wait);
}
for (freq = 3000;
freq > 500;
freq -= 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 500; freq < 3000; freq += 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 3000;
freq > 500; freq -= 10)
{
tone(speaker, freq, time);
delay(wait);
}
-------------------------------------------------------------------------------------------------------
19. SETUP ULTRASONIC DISTANCE SENSOR
Sket 1
#define trigPin1 2
#define echoPin1 4
void setup()
{
Serial.begin (9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
}
void loop() {
SonarSensor(trigPin1, echoPin1);
UltraSensor = distance;
Serial.println(UltraSensor);
}
Sket 2
void setup() {
// initialize serial communication:
Serial.begin(9600);
}
void loop()
{
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration, inches, cm;
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
Sket 3
#include <NewPing.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define TRIGGER_PIN 2
#define ECHO_PIN 4
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters).
//Maximum sensor distance is rated at 400-500cm.
/*-----( Declare objects )-----*/
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and
maximum distance.
/*-----( Declare Variables )-----*/
int DistanceIn;
int DistanceCm;
void setup()
{
Serial.begin(9600);
Serial.println("UltraSonic Distance Measurement");
}
void loop()
{
delay(100);// Wait 100ms between pings (about 10 pings/sec). 29ms should be the shortest delay
between pings.
DistanceIn = sonar.ping_in();
Serial.print("Ping: ");
Serial.print(DistanceIn); // Convert ping time to distance and print result
// (0 = outside set distance range, no ping echo)
Serial.print(" in ");
delay(100);// Wait 100ms between pings (about 10 pings/sec). 29ms should be the shortest delay
between pings.
DistanceCm = sonar.ping_cm();
Serial.print("Ping: ");
Serial.print(DistanceCm);
Serial.println(" cm");
Sket 4
Sensor ultrasonic range juga dapat di pasang lebih dari satu, seperti sket di bawah.
int trigPin1 = 6;
int echoPin1 = 7;
int trigPin2 = 8;
int echoPin2 = 9;
void setup() {
Serial.begin (9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
}
void secondsensor(){ // This function is for second sensor.
int duration2, distance2;
digitalWrite (trigPin2, HIGH);
delayMicroseconds (10);
digitalWrite (trigPin2, LOW);
duration2 = pulseIn (echoPin2, HIGH);
distance2 = (duration2/2) / 29.1;
void loop() {
Serial.println("\n");
firstsensor();
secondsensor();
delay(100);
}
Sket 5
Multi sensor dengan ping library
void setup()
{
Serial.begin (9600);
}
void loop() {
delay(100);// Wait 100ms between pings (about 10 pings/sec). 29ms should be the shortest delay
between pings.
DistanceCmR = sonarR.ping_cm();
DistanceCmL = sonarL.ping_cm();
DistanceCmF = sonarF.ping_cm();
Serial.print("Ping: ");
Serial.print(DistanceCmR);
Serial.print(" ");
Serial.print(DistanceCmL);
Serial.print(" ");
Serial.println(DistanceCmF);
----------------------------------------------------------------------------------------------------------------
20. PEMBACA KODE REMOTE INFRA RED
#include <IRremote.h>
int RECV_PIN = 3;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
}
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.println(results.value, DEC);
irrecv.resume(); // Receive the next value
}
}
#include <IRLib.h>
//Create a receiver object to listen on pin 3
IRrecv My_Receiver(3);
//Create a decoder object
IRdecode My_Decoder;
void setup()
{
Serial.begin(9600);
My_Receiver.enableIRIn(); // Start the receiver
}
void loop() {
//Continuously look for results. When you have them pass them to the decoder
if (My_Receiver.GetResults(&My_Decoder)) {
My_Decoder.decode(); //Decode the data
My_Decoder.DumpResults(); //Show the results on serial monitor
My_Receiver.resume(); //Restart the receiver
}
}
---------------------------------------------------------------------------------------------------------
21. MENYALAKAN LAMPU DENGAN REMOTE IR UNSPECIFIC CODE
#include <IRremote.h>
int RECV_PIN = 5;
int OUTPUT_PIN = 9;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
pinMode(OUTPUT_PIN, OUTPUT);
pinMode(9, OUTPUT);
irrecv.enableIRIn(); // Start the receiver
}
int on = 0;
unsigned long last = millis();
void loop() {
if (irrecv.decode(&results)) {
// If it's been at least 1/4 second since the last
// IR received, toggle the relay
if (millis() - last > 250) {
on = !on;
digitalWrite(OUTPUT_PIN, on ? HIGH : LOW);
}
last = millis();
irrecv.resume(); // Receive the next value
}
}
atau kita dapat menyalakan dan mematikan satu lampu dengan tombol yang berbeda dengan sket
berikut,
#include <IRremote.h>
int RECV_PIN = 3;
int OUTPUT_PIN = 4;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
pinMode(OUTPUT_PIN, OUTPUT);
pinMode(13, OUTPUT);
irrecv.enableIRIn(); // Start the receiver
}
int on = 0;
unsigned long last = millis();
void loop() {
if (irrecv.decode(&results)) {
if (results.value == 0xEF1001FE) {
digitalWrite(OUTPUT_PIN, HIGH);
}
else if (results.value == 0xEF1055AA) {
digitalWrite(OUTPUT_PIN, LOW);
}
irrecv.resume(); // Receive the next value
}
}
atau kita menyalakan dan mematikan dengan tombol yang sama dengan sket berikut,
#include <IRremote.h>
int RECV_PIN = 3;
int OUTPUT_PIN = 4;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
pinMode(OUTPUT_PIN, OUTPUT);
pinMode(13, OUTPUT);
irrecv.enableIRIn(); // Start the receiver
}
int on = 0;
unsigned long last = millis();
void loop() {
if (irrecv.decode(&results)) {
Pada proyek ini memanfaatkan kode remote inframerah untuk mematikan dan menyalakan lampu
LED.
/*
source: www.electroschematics.com
You'll need to change the led pins and the codes
accordingly to your configuration and IR remote
552656927
552600317
552624287
*/
#include <IRremote.h>
int RECV_PIN = 3; // the pin where you connect the output pin of TSOP4838
int led1 = 2;
int led2 = 4;
int led3 = 7;
int itsONled[] = {0,0,0,0};
/* the initial state of LEDs is OFF (zero)
the first zero must remain zero but you can
change the others to 1's if you want a certain
led to light when the board is powered */
#define code1 552656927 // code received from button A
#define code2 552600317 // code received from button B
#define code3 552624287 // code received from button C
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600); // you can comment this line
irrecv.enableIRIn(); // Start the receiver
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
unsigned int value = results.value;
switch(value) {
case code1:
if(itsONled[1] == 1) { // if first led is on then
digitalWrite(led1, LOW); // turn it off when button is pressed
itsONled[1] = 0; // and set its state as off
} else { // else if first led is off
digitalWrite(led1, HIGH); // turn it on when the button is pressed
itsONled[1] = 1; // and set its state as on
}
break;
case code2:
if(itsONled[2] == 1) {
digitalWrite(led2, LOW);
itsONled[2] = 0;
} else {
digitalWrite(led2, HIGH);
itsONled[2] = 1;
}
break;
case code3:
if(itsONled[3] == 1) {
digitalWrite(led3, LOW);
itsONled[3] = 0;
} else {
digitalWrite(led3, HIGH);
itsONled[3] = 1;
}
break;
}
Serial.println(value); // you can comment this line
irrecv.resume(); // Receive the next value
}
}
Kita akam melihat bahwa 3 lampu LED dikendalikan dengan satu tombol pada remote, masing-
masing tombol ketika ditekan pertama maka LED akan menyala dan ketika tombol ditekan untuk
kedua kalinya maka LED akan padam.
Sket berikut adalah modifikasi dari sket di atas, satu kode akan mengontrol sebuah kejadian, kalau
pada sket sebelumnya satu kode digunakan untuk memicu dua kejadian yaitu nyala dan padam,
susunan komponen masih sama.
/*
source: www.electroschematics.com
You'll need to change the led pins and the codes
accordingly to your configuration and IR remote
552656927
552600317
552624287
*/
#include <IRremote.h>
int RECV_PIN = 3; // the pin where you connect the output pin of TSOP4838
int led1 = 2;
int led2 = 4;
int led3 = 7;
int itsONled[] = {0,0,0,0};
/* the initial state of LEDs is OFF (zero)
the first zero must remain zero but you can
change the others to 1's if you want a certain
led to light when the board is powered */
#define code1 552656927 // code received from button A
#define code2 552600317 // code received from button B
#define code3 552624287 // code received from button C
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600); // you can comment this line
irrecv.enableIRIn(); // Start the receiver
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
unsigned int value = results.value;
switch(value) {
case code1:
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW); // turn it off when button is pressed
break;
case code2:
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
break;
case code3:
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
break;
}
Serial.println(value); // you can comment this line
irrecv.resume(); // Receive the next value
}
}
--------------------------------------------------------------------------------------------------------------
22. PENGUKURAN SUHU DENGAN LM35
int val;
int tempPin = 1;
void setup()
{
temperature = (5.0 * reading * 100.0) / 1024;
}
void loop()
{
val = analogRead(tempPin);
float mv = ( val/1024.0)*5000;
float cel = mv/10;
float farh = (cel*9)/5 + 32;
Serial.print("TEMPRATURE = ");
Serial.print(cel);
Serial.print("*C");
Serial.println();
delay(1000);
---------------------------------------------------------------------------------------------------------
float temperature;
int reading;
int lm35Pin = 1;
void setup()
{
analogReference(INTERNAL);
Serial.begin(9600);
}
void loop()
{
reading = analogRead(lm35Pin);
temperature = reading / 9.31;
Serial.println(temperature);
delay(100);
}
---------------------------------------------------------------------------------------------------------------------
23. SETUP MICRO SD ARDUINO
Sket 1
Pada sket 1 ini kita membaca nilai analog dari 3 pin analog, hasil pembacaan ditampilkan pada
serial monitor dan disimpan ke SD card.
/*
SD card datalogger
This example shows how to log data from three analog sensors
to an SD card using the SD library.
The circuit:
* analog sensors on analog ins 0, 1, and 2
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4
*/
#include <SPI.h>
#include <SD.h>
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
void loop() {
// make a string for assembling the data to log:
String dataString = "";
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open("datalog.txt", FILE_WRITE);
// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
// print to the serial port too:
Serial.println(dataString);
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.txt");
}
delay(1000);
}
Sket 2
/*
SD card datalogger
This example shows how to log data from three analog sensors
to an SD card using the SD library.
The circuit:
* analog sensors on analog ins 0, 1, and 2
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4
*/
#include <SPI.h>
#include <SD.h>
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
void loop() {
// make a string for assembling the data to log:
String dataString0 = "";
String dataString1 = "";
String dataString2 = "";
dataString0 += String(sensorValue0);
dataString1 += String(sensorValue1);
dataString2 += String(sensorValue2);
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open("datalog.txt", FILE_WRITE);
Sket 3
Pada sket 3 ini kita menempatkan data pada file yang berbeda
/*
SD card datalogger
This example shows how to log data from three analog sensors
to an SD card using the SD library.
The circuit:
* analog sensors on analog ins 0, 1, and 2
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4
*/
#include <SPI.h>
#include <SD.h>
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
void loop() {
// make a string for assembling the data to log:
String dataString0 = "";
String dataString1 = "";
String dataString2 = "";
dataString0 += String(sensorValue0);
dataString1 += String(sensorValue1);
dataString2 += String(sensorValue2);
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile0 = SD.open("datalog0.txt", FILE_WRITE);
File dataFile1 = SD.open("datalog1.txt", FILE_WRITE);
File dataFile2 = SD.open("datalog2.txt", FILE_WRITE);
Pada sket 4 ini kita aplikasikan pada penyimpanan data waktu yang dihasilkan dari RTC.
/*
SD card datalogger
This example shows how to log data from three analog sensors
to an SD card using the SD library.
The circuit:
* analog sensors on analog ins 0, 1, and 2
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4
*/
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
void loop() {
DateTime now = RTC.now();
int LDR = 0;
// pin assignments
int LED = 13;
int LDR = 0;
// variables
int base;
int threshold = 100;
---------------------------------------------------------------------------------------------------------------
26.MENGUKUR TEGANGAN
/*--------------------------------------------------------------
Program: volt_measure
void setup()
{
Serial.begin(9600);
}
void loop()
{
// take a number of analog samples and add them up
while (sample_count < NUM_SAMPLES) {
sum += analogRead(A2);
sample_count++;
delay(10);
}
// calculate the voltage
// use 5.0 for a 5.0V ADC reference voltage
// 5.015V is the calibrated reference voltage
voltage = ((float)sum / (float)NUM_SAMPLES * 5.015) / 1024.0;
// send voltage for display on Serial Monitor
// voltage multiplied by 11 when using voltage divider that
// divides by 11. 11.132 is the calibrated voltage divide
// value
Serial.print(voltage * 11.132);
Serial.println (" V");
sample_count = 0;
sum = 0;
}
-----------------------------------------------------------------------------------------------------------------
27. SETUP LCD I2C
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
/*
For details about the LCD display with I2C support see
http://www.fasttech.com/reviews/1380909/22072
and
http://dx.com/p/funduino-iic-i2c-1602-lcd-adapter-board-w-2-5-lcd-screen-black-green-red-173588
The reviewer comments by docpayce and particularly JackWP associated with the two product
pages above have been very useful.
Connect the LCD: VCC -> 5V, GND -> GND, SDA -> A4 (PortC4, ADC4), SCL -> A5 (PortC5,
SDA)
void setup()
{
lcd.begin(16,2); // initialize the lcd
lcd.home (); // go home
lcd.print("Hello, ARDUINO ");
delay(100);
}
void loop()
{
int sensorValue = analogRead(SENSOR_PIN);
// set cursor to second row, first column
lcd.setCursor(0, 1);
lcd.print("PIN VALUE=");
lcd.setCursor(12, 1);
lcd.print(sensorValue);
lcd.print("");
delay (1000);
}
----------------------------------------------------------------------------------------------------------------------
28. LED ON ARDUINO
Setting up LED arduino adalah hal yang paling sederhana. Pada permulaan pengguna atau yang
baru belajar Arduino, pemasangan LED ini menjadi dasar sebelum memulai ke proyek-protek lain.
Sket 1:
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
Sket 2:
// coder elangsakti
// Pin 8 untuk LED
const int pinLED = 8;
void setup() {
// pin LED sebagai output
pinMode(pinLED, OUTPUT);
}
// awal time delay 1000 | 1 detik
int timeDelay = 1000;
void loop() {
/* Jika timeDelay bernilai lebih kecil sama dengan 0
maka LED akan diam selama 3 detik
lalu nilai timeDelay direset ke 1000
*/
if(timeDelay <= 100){
delay(3000);
timeDelay = 1000;
}else{
// nilai timeDelay dikurangi 100 jika time delay > 100
timeDelay = timeDelay - 100;
}
//Nyalakan dan matikan LED selama timeDelay
digitalWrite(pinLED, HIGH);
delay(timeDelay);
digitalWrite(pinLED, LOW);
delay(timeDelay);
}
--------------------------------------------------------------------------------------------------------------------
29. MULTI LED
Pada multi LED ini kita sajikan pemasangan LED dengan menggunakan 16 pin yaitu D2 hingga
D13, dan tambahan 4 pin analog yang kita fungsikan sebagai pin digital.
Sket 1
Sket 2
void setup() {
// pin LED sebagai output
pinMode(pinLED1, OUTPUT);
pinMode(pinLED2, OUTPUT);
pinMode(pinLED3, OUTPUT);
pinMode(pinLED4, OUTPUT);
pinMode(pinLED5, OUTPUT);
pinMode(pinLED6, OUTPUT);
pinMode(pinLED7, OUTPUT);
pinMode(pinLED8, OUTPUT);
pinMode(pinLED9, OUTPUT);
pinMode(pinLED10, OUTPUT);
pinMode(pinLED11, OUTPUT);
pinMode(pinLED12, OUTPUT);
pinMode(pinLED13, OUTPUT);
pinMode(pinLED14, OUTPUT);
pinMode(pinLED15, OUTPUT);
pinMode(pinLED16, OUTPUT);
}
void loop() {
for(int i=0; i<17; i++){
if(i==1){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
digitalWrite(pinLED12, LOW);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==2){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
digitalWrite(pinLED12, LOW);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==3){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
digitalWrite(pinLED12, LOW);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==4){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
digitalWrite(pinLED12, LOW);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==5){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
digitalWrite(pinLED12, LOW);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==6){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
digitalWrite(pinLED12, LOW);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==7){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
digitalWrite(pinLED12, LOW);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==8){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
digitalWrite(pinLED12, LOW);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==9){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
digitalWrite(pinLED12, LOW);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==10){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, LOW);
digitalWrite(pinLED12, LOW);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==11){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, HIGH);
digitalWrite(pinLED12, LOW);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==12){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, HIGH);
digitalWrite(pinLED12, HIGH);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==13){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, HIGH);
digitalWrite(pinLED12, HIGH);
digitalWrite(pinLED13, HIGH);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==14){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, HIGH);
digitalWrite(pinLED12, HIGH);
digitalWrite(pinLED13, HIGH);
digitalWrite(pinLED14, HIGH);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}else if(i==15){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, HIGH);
digitalWrite(pinLED12, HIGH);
digitalWrite(pinLED13, HIGH);
digitalWrite(pinLED14, HIGH);
digitalWrite(pinLED15, HIGH);
digitalWrite(pinLED16, LOW);
}else if(i==16){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, HIGH);
digitalWrite(pinLED12, HIGH);
digitalWrite(pinLED13, HIGH);
digitalWrite(pinLED14, HIGH);
digitalWrite(pinLED15, HIGH);
digitalWrite(pinLED16, HIGH);
}
else{
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
digitalWrite(pinLED12, LOW);
digitalWrite(pinLED13, LOW);
digitalWrite(pinLED14, LOW);
digitalWrite(pinLED15, LOW);
digitalWrite(pinLED16, LOW);
}
delay(100);
}
}
Sket 3
Sket 4
===============================================================
30. KAPASITIF SENSOR
#include <CapacitiveSensor.h>
/*
* CapitiveSense Library Demo Sketch
* Paul Badger 2008
* Uses a high value resistor e.g. 10M between send pin and receive pin
* Resistor effects sensitivity, experiment with values, 50K - 50M. Larger resistor values yield
larger sensor values.
* Receive pin is the sensor pin - try different amounts of foil/metal on this pin
*/
#include <Wire.h>
CapacitiveSensor cs_5_7 = CapacitiveSensor(5,7); // 10M resistor between pins 5 & 7, pin 7
is sensor pin, add a wire and or foil if desired
void setup()
{
cs_5_7.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as
an example
Serial.begin(9600);
}
void loop()
{
long start = millis();
long total1 = cs_5_7.capacitiveSensor(30);
Serial.print(total1); // print sensor output 1
Serial.println("\t");
delay(100); // arbitrary delay to limit data to serial port
}
========================================================
31. LED PETERN dengan Shift Register IC 74HC595
Kita dapat menjalankan banyal LED dengan bantuan C 74HC595 dengan hanya memanfaatkan 3
pin dari Arduino. Pada dasarnya satu IC ini dapat menjalankan 8 LED. Dengan menggabungkan
beberapa IC maka kita dapat menjalankan LED kelipatan delapan. Pada gambar di bawah
ditampilkan dengan satu dan dua IC 595, kita bisa ekspansi dengan menambahkan IC 595 dengan
menghubungkan secara paralel semua pin ST_CP dan SH_CP, sedangkan pin DS terhubung dengan
pin nomer 9 pada IC 595 pendahulunya.
1x IC74HC595 (atas), 2x IC74HC595 (bawah)
PETERN-1 (1x IC74HC595)
/*
Adafruit Arduino - Lesson 4. 8 LEDs and a Shift Register
*/
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;
byte leds = 0;
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop()
{
leds = 0;
updateShiftRegister();
delay(100);
for (int i = 0; i < 8; i++)
{
bitSet(leds, i);
updateShiftRegister();
delay(100);
}
}
void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}
//**************************************************************//
// Name : shiftOutCode, Dual One By One //
// Author : Carlyn Maw, Tom Igoe //
// Date : 25 Oct, 2006 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255 //
//**************************************************************//
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
void loop() {
}
}
//stop shifting
digitalWrite(myClockPin, 0);
}
//**************************************************************//
// Name : shiftOutCode, Predefined Dual Array Style //
// Author : Carlyn Maw, Tom Igoe //
// Date : 25 Oct, 2006 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255 //
//****************************************************************
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
Serial.begin(9600);
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
dataArrayRED[0] = 0xFF; //11111111
dataArrayRED[1] = 0xFE; //11111110
dataArrayRED[2] = 0xFC; //11111100
dataArrayRED[3] = 0xF8; //11111000
dataArrayRED[4] = 0xF0; //11110000
dataArrayRED[5] = 0xE0; //11100000
dataArrayRED[6] = 0xC0; //11000000
dataArrayRED[7] = 0x80; //10000000
dataArrayRED[8] = 0x00; //00000000
dataArrayRED[9] = 0xE0; //11100000
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
dataArrayGREEN[0] = 0xFF; //11111111
dataArrayGREEN[1] = 0x7F; //01111111
dataArrayGREEN[2] = 0x3F; //00111111
dataArrayGREEN[3] = 0x1F; //00011111
dataArrayGREEN[4] = 0x0F; //00001111
dataArrayGREEN[5] = 0x07; //00000111
dataArrayGREEN[6] = 0x03; //00000011
dataArrayGREEN[7] = 0x01; //00000001
dataArrayGREEN[8] = 0x00; //00000000
dataArrayGREEN[9] = 0x07; //00000111
void loop() {
//stop shifting
digitalWrite(myClockPin, 0);
}
//blinks the whole register based on the number of times you want to
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
for (int x = 0; x < n; x++) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
digitalWrite(latchPin, 1);
delay(d);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(d);
}
}
//**************************************************************//
// Name : shiftOutCode, Hello World
// Author : Carlyn Maw,Tom Igoe, David A. Mellis
// Date : 25 Oct, 2006
// Modified: 23 Mar 2010
// Version : 2.0
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255
//****************************************************************
void setup() {
//set pins to output so you can control the shift register
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
// count from 0 to 255 and display the number
// on the LEDs
for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
// take the latchPin low so
// the LEDs don't change while you're sending in bits:
digitalWrite(latchPin, LOW);
// shift out the bits:
shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);
//take the latch pin high so the LEDs will light up:
digitalWrite(latchPin, HIGH);
// pause before next value:
delay(500);
}
}
PETERN-5 (1x IC74HC595)
/*
Shift Register Example
Turning on the outputs of a 74HC595 using an array
Hardware:
* 74HC595 shift register
* LEDs attached to each of the outputs of the shift register
*/
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
Serial.begin(9600);
void loop() {
//blinks the whole register based on the number of times you want to
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
for (int x = 0; x < n; x++) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
digitalWrite(latchPin, 1);
delay(d);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(d);
}
}
byte patterns[30] = {
B00000001, 100,
B00000010, 100,
B00000100, 100,
B00001000, 100,
B00010000, 100,
B00100000, 100,
B01000000, 100,
B10000000, 100,
B01000000, 100,
B00100000, 100,
B00010000, 100,
B00001000, 100,
B00000100, 100,
B00000010, 100
};
int index = 0;
int count = sizeof(patterns) / 2;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, patterns[index * 2]);
digitalWrite(latchPin, HIGH);
delay(patterns[(index * 2) + 1]);
index++;
if (index >= count){
index = 0;
}
}
byte patterns[30] = {
B00000001, 500,
B00000010, 500,
B00000100, 500,
B00001000, 500,
B00010000, 500,
B00100000, 500,
B01000000, 500,
B10000000, 500,
B00000001, 250
};
int index = 0;
int count = sizeof(patterns) / 2;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, patterns[index * 2]);
digitalWrite(latchPin, HIGH);
delay(patterns[(index * 2) + 1]);
index++;
if (index >= count){
index = 0;
}
}
//**************************************************************//
// Name : shiftOutCode, Dual One By One //
// Author : Carlyn Maw, Tom Igoe //
// Date : 25 Oct, 2006 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255 //
//**************************************************************//
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
void loop() {
//**************************************************************//
// Name : shiftOutCode, Predefined Dual Array Style //
// Author : Carlyn Maw, Tom Igoe //
// Date : 25 Oct, 2006 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255 //
//****************************************************************
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
Serial.begin(9600);
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
dataArrayRED[0] = 0xFF; //11111111
dataArrayRED[1] = 0xFE; //11111110
dataArrayRED[2] = 0xFC; //11111100
dataArrayRED[3] = 0xF8; //11111000
dataArrayRED[4] = 0xF0; //11110000
dataArrayRED[5] = 0xE0; //11100000
dataArrayRED[6] = 0xC0; //11000000
dataArrayRED[7] = 0x80; //10000000
dataArrayRED[8] = 0x00; //00000000
dataArrayRED[9] = 0xE0; //11100000
dataArrayRED[10] = 0xAA; //10101010
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
dataArrayGREEN[0] = 0xFF; //11111111
dataArrayGREEN[1] = 0x7F; //01111111
dataArrayGREEN[2] = 0x3F; //00111111
dataArrayGREEN[3] = 0x1F; //00011111
dataArrayGREEN[4] = 0x0F; //00001111
dataArrayGREEN[5] = 0x07; //00000111
dataArrayGREEN[6] = 0x03; //00000011
dataArrayGREEN[7] = 0x01; //00000001
dataArrayGREEN[8] = 0x00; //00000000
dataArrayGREEN[9] = 0x07; //00000111
dataArrayGREEN[10] = 0x55; //01010101
void loop() {
//blinks the whole register based on the number of times you want to
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
for (int x = 0; x < n; x++) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
digitalWrite(latchPin, 1);
delay(d);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(d);
}
}
byte patterns[30] = {
B00000001, 25,
B00000010, 25,
B00000100, 25,
B00001000, 25,
B00010000, 25,
B00100000, 25,
B01000000, 25,
B10000000, 25,
B00000001, 12.5
};
int index = 0;
int count = sizeof(patterns) / 2;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, patterns[index * 2]);
digitalWrite(latchPin, HIGH);
delay(patterns[(index * 2) + 1]);
index++;
if (index >= count){
index = 0;
}
}
//**************************************************************//
// Name : shiftOutCode, Predefined Dual Array Style //
// Author : Carlyn Maw, Tom Igoe //
// Date : 25 Oct, 2006 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255 //
//****************************************************************
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
Serial.begin(9600);
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
void loop() {
//blinks the whole register based on the number of times you want to
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
for (int x = 0; x < n; x++) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
digitalWrite(latchPin, 1);
delay(d);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(d);
}
}
//**************************************************************//
// Name : shiftOutCode, Predefined Dual Array Style //
// Author : Carlyn Maw, Tom Igoe //
// Date : 25 Oct, 2006 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255 //
//****************************************************************
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
Serial.begin(9600);
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
void loop() {
//stop shifting
digitalWrite(myClockPin, 0);
}
//blinks the whole register based on the number of times you want to
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
for (int x = 0; x < n; x++) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
digitalWrite(latchPin, 1);
delay(d);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(d);
}
}
//**************************************************************//
// Name : shiftOutCode, Predefined Dual Array Style //
// Author : Carlyn Maw, Tom Igoe //
// Date : 25 Oct, 2006 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255 //
//****************************************************************
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
Serial.begin(9600);
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
//stop shifting
digitalWrite(myClockPin, 0);
}
//blinks the whole register based on the number of times you want to
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
for (int x = 0; x < n; x++) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
digitalWrite(latchPin, 1);
delay(d);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(d);
}
}
byte dataRED;
byte dataGREEN;
byte dataArrayRED[61];
byte dataArrayGREEN[61];
void setup() {
pinMode(latchPin, OUTPUT);
Serial.begin(9600);
blinkAll_2Bytes(2,300);
}
void loop() {
dataRED = dataArrayRED[j];
dataGREEN = dataArrayGREEN[j];
digitalWrite(latchPin, 1);
shiftOut(dataPin, clockPin, dataGREEN);
shiftOut(dataPin, clockPin, dataRED);
digitalWrite(latchPin, 0);
delay(300);
}
}
int i=0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);
digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);
//stop shifting
digitalWrite(myClockPin, 0);
}
byte patterns[30] = {
B00000001, 50,
B00000010, 50,
B00000100, 50,
B00001000, 50,
B00010000, 50,
B00100000, 50,
B01000000, 50,
B10000000, 50,
B01000000, 50,
B00100000, 50,
B00010000, 50,
B00001000, 50,
B00000100, 50,
B00000010, 50,
B00000001, 50
};
int index = 0;
int count = sizeof(patterns) / 2;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, patterns[index * 2]);
digitalWrite(latchPin, HIGH);
delay(patterns[(index * 2) + 1]);
index++;
if (index >= count){
index = 0;
}
}
====================================================================
32. LED MATRIX MAPPING
Kita demonstrasikan bagaimana menyalakan LED matrix satu atau beberapa titik, kita gunakan satu
LED matrix saja.
/*
Now we need a LedControl to work with.
***** These pin numbers will probably not work with your hardware *****
pin 12 is connected to the DataIn
pin 10 is connected to the CLK
pin 11 is connected to LOAD
We have only a single MAX72XX.
*/
#define NBR_MTX 1 //jumlah module LED matrix yang kita gunakan
LedControl lc=LedControl(12,11,10, NBR_MTX);
//String digits= "1234567890";
int digitCounter=0;
/* we always wait a bit between updates of the display */
unsigned long delaytime=300;
void setup() {
/*
The MAX72XX is in power-saving mode on startup,
we have to do a wakeup call
*/
Serial.begin (9600);
Serial.println("Setup");
digitCounter=0;
for (int i=0; i< NBR_MTX; i++){
lc.shutdown(i,false);
/* Set the brightness to a medium values */
lc.setIntensity(i,8);
/* and clear the display */
lc.clearDisplay(i);
void loop() {
Serial.println("LED0: 0 0");
lc.setLed(0,2,3,true); // (0,0,7) = (nomor LED matrix terpakai-mulai dari nol, ROW, Column)
lc.setLed(0,5,2,true);
lc.setLed(0,1,6,true);
unsigned char i;
unsigned char j;
/*Port Definitions*/
int Max7219_pinCLK = 10;
int Max7219_pinCS = 11;
int Max7219_pinDIN = 12;
void Init_MAX7219(void)
{
Write_Max7219(0x09, 0x00); //decoding :BCD
Write_Max7219(0x0a, 0x03); //brightness
Write_Max7219(0x0b, 0x07); //scanlimit;8 LEDs
Write_Max7219(0x0c, 0x01); //power-down mode:0,normal mode:1
Write_Max7219(0x0f, 0x00); //test display:1;EOT,display:0
}
void setup()
{
pinMode(Max7219_pinCLK,OUTPUT);
pinMode(Max7219_pinCS,OUTPUT);
pinMode(Max7219_pinDIN,OUTPUT);
delay(50);
Init_MAX7219();
}
void loop()
{
for(j=0;j<38;j++)
{
for(i=1;i<9;i++)
Write_Max7219(i,disp1[j][i-1]);
delay(500);
}
}
#include "LedControlMS.h"
//pin 12 is connected to the DataIn
// pin 10 is connected to the CLK
//pin 11 is connected to LOAD
void setup()
{
for (int i=0; i< NBR_MTX; i++)
{
lc.shutdown(i,false);
/* Set the brightness to a medium values */
lc.setIntensity(i,8);
/* and clear the display */
lc.clearDisplay(i);
delay(100);
}
}
void loop()
{
lc.writeString(0,"CIRCUITDIGEST");//sending characters to display
lc.clearAll();//clearing the display
delay(1000);
}
/*
* Arduino Sweet Heart
* An Arduino & 8x8 LED dot matrix project
* Using Max7219 IC
* Designed by T.K.Hareendran
* Tested at TechNode Protolabz
* 17 July 2014
* http://www.electroschematics.com
*/
unsigned char i;
unsigned char j;
int Max7219_pinCLK = 10;
int Max7219_pinCS = 11;
int Max7219_pinDIN = 12;
};
void Init_MAX7219(void)
{
Write_Max7219(0x09, 0x00);
Write_Max7219(0x0a, 0x03);
Write_Max7219(0x0b, 0x07);
Write_Max7219(0x0c, 0x01);
Write_Max7219(0x0f, 0x00);
}
void setup()
{
pinMode(Max7219_pinCLK,OUTPUT);
pinMode(Max7219_pinCS,OUTPUT);
pinMode(Max7219_pinDIN,OUTPUT);
delay(50);
Init_MAX7219();
}
void loop()
{
for(j=0;j<19;j++)
{
for(i=1;i<9;i++)
Write_Max7219(i,disp1[j][i-1]);
delay(500);
}
}
#define Rb5 11 // CS
#define Rb6 12 // DATA
#define Rb7 10 // CLK
void setup() {
pinMode(Rb5, OUTPUT);
pinMode(Rb6, OUTPUT);
pinMode(Rb7, OUTPUT);
digitalWrite(Rb5, LOW);
}
void loop() {
delay(1000);
init_MAX7219();
int k = 0;
while(1) {
for (int j=1; j<9; j++) {
writeMAX7219(j+k, array1[j]);
}
delay(50);
k++;
if (k > 8) k = 0;
}
}
void pulseCS(void) {
digitalWrite(Rb5, 1);
delay(1);
digitalWrite(Rb5, 0);
}
void init_MAX7219(void) {
digitalWrite(Rb5, 0); // CS NOT
// set intensity
ssrOut(0x0A);
ssrOut(0x08); // 0 - F
pulseCS();
#include "LedControl.h"
byte invader1b[] =
{
B00011000, // Second frame of invader #1
B00111100,
B01111110,
B11011011,
B11111111,
B00100100,
B01011010,
B01000010
};
byte invader2a[] =
{
B00100100, // First frame of invader #2
B00100100,
B01111110,
B11011011,
B11111111,
B11111111,
B10100101,
B00100100
};
byte invader2b[] =
{
B00100100, // Second frame of invader #2
B10100101,
B11111111,
B11011011,
B11111111,
B01111110,
B00100100,
B01000010
};
void setup()
{
lc.shutdown(0,false); // Wake up displays
lc.shutdown(1,false);
lc.setIntensity(0,5); // Set intensity levels
lc.setIntensity(1,5);
lc.clearDisplay(0); // Clear Displays
lc.clearDisplay(1);
}
void sinvader1b()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,invader1b[i]);
}
}
void sinvader2a()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,invader2a[i]);
}
}
void sinvader2b()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,invader2b[i]);
}
}
void loop()
{
// Put #1 frame on both Display
sinvader1a();
delay(delayTime);
sinvader2a();
delay(delayTime);
#include "LedControl.h"
byte invader2a[] =
{
B00100100, // First frame of invader #2
B00100100,
B01111110,
B11011011,
B11111111,
B11111111,
B10100101,
B00100100
};
byte invader2b[] =
{
B00100100, // Second frame of invader #2
B10100101,
B11111111,
B11011011,
B11111111,
B01111110,
B00100100,
B01000010
};
void setup()
{
lc.shutdown(0,false); // Wake up displays
lc.shutdown(1,false);
lc.setIntensity(0,1); // Set intensity levels
lc.setIntensity(1,1);
lc.clearDisplay(0); // Clear Displays
lc.clearDisplay(1);
}
void sone1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,one[i]);
}
}
void stwo1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,two[i]);
}
}
void sthree1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,three[i]);
}
}
void sfour1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,four[i]);
}
}
void sfive1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,five[i]);
}
}
void ssix1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,six[i]);
}
}
void sseven1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,seven[i]);
}
}
void seight1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,eight[i]);
}
}
void snine1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,nine[i]);
}
}
void szero1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,zero[i]);
}
}
void sinvader1a()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,invader1a[i]);
}
}
void sinvader1b()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,invader1b[i]);
}
}
void sinvader2a()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,invader2a[i]);
}
}
void sinvader2b()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,invader2b[i]);
}
}
void loop()
{
// Put #1 frame on both Display
lc.clearDisplay(0);
lc.clearDisplay(1);
szero1();
sone();
delay(delayTime);
lc.clearDisplay(0);
lc.clearDisplay(1);
stwo();
sone1();
delay(delayTime);
lc.clearDisplay(0);
lc.clearDisplay(1);
sthree();
stwo1();
delay(delayTime);
lc.clearDisplay(0);
lc.clearDisplay(1);
sfour();
sthree1();
delay(delayTime);
lc.clearDisplay(0);
lc.clearDisplay(1);
sfive();
sfour1();
delay(delayTime);
lc.clearDisplay(0);
lc.clearDisplay(1);
ssix();
sfive1();
delay(delayTime);
lc.clearDisplay(0);
lc.clearDisplay(1);
sseven();
ssix1();
delay(delayTime);
lc.clearDisplay(0);
lc.clearDisplay(1);
seight();
sseven1();
delay(delayTime);
lc.clearDisplay(0);
lc.clearDisplay(1);
snine();
seight1();
delay(delayTime);
lc.clearDisplay(0);
lc.clearDisplay(1);
szero();
sone1();
delay(delayTime);
==================================================================
34. JAM-SUHU-KELEMBABAN-LED MATRIX
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
#include <MaxMatrix.h> //include matrix library
#include <avr/pgmspace.h>
#include <stdlib.h>
#include "DHT.h" //include the temp sensor library
#define DHTPIN 7 // what pin we're connected to
#define DHTTYPE DHT11 // DHT 11 temp&humid sensor
DHT dht(DHTPIN, DHTTYPE);
const PROGMEM prog_uchar CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B00100100, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};
void loop(){
float t = dht.readTemperature();
float h = dht.readHumidity();
char temp[4];
char hum[4];
itoa(t,temp,10); //convert int to char!!!!
itoa(h,hum,10); //convert int to char!!!!
DateTime now = RTC.now();
int mt = (now.month());
int dy = (now.day());
int y = (now.year());
int jm = (now.hour());
int men = (now.minute());
int dt = (now.second());
char tahun[5];
char bulan[4];
char tanggal[4];
char jam[4];
char menit[4];
char detik[4];
if(now.dayOfWeek()==1){
printStringWithShift("MONDAY", 50);
}
if(now.dayOfWeek()==2){
printStringWithShift("TUESDAY", 50);
}
if(now.dayOfWeek()==3){
printStringWithShift("WEDNESDAY", 50);
}
if(now.dayOfWeek()==4){
printStringWithShift("THURSDAY", 50);
}
if(now.dayOfWeek()==5){
printStringWithShift("FRIDAY", 50);
}
if(now.dayOfWeek()==6){
printStringWithShift("SATURDAY", 50);
}
if(now.dayOfWeek()==0){
printStringWithShift("SUNDAY", 50);
}
printStringWithShift(" ", 50);
printStringWithShift(tanggal, 50);
printStringWithShift("/", 50);
printStringWithShift(bulan, 50);
printStringWithShift("/", 50);
printStringWithShift(tahun, 50);
printStringWithShift(" ", 50);
printStringWithShift(jam, 50);
printStringWithShift(":", 50);
printStringWithShift(menit, 50);
printStringWithShift(":", 50);
printStringWithShift(detik, 50);
printStringWithShift(" ", 50);
printStringWithShift("temp: ", 50);
printStringWithShift(temp, 50);
printStringWithShift(" C ", 50);
printStringWithShift("humidity: ", 50);
printStringWithShift(hum, 50);
printStringWithShift(" % ", 50);
printStringWithShift(" ", 50);
m.shiftLeft(false, true);
}
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
============================================================
35. LED MATRIX MAX7219
/*
################################################################################
# File Name: MAX7219_5.ino
# Board: Arduino UNO
# Programming Language: Wiring / C /Processing /Fritzing / Arduino IDE
#
# Objective: Scrolling LED dot Matrix
#
# Operation: Scrolls a message over a 16x8 LED dot matrix
#
# Author: Marcelo Moraes
# Date: July 9th, 2013
# Place: Sorocaba - SP - Brazil
#
################################################################################
//******************************************************************************
// visit this web page for further information about MaxMatrix library
// https://code.google.com/p/arudino-maxmatrix-library/
//******************************************************************************
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
int maxInUse = 5; //change this variable to set how many MAX7219's you'll use
byte buffer[10];
// active sentenses
char string1[] = " Hello, my name is Marcelo Moraes and... ";
char string2[] = " I am glad to show you my Arduino scrolling dot Matrix ";
char string3[] = " using MAX7219 IC ";
char string4[] = " Visit my blog at: http://arduinobymyself.blogspot.com.br ";
char string5[] = " There you will find a lot of projects with Arduino. ";
char string6[] = " Thanks for watching =) ";
void setup(){
m.init(); // module initialize
m.setIntensity(0); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
}
void loop(){
byte c;
// this is the code if you want to entering a message via serial console
while (Serial.available() > 0){
byte c = Serial.read();
Serial.println(c, DEC);
printCharWithShift(c, 100);
}
delay(100);
m.shiftLeft(false, true);
printStringWithShift(string1, 100);
printStringWithShift(string2, 100);
printStringWithShift(string3, 100);
printStringWithShift(string4, 100);
printStringWithShift(string5, 100);
printStringWithShift(string6, 100);
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
36. LED MATRIX MAX7219 tanpa shifting
Pada seksi ini kita tunjukkan bagaimana menuliskan karakter pada LED matrix tanpa shifting. Sket
dan wiring masih sama dengan sebelumnya, hanya ada perbedaan pada bagian loop.
/*
################################################################################
# File Name: MAX7219_5.ino
# Board: Arduino UNO
# Programming Language: Wiring / C /Processing /Fritzing / Arduino IDE
#
# Objective: Scrolling LED dot Matrix
#
# Operation: Scrolls a message over a 16x8 LED dot matrix
#
# Author: Marcelo Moraes
# Date: July 9th, 2013
# Place: Sorocaba - SP - Brazil
#
################################################################################
//******************************************************************************
// visit this web page for further information about MaxMatrix library
// https://code.google.com/p/arudino-maxmatrix-library/
//******************************************************************************
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
int maxInUse = 5; //change this variable to set how many MAX7219's you'll use
byte buffer[10];
// active sentenses
char string1[] = " Hello, my name is Marcelo Moraes and... ";
char string2[] = " I am glad to show you my Arduino scrolling dot Matrix ";
char string3[] = " using MAX7219 IC ";
char string4[] = " Visit my blog at: http://arduinobymyself.blogspot.com.br ";
char string5[] = " There you will find a lot of projects with Arduino. ";
char string6[] = " Thanks for watching =) ";
void setup(){
m.init(); // module initialize
m.setIntensity(0); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
}
void loop(){
byte c;
// this is the code if you want to entering a message via serial console
while (Serial.available() > 0){
byte c = Serial.read();
Serial.println(c, DEC);
printCharWithShift(c, 100);
}
//delay(100);
//m.shiftLeft(false, true);
}
void printCharWithShift(char c, int shift_speed){
if (c < 32) return;
c -= 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(maxInUse*8, 0, buffer);
m.setColumn(maxInUse*8 + buffer[0], 0);
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
37. LED MATRIX MAX7219 dengan shifting
/*
################################################################################
# File Name: MAX7219_5.ino
# Board: Arduino UNO
# Programming Language: Wiring / C /Processing /Fritzing / Arduino IDE
#
# Objective: Scrolling LED dot Matrix
#
# Operation: Scrolls a message over a 16x8 LED dot matrix
#
# Author: Marcelo Moraes
# Date: July 9th, 2013
# Place: Sorocaba - SP - Brazil
#
################################################################################
//******************************************************************************
// visit this web page for further information about MaxMatrix library
// https://code.google.com/p/arudino-maxmatrix-library/
//******************************************************************************
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
int maxInUse = 5; //change this variable to set how many MAX7219's you'll use
byte buffer[10];
// active sentenses
char string1[] = " Hello, my name is Marcelo Moraes and... ";
char string2[] = " I am glad to show you my Arduino scrolling dot Matrix ";
char string3[] = " using MAX7219 IC ";
char string4[] = " Visit my blog at: http://arduinobymyself.blogspot.com.br ";
char string5[] = " There you will find a lot of projects with Arduino. ";
char string6[] = " Thanks for watching =) ";
void setup(){
m.init(); // module initialize
m.setIntensity(0); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
}
void loop(){
byte c;
// this is the code if you want to entering a message via serial console
while (Serial.available() > 0){
byte c = Serial.read();
Serial.println(c, DEC);
printCharWithShift(c, 100);
}
//delay(100);
//m.shiftLeft(false, true);
printStringWithShift(string7, 100);
printStringWithShift(string8, 100);
printStringWithShift(string9, 100);
printStringWithShift(string10, 100);
printStringWithShift(string11, 100);
printStringWithShift(string12, 100);
/*
printString(string13);
printString(string14);
*/
}
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
/*
################################################################################
# File Name: MAX7219_5.ino
# Board: Arduino UNO
# Programming Language: Wiring / C /Processing /Fritzing / Arduino IDE
#
# Objective: Scrolling LED dot Matrix
#
# Operation: Scrolls a message over a 16x8 LED dot matrix
#
# Author: Marcelo Moraes
# Date: July 9th, 2013
# Place: Sorocaba - SP - Brazil
#
################################################################################
This code is a public example.
*/
//******************************************************************************
// visit this web page for further information about MaxMatrix library
// https://code.google.com/p/arudino-maxmatrix-library/
//******************************************************************************
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
int maxInUse = 5; //change this variable to set how many MAX7219's you'll use
byte buffer[10];
// active sentenses
char string1[] = " Hello, my name is Marcelo Moraes and... ";
char string2[] = " I am glad to show you my Arduino scrolling dot Matrix ";
char string3[] = " using MAX7219 IC ";
char string4[] = " Visit my blog at: http://arduinobymyself.blogspot.com.br ";
char string5[] = " There you will find a lot of projects with Arduino. ";
char string6[] = " Thanks for watching =) ";
void setup(){
m.init(); // module initialize
m.setIntensity(0); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
}
void loop(){
byte c;
// this is the code if you want to entering a message via serial console
while (Serial.available() > 0){
byte c = Serial.read();
Serial.println(c, DEC);
printCharWithShift(c, 100);
}
//delay(100);
//m.shiftLeft(false, true);
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
38. LED MATRIX MAX7219 (menghitung detik)
/*
################################################################################
# File Name: MAX7219_5.ino
# Board: Arduino UNO
# Programming Language: Wiring / C /Processing /Fritzing / Arduino IDE
#
# Objective: Scrolling LED dot Matrix
#
# Operation: Scrolls a message over a 16x8 LED dot matrix
#
# Author: Marcelo Moraes
# Date: July 9th, 2013
# Place: Sorocaba - SP - Brazil
#
################################################################################
//******************************************************************************
// visit this web page for further information about MaxMatrix library
// https://code.google.com/p/arudino-maxmatrix-library/
//******************************************************************************
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
int maxInUse = 5; //change this variable to set how many MAX7219's you'll use
byte buffer[10];
// active sentenses
char string1[] = " Hello, my name is Marcelo Moraes and... ";
char string2[] = " I am glad to show you my Arduino scrolling dot Matrix ";
char string3[] = " using MAX7219 IC ";
char string4[] = " Visit my blog at: http://arduinobymyself.blogspot.com.br ";
char string5[] = " There you will find a lot of projects with Arduino. ";
char string6[] = " Thanks for watching =) ";
void setup(){
m.init(); // module initialize
m.setIntensity(0); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
}
void loop(){
byte c;
// this is the code if you want to entering a message via serial console
while (Serial.available() > 0){
byte c = Serial.read();
Serial.println(c, DEC);
printCharWithShift(c, 100);
}
//delay(100);
//m.shiftLeft(false, true);
PWM artinya Pulse Width Modulation, yaitu pin yang output-nya dapat diatur tegangannya. Pada
arduino uno atau nano ada pin yang dapat digunakan menjadi PWM pin yaitu pin 3, 5, 6, 9, 10, 11.
void setup()
{
pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop()
{
Pin arduino selain yang bertanda PWM dapat juga difungsikan menjadi PWM dengan bantuan
softPWM library.
#include <SoftPWM.h>
void setup()
{
SoftPWMBegin();
SoftPWMSet(7, 0);
void loop()
{
SoftPWMSet(7, 255);
delay(1000);
SoftPWMSet(7, 0);
delay(1000);
}
============================================================
41. KONTROL SERVO MOTOR DENGAN POTENSIOMETER
#include <Servo.h>
Servo head;
int sensorPin = A2;
int sensorValue = 0;
int sudut = 0;
void setup()
{
head.attach(9);
head.write(80);
pinMode(sensorPin,INPUT);
Serial.begin(9600);
}
void loop(){
float sensorValue = analogRead(sensorPin);
int sudut = (sensorValue/1023)*180;
Serial.println(sudut);
//delay(100);
head.write(sudut);
}
================================================================
42. DC FAN SPEED CONTROL
Pada proyek ini kita sajikan cara pengontrolan laju motor DC. Bagian penting dari rangkaian ini
adalah transistor mosfet, di mana pin GATE kita kendalikan dengan signal dari pin PWM arduino.
Transistor ini mampu bekerja hingga tegangan 60V DC.
void setup(){
Serial.begin(9600);
pinMode(fadePin, OUTPUT);
pinMode(pot, INPUT);
}
void loop(){
//calculate sin of angle as number between 0 and 255
float t2= analogRead(pot);
int sinOut = t2*255/1023;
Serial.println(sinOut);
analogWrite(fadePin, sinOut);
}
=====================================================================
43. MENGUKUR KUAT ARUS
Pada sesi ini didemonstrasikan pengukuran kuat arus dari sumber arus bolak-balik. Pengukuran arus
dengan modul ACS712. Arus yang dapat diukur pada kisaran hingga 30A.
#include <Filters.h>
void setup() {
Serial.begin( 9600 ); // start the serial port
}
void loop() {
RunningStatistics inputStats; // create statistics to look at the raw test signal
inputStats.setWindowSecs( windowLength );
while( true ) {
sensorValue = analogRead(A0); // read the analog in value:
inputStats.input(sensorValue); // log to Stats function
if((unsigned long)(millis() - previousMillis) >= printPeriod) {
previousMillis = millis(); // update time
}
}
}
================================================================
44. PUSH BUTTON
/*
Button
The circuit:
* LED attached from pin 8 to ground
* pushbutton attached to pin 7 from +5V
* 10M resistor attached to pin 7 from ground
created 2005
by DojoDave <http://www.0j0.org>
modified 30 Aug 2011
by Tom Igoe
http://www.arduino.cc/en/Tutorial/Button
*/
void loop(){
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
===============================================================
45. COUNTER
/*
State change detection (edge detection)
Often, you don't need to know the state of a digital input all the time,
but you just need to know when the input changes from one state to another.
For example, you want to know when a button goes from OFF to ON. This is called
state change detection, or edge detection.
This example shows how to detect when a button or button changes from off to on
and on to off.
The circuit:
* pushbutton attached to pin 7 from +5V
* 10M resistor attached to pin 7 from ground
* LED attached from pin 8 to ground (or use the built-in LED on
most Arduino boards)
http://www.arduino.cc/en/Tutorial/ButtonStateChange
*/
void setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
// initialize the LED as an output:
pinMode(ledPin, OUTPUT);
// initialize serial communication:
Serial.begin(9600);
}
void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);
}
46. COUNTER DENGAN LED MATRIX DISPLAY
byte one[] =
{
B00000000, // First frame of invader #1
B00000000,
B10000010,
B11111111,
B10000000,
B00000000,
B00000000,
B00000000
};
byte two[] =
{
B00000000, // First frame of invader #1
B00000000,
B11000010,
B10100001,
B10010001,
B10001001,
B10000110,
B00000000
};
byte three[] =
{
B00000000, // First frame of invader #1
B01000010,
B10000001,
B10001001,
B10001001,
B01110110,
B00000000,
B00000000
};
byte four[] =
{
B00000000, // First frame of invader #1
B00110000,
B00101000,
B00100100,
B00100010,
B11110001,
B00100000,
B00000000
};
byte five[] =
{
B00000000, // First frame of invader #1
B00000000,
B01001111,
B10001001,
B10001001,
B10001001,
B01110001,
B00000000
};
byte six[] =
{
B00000000, // First frame of invader #1
B00000000,
B01111110,
B10001001,
B10001001,
B10001001,
B01110010,
B00000000
};
byte seven[] =
{
B00000000, // First frame of invader #1
B00000000,
B10000001,
B01000001,
B00100001,
B00010001,
B00001111,
B00000000
};
byte eight[] =
{
B00000000, // First frame of invader #1
B00000000,
B01110110,
B10001001,
B10001001,
B10001001,
B01110110,
B00000000
};
byte nine[] =
{
B00000000, // First frame of invader #1
B00000000,
B01000110,
B10001001,
B10001001,
B10001001,
B01111110,
B00000000
};
byte zero[] =
{
B00000000, // First frame of invader #1
B00000000,
B01111110,
B10000001,
B10000001,
B10000001,
B01111110,
B00000000
};
void setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
// initialize serial communication:
Serial.begin(9600);
lc.shutdown(0,false); // Wake up displays
lc.shutdown(1,false);
lc.setIntensity(0,0); // Set intensity levels
lc.setIntensity(1,0);
lc.clearDisplay(0); // Clear Displays
lc.clearDisplay(1);
}
void sone()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,one[i]);
}
}
void stwo()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,two[i]);
}
}
void sthree()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,three[i]);
}
}
void sfour()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,four[i]);
}
}
void sfive()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,five[i]);
}
}
void ssix()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,six[i]);
}
}
void sseven()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,seven[i]);
}
}
void seight()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,eight[i]);
}
}
void snine()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,nine[i]);
}
}
void szero()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,zero[i]);
}
}
void sone1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,one[i]);
}
}
void stwo1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,two[i]);
}
}
void sthree1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,three[i]);
}
}
void sfour1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,four[i]);
}
}
void sfive1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,five[i]);
}
}
void ssix1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,six[i]);
}
}
void sseven1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,seven[i]);
}
}
void seight1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,eight[i]);
}
}
void snine1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,nine[i]);
}
}
void szero1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,zero[i]);
}
}
void sepuluh()
{
lc.clearDisplay(0);
lc.clearDisplay(1);
stwo1();
sone();
}
void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);
// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
if (jumlah==0){
lc.clearDisplay(0);
lc.clearDisplay(1);
//szero1();
//sone();
}
lastButtonState = buttonState;
==================================================================
47. PENGHITUNG RAKAAT SHOLAT
Program inin adalah gabungan dari beberapa program elementer, antara lain : program untuk
menjalankan LED matrix, program untuk menjalankan ultrasonic sensor, program untuk
menjalankan counter serta untuk push button. Pada proyek ini kita menggunakan sensor ultrasonic
untuk mendeteksi jarak antara sensor dan kepala ketika sujud. Sensor ultrasonik kita pasang pada
board arduino signal (sensor unit), hal ini dilakukan untuk mengisolasi sensor ultrasonic, karena
sensor ultrasonic ini akan terganggu jika dipasangkan pada satu board dengan counter, yaitu
pengukuran jarak menjadi tidak stabil ketika sensor ultrasonic ini tergabung dalam satu mikro
kontroler. Prinsip garis besarnya adalah sensor ultrasonic akan mengukur jarak antara kepala dan
sensor, ketikajarak sensor dan kepala lebih kecil dari 30 cm maka pin D7 akan menjadi HIGH,
signal HIGH dari pin D7 ini akan di-injeksikan ke pin D2 pada board arduino counter, yang pada
dasarnya pin D2 arduino counter ini adalah eks push button, signal yang dihasilkan oleh push button
kita gantikan dengan signal dari D7 dari board sensor. Ketika jarak sensor antara 30 hingga 80 cm
pin D7 tidak berubah status, sedangkan ketika jarak sudah lebih dari 80 cm makan pin D7 akan
berubah menjadi LOW. Hitungan dari board counter akan ditampilkan pada display 2x LED matrix
8x8.
Sket Counter :
byte one[] =
{
B00000000, // First frame of invader #1
B00000000,
B10000010,
B11111111,
B10000000,
B00000000,
B00000000,
B00000000
};
byte two[] =
{
B00000000, // First frame of invader #1
B00000000,
B11000010,
B10100001,
B10010001,
B10001001,
B10000110,
B00000000
};
byte three[] =
{
B00000000, // First frame of invader #1
B01000010,
B10000001,
B10001001,
B10001001,
B01110110,
B00000000,
B00000000
};
byte four[] =
{
B00000000, // First frame of invader #1
B00110000,
B00101000,
B00100100,
B00100010,
B11110001,
B00100000,
B00000000
};
byte five[] =
{
B00000000, // First frame of invader #1
B00000000,
B01001111,
B10001001,
B10001001,
B10001001,
B01110001,
B00000000
};
byte six[] =
{
B00000000, // First frame of invader #1
B00000000,
B01111110,
B10001001,
B10001001,
B10001001,
B01110010,
B00000000
};
byte seven[] =
{
B00000000, // First frame of invader #1
B00000000,
B10000001,
B01000001,
B00100001,
B00010001,
B00001111,
B00000000
};
byte eight[] =
{
B00000000, // First frame of invader #1
B00000000,
B01110110,
B10001001,
B10001001,
B10001001,
B01110110,
B00000000
};
byte nine[] =
{
B00000000, // First frame of invader #1
B00000000,
B01000110,
B10001001,
B10001001,
B10001001,
B01111110,
B00000000
};
byte zero[] =
{
B00000000, // First frame of invader #1
B00000000,
B01111110,
B10000001,
B10000001,
B10000001,
B01111110,
B00000000
};
void setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
// initialize the LED as an output:
// initialize serial communication:
Serial.begin(9600);
lc.shutdown(0,false); // Wake up displays
lc.shutdown(1,false);
lc.setIntensity(0,0); // Set intensity levels
lc.setIntensity(1,0);
lc.clearDisplay(0); // Clear Displays
lc.clearDisplay(1);
}
void sone()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,one[i]);
}
}
void stwo()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,two[i]);
}
}
void sthree()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,three[i]);
}
}
void sfour()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,four[i]);
}
}
void sfive()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,five[i]);
}
}
void ssix()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,six[i]);
}
}
void sseven()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,seven[i]);
}
}
void seight()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,eight[i]);
}
}
void snine()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,nine[i]);
}
}
void szero()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(0,i,zero[i]);
}
}
void sone1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,one[i]);
}
}
void stwo1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,two[i]);
}
}
void sthree1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,three[i]);
}
}
void sfour1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,four[i]);
}
}
void sfive1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,five[i]);
}
}
void ssix1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,six[i]);
}
}
void sseven1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,seven[i]);
}
}
void seight1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,eight[i]);
}
}
void snine1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,nine[i]);
}
}
void szero1()
{
for (int i = 0; i < 8; i++)
{
lc.setRow(1,i,zero[i]);
}
}
void sepuluh()
{
lc.clearDisplay(0);
lc.clearDisplay(1);
stwo1();
sone();
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
if (jumlah==0){
lc.clearDisplay(0);
lc.clearDisplay(1);
lastButtonState = buttonState;
int led = 7;
#define trigPin1 11
#define echoPin1 10
pinMode(led, OUTPUT);
Serial.begin(9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
}
void loop() {
SonarSensor(trigPin1, echoPin1);
UltraSensor = distance;
Serial.println(UltraSensor);
}
void SonarSensor(int trigPin,int echoPin)
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
delay(100);
}
===================================================================
48. DC MOTOR SHIELD
#include <AFMotor.h>
AF_DCMotor Motor1(1);
AF_DCMotor Motor2(2);
AF_DCMotor Motor3(3);
AF_DCMotor Motor4(4);
void setup()
{
}
void loop()
{
//setting forward speed
Motor1.setSpeed(70);
Motor2.setSpeed(70);
Motor3.setSpeed(80);
Motor4.setSpeed(80);
//foward
Motor1.run(FORWARD);
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
delay(1000);
Motor1.run(BRAKE);
Motor2.run(BRAKE);
Motor3.run(BRAKE);
Motor4.run(BRAKE);
delay(1000);
//stop
Motor1.setSpeed(0);
Motor2.setSpeed(0);
Motor3.setSpeed(0);
Motor4.setSpeed(0);
delay(1000);
//setting backward speed
Motor1.setSpeed(70);
Motor2.setSpeed(70);
Motor3.setSpeed(80);
Motor4.setSpeed(80);
//backward
Motor1.run(BACKWARD);
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
delay(1000);
Motor1.run(BRAKE);
Motor2.run(BRAKE);
Motor3.run(BRAKE);
Motor4.run(BRAKE);
delay(1000);
}
49. MOTOR SHIELD TEST-1
#include <AFMotor.h>
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Motor test!");
void loop() {
Serial.print("tick");
Serial.print("tack");
motor1.run(RELEASE); // stopped
delay(1000);
Serial.print("tock");
motor1.run(BACKWARD); // the other way
delay(1000);
Serial.print("tack");
motor1.run(RELEASE); // stopped
delay(1000);
}
50. MOTOR SHIELD TEST-2
#include <AFMotor.h>
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Motor test!");
void loop() {
Serial.print("M1");
Serial.print("tack");
motor1.run(RELEASE); // stopped
delay(1000);
Serial.print("tock");
motor1.run(BACKWARD); // the other way
delay(1000);
Serial.println("tack");
motor1.run(RELEASE); // stopped
delay(1000);
//-------------
Serial.print("M2");
Serial.print("tack");
motor2.run(RELEASE); // stopped
delay(1000);
Serial.print("tock");
motor2.run(BACKWARD); // the other way
delay(1000);
Serial.println("tack");
motor2.run(RELEASE); // stopped
delay(1000);
//----------------
Serial.print("M3");
Serial.print("tack");
motor3.run(RELEASE); // stopped
delay(1000);
Serial.print("tock");
motor3.run(BACKWARD); // the other way
delay(1000);
Serial.println("tack");
motor3.run(RELEASE); // stopped
delay(1000);
//--------------
Serial.print("M4");
Serial.print("tack");
motor4.run(RELEASE); // stopped
delay(1000);
Serial.print("tock");
motor4.run(BACKWARD); // the other way
delay(1000);
Serial.println("tack");
motor4.run(RELEASE); // stopped
delay(1000);
}
51. RUN MOTOR SHIELD BY KEYBOARD
#include <AFMotor.h>
AF_DCMotor Motor1(1);
AF_DCMotor Motor2(2);
AF_DCMotor Motor3(3);
AF_DCMotor Motor4(4);
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 0) {
int inByte = Serial.read();
int speed; // Local variable
switch (inByte) {
Motor1.setSpeed(70);
Motor2.setSpeed(70);
Motor3.setSpeed(80);
Motor4.setSpeed(80);
//foward
Motor1.run(FORWARD);
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
break;
Motor1.setSpeed(70);
Motor2.setSpeed(70);
Motor3.setSpeed(80);
Motor4.setSpeed(80);
//backward
Motor1.run(BACKWARD);
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
break;
case '3': // Motor 1 Reverse
Motor1.setSpeed(0);
Motor2.setSpeed(0);
Motor3.setSpeed(0);
Motor4.setSpeed(0);
break;
default:
break;
}
}
}
52. MOTOR SHIELD DENGAN VOID
#include <AFMotor.h>
AF_DCMotor Motor1(1);
AF_DCMotor Motor2(2);
AF_DCMotor Motor3(3);
AF_DCMotor Motor4(4);
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 0) {
int inByte = Serial.read();
int speed; // Local variable
switch (inByte) {
default:
break;
}
}
}
void maju(){
Motor1.setSpeed(70);
Motor2.setSpeed(70);
Motor3.setSpeed(80);
Motor4.setSpeed(80);
//foward
Motor1.run(FORWARD);
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
}
void mundur(){
Motor1.setSpeed(70);
Motor2.setSpeed(70);
Motor3.setSpeed(80);
Motor4.setSpeed(80);
//backward
Motor1.run(BACKWARD);
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
}
void kanan(){
Motor1.setSpeed(70);
Motor2.setSpeed(70);
Motor3.setSpeed(80);
Motor4.setSpeed(80);
//foward
Motor1.run(FORWARD);
Motor2.run(FORWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
}
void kiri(){
Motor1.setSpeed(70);
Motor2.setSpeed(70);
Motor3.setSpeed(80);
Motor4.setSpeed(80);
//foward
Motor1.run(BACKWARD);
Motor2.run(BACKWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
}
void stops(){
Motor1.setSpeed(0);
Motor2.setSpeed(0);
Motor3.setSpeed(0);
Motor4.setSpeed(0);
}
==============================================================
53. MENGENDALIKAN MOTOR SERVO DENGAN IR REMOTE
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
servo.attach(15); //servo pin, pin A1
}
void loop()
{
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
if (results.value == plus)
{
servo.write(180);
delay(1);//controlling speed
if (results.value == minus)
{
servo.write(0);
delay(1);
}
}
-------------------------------------------------------------------------------------------------
54. PENGUKURAN SUHU DENGAN SENSOR PT-100
/*
In this project we use LM324 chip for amplify signal from RTD PT100, amplified signal than go to
ADS1015 for increase digital resolution.
*/
#include <Wire.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads(0x48);
int temp0;
void setup() {
Serial.begin(9600);
ads.begin();
}
void loop() {
int16_t adc0; // we read from the ADC, we have a sixteen bit integer as a result
adc0 = ads.readADC_SingleEnded(0);
temp0 = adc0;
float fhrt = (temp0*0.0466)-671.48;//from calabration plot
Serial.print(temp0);
Serial.print(" ");
Serial.println(fhrt);
delay(500);
}
=====================================================================
55. MENGATUR KECERAHAN LED DENGAN PUSH BUTTON
int pinIncrease = 2;
int pinDecrease = 3;
int pinLED = 11;
int brightness = 0;
void setup() {
Serial.begin(9600);
pinMode(pinIncrease, INPUT);
pinMode(pinDecrease, INPUT);
pinMode(pinLED, OUTPUT);
digitalWrite(pinIncrease, HIGH);
digitalWrite(pinDecrease, HIGH);
}
void loop() {
brightness = constrain(brightness, 0, 255);
analogWrite(pinLED, brightness);
Serial.println(brightness);
delay(100);
if(digitalRead(pinIncrease) == LOW){
brightness++;
}else if(digitalRead(pinDecrease) == LOW){
brightness--;
}
}
===================================================================
56. MENGATUR LAJU FAN DENGAN PUSH BUTTON
int pinIncrease = 2;
int pinDecrease = 3;
int pinLED = 11;
int SpeedFan = 0;
void setup() {
Serial.begin(9600);
pinMode(pinIncrease, INPUT);
pinMode(pinDecrease, INPUT);
pinMode(pinLED, OUTPUT);
digitalWrite(pinIncrease, HIGH);
digitalWrite(pinDecrease, HIGH);
}
void loop() {
SpeedFan = constrain(SpeedFan, 0, 255);
analogWrite(pinLED, SpeedFan);
Serial.println(SpeedFan);
delay(20);
if(digitalRead(pinIncrease) == LOW){
SpeedFan++;
}else if(digitalRead(pinDecrease) == LOW){
SpeedFan--;
}
}
===========================================================
57. SETTING LAJU FAN DENGAN EEPROM
Pada proyek ini kita akan tampilkan pengaturan laju dimana nilai laju kita tuliskan dalam EEPROM
ketika push button nomer 1 kita tekan.
#include <EEPROM.h>
int pinIncrease = 2;
int pinDecrease = 3;
int pinLED = 11;
int pinSetting = 10;
int SpeedFan = 0;
byte laju;
void setup() {
Serial.begin(9600);
pinMode(pinIncrease, INPUT);
pinMode(pinDecrease, INPUT);
pinMode(pinSetting, INPUT);
pinMode(pinLED, OUTPUT);
digitalWrite(pinIncrease, HIGH);
digitalWrite(pinDecrease, HIGH);
}
void loop() {
if(digitalRead(pinSetting) == HIGH){
SpeedFan = constrain(SpeedFan, 0, 255);
analogWrite(pinLED, laju);
EEPROM.write(1, SpeedFan);
laju = EEPROM.read(1);
Serial.print(laju);
Serial.print(" ");
Serial.println(SpeedFan);
delay(20);
setting();
}else if(digitalRead(pinSetting) == LOW){
laju = EEPROM.read(1);
analogWrite(pinLED, laju);
Serial.print(laju);
Serial.print(" ");
Serial.println(SpeedFan);
delay(20);
}
}
void setting(){
if(digitalRead(pinIncrease) == LOW){
SpeedFan++;
}else if(digitalRead(pinDecrease) == LOW){
SpeedFan--;
}
}
==================================================================
58. SETUP LCD MENGGUNAKAN IC 74HC595
LCD juga dapat disambungkan memakai IC shift register 74HC595. Keuntungan dari penggunaan
shift register ini adalah dapat mengurangi jumlah penggunaan pin pada arduino, yaitu hanya
menggunakan tiga pin saja.
#include <Wire.h>
#include <LiquidCrystal_SR.h>
//LiquidCrystal_SR lcd Mendefinisikan(DataPin,ClockPin, EnablePin);
LiquidCrystal_SR lcd(2, 3, 4); //D2 to pin14,D3 to pin11,D4 to pin12
void setup() {
lcd.begin(16, 4);
}
void loop() {
int i;
lcd.setCursor(0, 0);
lcd.print("Ayo belajar!");
for (i = 0 ; i < 16; i ++) {
lcd.scrollDisplayLeft();
delay(300);
}
}
===============================================================
59. ACCELEROMETER MPU 6050
#include <Wire.h>
// AUX_VDDIO Register
#define MPU6050_AUX_VDDIO MPU6050_D7 // I2C high: 1=VDD, 0=VLOGIC
// CONFIG Register
// DLPF is Digital Low Pass Filter for both gyro and accelerometers.
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_DLPF_CFG0 MPU6050_D0
#define MPU6050_DLPF_CFG1 MPU6050_D1
#define MPU6050_DLPF_CFG2 MPU6050_D2
#define MPU6050_EXT_SYNC_SET0 MPU6050_D3
#define MPU6050_EXT_SYNC_SET1 MPU6050_D4
#define MPU6050_EXT_SYNC_SET2 MPU6050_D5
// GYRO_CONFIG Register
// The XG_ST, YG_ST, ZG_ST are bits for selftest.
// The FS_SEL sets the range for the gyro.
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_FS_SEL0 MPU6050_D3
#define MPU6050_FS_SEL1 MPU6050_D4
#define MPU6050_ZG_ST MPU6050_D5
#define MPU6050_YG_ST MPU6050_D6
#define MPU6050_XG_ST MPU6050_D7
// ACCEL_CONFIG Register
// The XA_ST, YA_ST, ZA_ST are bits for selftest.
// The AFS_SEL sets the range for the accelerometer.
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_ACCEL_HPF0 MPU6050_D0
#define MPU6050_ACCEL_HPF1 MPU6050_D1
#define MPU6050_ACCEL_HPF2 MPU6050_D2
#define MPU6050_AFS_SEL0 MPU6050_D3
#define MPU6050_AFS_SEL1 MPU6050_D4
#define MPU6050_ZA_ST MPU6050_D5
#define MPU6050_YA_ST MPU6050_D6
#define MPU6050_XA_ST MPU6050_D7
// FIFO_EN Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_SLV0_FIFO_EN MPU6050_D0
#define MPU6050_SLV1_FIFO_EN MPU6050_D1
#define MPU6050_SLV2_FIFO_EN MPU6050_D2
#define MPU6050_ACCEL_FIFO_EN MPU6050_D3
#define MPU6050_ZG_FIFO_EN MPU6050_D4
#define MPU6050_YG_FIFO_EN MPU6050_D5
#define MPU6050_XG_FIFO_EN MPU6050_D6
#define MPU6050_TEMP_FIFO_EN MPU6050_D7
// I2C_MST_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_MST_CLK0 MPU6050_D0
#define MPU6050_I2C_MST_CLK1 MPU6050_D1
#define MPU6050_I2C_MST_CLK2 MPU6050_D2
#define MPU6050_I2C_MST_CLK3 MPU6050_D3
#define MPU6050_I2C_MST_P_NSR MPU6050_D4
#define MPU6050_SLV_3_FIFO_EN MPU6050_D5
#define MPU6050_WAIT_FOR_ES MPU6050_D6
#define MPU6050_MULT_MST_EN MPU6050_D7
// I2C_SLV0_ADDR Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV0_RW MPU6050_D7
// I2C_SLV0_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV0_LEN0 MPU6050_D0
#define MPU6050_I2C_SLV0_LEN1 MPU6050_D1
#define MPU6050_I2C_SLV0_LEN2 MPU6050_D2
#define MPU6050_I2C_SLV0_LEN3 MPU6050_D3
#define MPU6050_I2C_SLV0_GRP MPU6050_D4
#define MPU6050_I2C_SLV0_REG_DIS MPU6050_D5
#define MPU6050_I2C_SLV0_BYTE_SW MPU6050_D6
#define MPU6050_I2C_SLV0_EN MPU6050_D7
// I2C_SLV1_ADDR Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV1_RW MPU6050_D7
// I2C_SLV1_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV1_LEN0 MPU6050_D0
#define MPU6050_I2C_SLV1_LEN1 MPU6050_D1
#define MPU6050_I2C_SLV1_LEN2 MPU6050_D2
#define MPU6050_I2C_SLV1_LEN3 MPU6050_D3
#define MPU6050_I2C_SLV1_GRP MPU6050_D4
#define MPU6050_I2C_SLV1_REG_DIS MPU6050_D5
#define MPU6050_I2C_SLV1_BYTE_SW MPU6050_D6
#define MPU6050_I2C_SLV1_EN MPU6050_D7
// I2C_SLV2_ADDR Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV2_RW MPU6050_D7
// I2C_SLV2_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV2_LEN0 MPU6050_D0
#define MPU6050_I2C_SLV2_LEN1 MPU6050_D1
#define MPU6050_I2C_SLV2_LEN2 MPU6050_D2
#define MPU6050_I2C_SLV2_LEN3 MPU6050_D3
#define MPU6050_I2C_SLV2_GRP MPU6050_D4
#define MPU6050_I2C_SLV2_REG_DIS MPU6050_D5
#define MPU6050_I2C_SLV2_BYTE_SW MPU6050_D6
#define MPU6050_I2C_SLV2_EN MPU6050_D7
// I2C_SLV3_ADDR Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV3_RW MPU6050_D7
// I2C_SLV3_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV3_LEN0 MPU6050_D0
#define MPU6050_I2C_SLV3_LEN1 MPU6050_D1
#define MPU6050_I2C_SLV3_LEN2 MPU6050_D2
#define MPU6050_I2C_SLV3_LEN3 MPU6050_D3
#define MPU6050_I2C_SLV3_GRP MPU6050_D4
#define MPU6050_I2C_SLV3_REG_DIS MPU6050_D5
#define MPU6050_I2C_SLV3_BYTE_SW MPU6050_D6
#define MPU6050_I2C_SLV3_EN MPU6050_D7
// I2C_SLV4_ADDR Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV4_RW MPU6050_D7
// I2C_SLV4_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_MST_DLY0 MPU6050_D0
#define MPU6050_I2C_MST_DLY1 MPU6050_D1
#define MPU6050_I2C_MST_DLY2 MPU6050_D2
#define MPU6050_I2C_MST_DLY3 MPU6050_D3
#define MPU6050_I2C_MST_DLY4 MPU6050_D4
#define MPU6050_I2C_SLV4_REG_DIS MPU6050_D5
#define MPU6050_I2C_SLV4_INT_EN MPU6050_D6
#define MPU6050_I2C_SLV4_EN MPU6050_D7
// I2C_MST_STATUS Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV0_NACK MPU6050_D0
#define MPU6050_I2C_SLV1_NACK MPU6050_D1
#define MPU6050_I2C_SLV2_NACK MPU6050_D2
#define MPU6050_I2C_SLV3_NACK MPU6050_D3
#define MPU6050_I2C_SLV4_NACK MPU6050_D4
#define MPU6050_I2C_LOST_ARB MPU6050_D5
#define MPU6050_I2C_SLV4_DONE MPU6050_D6
#define MPU6050_PASS_THROUGH MPU6050_D7
// I2C_PIN_CFG Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_CLKOUT_EN MPU6050_D0
#define MPU6050_I2C_BYPASS_EN MPU6050_D1
#define MPU6050_FSYNC_INT_EN MPU6050_D2
#define MPU6050_FSYNC_INT_LEVEL MPU6050_D3
#define MPU6050_INT_RD_CLEAR MPU6050_D4
#define MPU6050_LATCH_INT_EN MPU6050_D5
#define MPU6050_INT_OPEN MPU6050_D6
#define MPU6050_INT_LEVEL MPU6050_D7
// INT_ENABLE Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_DATA_RDY_EN MPU6050_D0
#define MPU6050_I2C_MST_INT_EN MPU6050_D3
#define MPU6050_FIFO_OFLOW_EN MPU6050_D4
#define MPU6050_ZMOT_EN MPU6050_D5
#define MPU6050_MOT_EN MPU6050_D6
#define MPU6050_FF_EN MPU6050_D7
// INT_STATUS Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_DATA_RDY_INT MPU6050_D0
#define MPU6050_I2C_MST_INT MPU6050_D3
#define MPU6050_FIFO_OFLOW_INT MPU6050_D4
#define MPU6050_ZMOT_INT MPU6050_D5
#define MPU6050_MOT_INT MPU6050_D6
#define MPU6050_FF_INT MPU6050_D7
// MOT_DETECT_STATUS Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_MOT_ZRMOT MPU6050_D0
#define MPU6050_MOT_ZPOS MPU6050_D2
#define MPU6050_MOT_ZNEG MPU6050_D3
#define MPU6050_MOT_YPOS MPU6050_D4
#define MPU6050_MOT_YNEG MPU6050_D5
#define MPU6050_MOT_XPOS MPU6050_D6
#define MPU6050_MOT_XNEG MPU6050_D7
// IC2_MST_DELAY_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV0_DLY_EN MPU6050_D0
#define MPU6050_I2C_SLV1_DLY_EN MPU6050_D1
#define MPU6050_I2C_SLV2_DLY_EN MPU6050_D2
#define MPU6050_I2C_SLV3_DLY_EN MPU6050_D3
#define MPU6050_I2C_SLV4_DLY_EN MPU6050_D4
#define MPU6050_DELAY_ES_SHADOW MPU6050_D7
// SIGNAL_PATH_RESET Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_TEMP_RESET MPU6050_D0
#define MPU6050_ACCEL_RESET MPU6050_D1
#define MPU6050_GYRO_RESET MPU6050_D2
// MOT_DETECT_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_MOT_COUNT0 MPU6050_D0
#define MPU6050_MOT_COUNT1 MPU6050_D1
#define MPU6050_FF_COUNT0 MPU6050_D2
#define MPU6050_FF_COUNT1 MPU6050_D3
#define MPU6050_ACCEL_ON_DELAY0 MPU6050_D4
#define MPU6050_ACCEL_ON_DELAY1 MPU6050_D5
// USER_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_SIG_COND_RESET MPU6050_D0
#define MPU6050_I2C_MST_RESET MPU6050_D1
#define MPU6050_FIFO_RESET MPU6050_D2
#define MPU6050_I2C_IF_DIS MPU6050_D4 // must be 0 for MPU-6050
#define MPU6050_I2C_MST_EN MPU6050_D5
#define MPU6050_FIFO_EN MPU6050_D6
// PWR_MGMT_1 Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_CLKSEL0 MPU6050_D0
#define MPU6050_CLKSEL1 MPU6050_D1
#define MPU6050_CLKSEL2 MPU6050_D2
#define MPU6050_TEMP_DIS MPU6050_D3 // 1: disable temperature sensor
#define MPU6050_CYCLE MPU6050_D5 // 1: sample and sleep
#define MPU6050_SLEEP MPU6050_D6 // 1: sleep mode
#define MPU6050_DEVICE_RESET MPU6050_D7 // 1: reset to default values
// PWR_MGMT_2 Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_STBY_ZG MPU6050_D0
#define MPU6050_STBY_YG MPU6050_D1
#define MPU6050_STBY_XG MPU6050_D2
#define MPU6050_STBY_ZA MPU6050_D3
#define MPU6050_STBY_YA MPU6050_D4
#define MPU6050_STBY_XA MPU6050_D5
#define MPU6050_LP_WAKE_CTRL0 MPU6050_D6
#define MPU6050_LP_WAKE_CTRL1 MPU6050_D7
// Use the following global variables and access functions to help store the overall
// rotation angle of the sensor
unsigned long last_read_time;
float last_x_angle; // These are the filtered angles
float last_y_angle;
float last_z_angle;
float last_gyro_x_angle; // Store the gyro angles to compare drift
float last_gyro_y_angle;
float last_gyro_z_angle;
void set_last_read_angle_data(unsigned long time, float x, float y, float z, float x_gyro, float
y_gyro, float z_gyro) {
last_read_time = time;
last_x_angle = x;
last_y_angle = y;
last_z_angle = z;
last_gyro_x_angle = x_gyro;
last_gyro_y_angle = y_gyro;
last_gyro_z_angle = z_gyro;
}
float base_x_gyro;
float base_y_gyro;
float base_z_gyro;
return error;
}
//Serial.println("Starting Calibration");
//Serial.println("Finishing Calibration");
}
void setup()
{
int error;
uint8_t c;
Serial.begin(9600);
/*
Serial.println(F("InvenSense MPU-6050"));
Serial.println(F("June 2012"));
*/
// Initialize the 'Wire' class for the I2C-bus.
Wire.begin();
// default at power-up:
// Gyro at 250 degrees second
// Acceleration at 2g
// Clock source at internal 8MHz
// The device is in sleep mode.
//
int error;
double dT;
accel_t_gyro_union accel_t_gyro;
/*
Serial.println(F(""));
Serial.println(F("MPU-6050"));
*/
/*
Serial.print(F("Read accel, temp and gyro, error = "));
Serial.println(error,DEC);
float accel_angle_z = 0;
// Apply the complementary filter to figure out the change in angle - choice of alpha is
// estimated now. Alpha depends on the sampling rate...
float alpha = 0.96;
float angle_x = alpha*gyro_angle_x + (1.0 - alpha)*accel_angle_x;
float angle_y = alpha*gyro_angle_y + (1.0 - alpha)*accel_angle_y;
float angle_z = gyro_angle_z; //Accelerometer doesn't give z-angle
// Update the saved data with the latest values
set_last_read_angle_data(t_now, angle_x, angle_y, angle_z, unfiltered_gyro_angle_x,
unfiltered_gyro_angle_y, unfiltered_gyro_angle_z);
delay(5);
}
// --------------------------------------------------------
// MPU6050_read
//
// This is a common function to read multiple bytes
// from an I2C device.
//
// It uses the boolean parameter for Wire.endTransMission()
// to be able to hold or release the I2C-bus.
// This is implemented in Arduino 1.0.1.
//
// Only this function is used to read.
// There is no function for a single byte.
//
int MPU6050_read(int start, uint8_t *buffer, int size)
{
int i, n, error;
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
n = Wire.write(start);
if (n != 1)
return (-10);
// --------------------------------------------------------
// MPU6050_write
//
// This is a common function to write multiple bytes to an I2C device.
//
// If only a single register is written,
// use the function MPU_6050_write_reg().
//
// Parameters:
// start : Start address, use a define for the register
// pData : A pointer to the data to write.
// size : The number of bytes to write.
//
// If only a single register is written, a pointer
// to the data has to be used, and the size is
// a single byte:
// int data = 0; // the data to write
// MPU6050_write (MPU6050_PWR_MGMT_1, &c, 1);
//
int MPU6050_write(int start, const uint8_t *pData, int size)
{
int n, error;
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
n = Wire.write(start); // write the start address
if (n != 1)
return (-20);
// --------------------------------------------------------
// MPU6050_write_reg
//
// An extra function to write a single register.
// It is just a wrapper around the MPU_6050_write()
// function, and it is only a convenient function
// to make it easier to write a single register.
//
int MPU6050_write_reg(int reg, uint8_t data)
{
int error;
return (error);
}
==================================================================
60. ALARM GEMPA BUMI
atau
Pada proyek ini kita memanfaatkan MPU6050 untuk mendeteksi adanya akselerasi pada arah
mendatar. Ketika akselerasi di atas tresshold maka bell akan aktif.
#include <Wire.h>
// AUX_VDDIO Register
#define MPU6050_AUX_VDDIO MPU6050_D7 // I2C high: 1=VDD, 0=VLOGIC
// Use the following global variables and access functions to help store the overall
// rotation angle of the sensor
unsigned long last_read_time;
float last_x_angle; // These are the filtered angles
float last_y_angle;
float last_z_angle;
float last_gyro_x_angle; // Store the gyro angles to compare drift
float last_gyro_y_angle;
float last_gyro_z_angle;
void set_last_read_angle_data(unsigned long time, float x, float y, float z, float x_gyro, float
y_gyro, float z_gyro) {
last_read_time = time;
last_x_angle = x;
last_y_angle = y;
last_z_angle = z;
last_gyro_x_angle = x_gyro;
last_gyro_y_angle = y_gyro;
last_gyro_z_angle = z_gyro;
}
float base_x_gyro;
float base_y_gyro;
float base_z_gyro;
return error;
}
//Serial.println("Starting Calibration");
//Serial.println("Finishing Calibration");
}
float diffy;
float lasty; //previous "action number"
float y;
float diffx;
float lastx; //previous "action number"
float x;
void setup()
{
pinMode(led30, OUTPUT);
int error;
uint8_t c;
Serial.begin(9600);
Wire.begin();
calibrate_sensors();
set_last_read_angle_data(millis(), 0, 0, 0, 0, 0, 0);
}
void(* resetFunc) (void) = 0; //declare reset function @ address 0
void loop()
{
int error;
double dT;
accel_t_gyro_union accel_t_gyro;
error = read_gyro_accel_vals((uint8_t*) &accel_t_gyro);
float accel_angle_z = 0;
Serial.print("diffx: ");
Serial.print(abs(diffx));
Serial.print(" diffy: ");
Serial.print(abs(diffy));
Serial.print(" a: ");
Serial.print(a);
Serial.print(" b: ");
Serial.print(b);
Serial.print(" c: ");
Serial.print(c);
Serial.print(" force: ");
Serial.println(force);
if(force > 1.6) //check that the proximity of the first floor is low
//the motor begins and stops when the appropriate floor proximity give the
signal
{
digitalWrite(led30, HIGH);
delay(2000);
}
else {
digitalWrite(led30, LOW);
delay(100);
}
}
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
n = Wire.write(start);
if (n != 1)
return (-10);
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
n = Wire.write(start); // write the start address
if (n != 1)
return (-20);
return (error);
}
====================================================================
61. MENGENDALIKAN ARAH DAN LAJU PUTARAN MOTOR DENGAN MPU
Pada protek ini kita akan coba mengaplikasikan MPU6050 dan motor board L293N, yang mana
MPU dengan kemampuan mendeteksi kemiringan untuk mengendalikan arah dan laju DC motor.
//Keyboard Controls:
//
// 1 -Motor 1 Left
// 2 -Motor 1 Stop
// 3 -Motor 1 Right
//
// 4 -Motor 2 Left
// 5 -Motor 2 Stop
// 6 -Motor 2 Right
// Declare L298N Dual H-Bridge Motor Controller directly since there is not a library to load.
// Motor 1
int dir1PinA = 7;
int dir2PinA = 3;
int speedPinA = 9; // Needs to be a PWM pin to be able to control motor speed
// Motor 2
int dir1PinB = 4;
int dir2PinB = 5;
int speedPinB = 10; // Needs to be a PWM pin to be able to control motor speed
//-------------------------MPU--------------------
// MPU-6050 Accelerometer + Gyro
// -----------------------------
//
// By arduino.cc user "Krodal".
// June 2012
// Open Source / Public Domain
//
// Using Arduino 1.0.1
// It will not work with an older version,
// since Wire.endTransmission() uses a parameter
// to hold or release the I2C bus.
//
// Documentation:
// - The InvenSense documents:
// - "MPU-6000 and MPU-6050 Product Specification",
// PS-MPU-6000A.pdf
// - "MPU-6000 and MPU-6050 Register Map and Descriptions",
// RM-MPU-6000A.pdf or RS-MPU-6000A.pdf
// - "MPU-6000/MPU-6050 9-Axis Evaluation Board User Guide"
// AN-MPU-6000EVB.pdf
//
// The accuracy is 16-bits.
//
// Temperature sensor from -40 to +85 degrees Celsius
// 340 per degrees, -512 at 35 degrees.
//
// At power-up, all registers are zero, except these two:
// Register 0x6B (PWR_MGMT_2) = 0x40 (I read zero).
// Register 0x75 (WHO_AM_I) = 0x68.
//
#include <Wire.h>
// AUX_VDDIO Register
#define MPU6050_AUX_VDDIO MPU6050_D7 // I2C high: 1=VDD, 0=VLOGIC
// CONFIG Register
// DLPF is Digital Low Pass Filter for both gyro and accelerometers.
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_DLPF_CFG0 MPU6050_D0
#define MPU6050_DLPF_CFG1 MPU6050_D1
#define MPU6050_DLPF_CFG2 MPU6050_D2
#define MPU6050_EXT_SYNC_SET0 MPU6050_D3
#define MPU6050_EXT_SYNC_SET1 MPU6050_D4
#define MPU6050_EXT_SYNC_SET2 MPU6050_D5
// GYRO_CONFIG Register
// The XG_ST, YG_ST, ZG_ST are bits for selftest.
// The FS_SEL sets the range for the gyro.
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_FS_SEL0 MPU6050_D3
#define MPU6050_FS_SEL1 MPU6050_D4
#define MPU6050_ZG_ST MPU6050_D5
#define MPU6050_YG_ST MPU6050_D6
#define MPU6050_XG_ST MPU6050_D7
// ACCEL_CONFIG Register
// The XA_ST, YA_ST, ZA_ST are bits for selftest.
// The AFS_SEL sets the range for the accelerometer.
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_ACCEL_HPF0 MPU6050_D0
#define MPU6050_ACCEL_HPF1 MPU6050_D1
#define MPU6050_ACCEL_HPF2 MPU6050_D2
#define MPU6050_AFS_SEL0 MPU6050_D3
#define MPU6050_AFS_SEL1 MPU6050_D4
#define MPU6050_ZA_ST MPU6050_D5
#define MPU6050_YA_ST MPU6050_D6
#define MPU6050_XA_ST MPU6050_D7
// FIFO_EN Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_SLV0_FIFO_EN MPU6050_D0
#define MPU6050_SLV1_FIFO_EN MPU6050_D1
#define MPU6050_SLV2_FIFO_EN MPU6050_D2
#define MPU6050_ACCEL_FIFO_EN MPU6050_D3
#define MPU6050_ZG_FIFO_EN MPU6050_D4
#define MPU6050_YG_FIFO_EN MPU6050_D5
#define MPU6050_XG_FIFO_EN MPU6050_D6
#define MPU6050_TEMP_FIFO_EN MPU6050_D7
// I2C_MST_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_MST_CLK0 MPU6050_D0
#define MPU6050_I2C_MST_CLK1 MPU6050_D1
#define MPU6050_I2C_MST_CLK2 MPU6050_D2
#define MPU6050_I2C_MST_CLK3 MPU6050_D3
#define MPU6050_I2C_MST_P_NSR MPU6050_D4
#define MPU6050_SLV_3_FIFO_EN MPU6050_D5
#define MPU6050_WAIT_FOR_ES MPU6050_D6
#define MPU6050_MULT_MST_EN MPU6050_D7
// I2C_SLV0_ADDR Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV0_RW MPU6050_D7
// I2C_SLV0_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV0_LEN0 MPU6050_D0
#define MPU6050_I2C_SLV0_LEN1 MPU6050_D1
#define MPU6050_I2C_SLV0_LEN2 MPU6050_D2
#define MPU6050_I2C_SLV0_LEN3 MPU6050_D3
#define MPU6050_I2C_SLV0_GRP MPU6050_D4
#define MPU6050_I2C_SLV0_REG_DIS MPU6050_D5
#define MPU6050_I2C_SLV0_BYTE_SW MPU6050_D6
#define MPU6050_I2C_SLV0_EN MPU6050_D7
// I2C_SLV1_ADDR Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV1_RW MPU6050_D7
// I2C_SLV1_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV1_LEN0 MPU6050_D0
#define MPU6050_I2C_SLV1_LEN1 MPU6050_D1
#define MPU6050_I2C_SLV1_LEN2 MPU6050_D2
#define MPU6050_I2C_SLV1_LEN3 MPU6050_D3
#define MPU6050_I2C_SLV1_GRP MPU6050_D4
#define MPU6050_I2C_SLV1_REG_DIS MPU6050_D5
#define MPU6050_I2C_SLV1_BYTE_SW MPU6050_D6
#define MPU6050_I2C_SLV1_EN MPU6050_D7
// I2C_SLV2_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV2_LEN0 MPU6050_D0
#define MPU6050_I2C_SLV2_LEN1 MPU6050_D1
#define MPU6050_I2C_SLV2_LEN2 MPU6050_D2
#define MPU6050_I2C_SLV2_LEN3 MPU6050_D3
#define MPU6050_I2C_SLV2_GRP MPU6050_D4
#define MPU6050_I2C_SLV2_REG_DIS MPU6050_D5
#define MPU6050_I2C_SLV2_BYTE_SW MPU6050_D6
#define MPU6050_I2C_SLV2_EN MPU6050_D7
// I2C_SLV3_ADDR Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV3_RW MPU6050_D7
// I2C_SLV3_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV3_LEN0 MPU6050_D0
#define MPU6050_I2C_SLV3_LEN1 MPU6050_D1
#define MPU6050_I2C_SLV3_LEN2 MPU6050_D2
#define MPU6050_I2C_SLV3_LEN3 MPU6050_D3
#define MPU6050_I2C_SLV3_GRP MPU6050_D4
#define MPU6050_I2C_SLV3_REG_DIS MPU6050_D5
#define MPU6050_I2C_SLV3_BYTE_SW MPU6050_D6
#define MPU6050_I2C_SLV3_EN MPU6050_D7
// I2C_SLV4_ADDR Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV4_RW MPU6050_D7
// I2C_SLV4_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_MST_DLY0 MPU6050_D0
#define MPU6050_I2C_MST_DLY1 MPU6050_D1
#define MPU6050_I2C_MST_DLY2 MPU6050_D2
#define MPU6050_I2C_MST_DLY3 MPU6050_D3
#define MPU6050_I2C_MST_DLY4 MPU6050_D4
#define MPU6050_I2C_SLV4_REG_DIS MPU6050_D5
#define MPU6050_I2C_SLV4_INT_EN MPU6050_D6
#define MPU6050_I2C_SLV4_EN MPU6050_D7
// I2C_MST_STATUS Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV0_NACK MPU6050_D0
#define MPU6050_I2C_SLV1_NACK MPU6050_D1
#define MPU6050_I2C_SLV2_NACK MPU6050_D2
#define MPU6050_I2C_SLV3_NACK MPU6050_D3
#define MPU6050_I2C_SLV4_NACK MPU6050_D4
#define MPU6050_I2C_LOST_ARB MPU6050_D5
#define MPU6050_I2C_SLV4_DONE MPU6050_D6
#define MPU6050_PASS_THROUGH MPU6050_D7
// I2C_PIN_CFG Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_CLKOUT_EN MPU6050_D0
#define MPU6050_I2C_BYPASS_EN MPU6050_D1
#define MPU6050_FSYNC_INT_EN MPU6050_D2
#define MPU6050_FSYNC_INT_LEVEL MPU6050_D3
#define MPU6050_INT_RD_CLEAR MPU6050_D4
#define MPU6050_LATCH_INT_EN MPU6050_D5
#define MPU6050_INT_OPEN MPU6050_D6
#define MPU6050_INT_LEVEL MPU6050_D7
// INT_ENABLE Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_DATA_RDY_EN MPU6050_D0
#define MPU6050_I2C_MST_INT_EN MPU6050_D3
#define MPU6050_FIFO_OFLOW_EN MPU6050_D4
#define MPU6050_ZMOT_EN MPU6050_D5
#define MPU6050_MOT_EN MPU6050_D6
#define MPU6050_FF_EN MPU6050_D7
// INT_STATUS Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_DATA_RDY_INT MPU6050_D0
#define MPU6050_I2C_MST_INT MPU6050_D3
#define MPU6050_FIFO_OFLOW_INT MPU6050_D4
#define MPU6050_ZMOT_INT MPU6050_D5
#define MPU6050_MOT_INT MPU6050_D6
#define MPU6050_FF_INT MPU6050_D7
// MOT_DETECT_STATUS Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_MOT_ZRMOT MPU6050_D0
#define MPU6050_MOT_ZPOS MPU6050_D2
#define MPU6050_MOT_ZNEG MPU6050_D3
#define MPU6050_MOT_YPOS MPU6050_D4
#define MPU6050_MOT_YNEG MPU6050_D5
#define MPU6050_MOT_XPOS MPU6050_D6
#define MPU6050_MOT_XNEG MPU6050_D7
// IC2_MST_DELAY_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_I2C_SLV0_DLY_EN MPU6050_D0
#define MPU6050_I2C_SLV1_DLY_EN MPU6050_D1
#define MPU6050_I2C_SLV2_DLY_EN MPU6050_D2
#define MPU6050_I2C_SLV3_DLY_EN MPU6050_D3
#define MPU6050_I2C_SLV4_DLY_EN MPU6050_D4
#define MPU6050_DELAY_ES_SHADOW MPU6050_D7
// SIGNAL_PATH_RESET Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_TEMP_RESET MPU6050_D0
#define MPU6050_ACCEL_RESET MPU6050_D1
#define MPU6050_GYRO_RESET MPU6050_D2
// MOT_DETECT_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_MOT_COUNT0 MPU6050_D0
#define MPU6050_MOT_COUNT1 MPU6050_D1
#define MPU6050_FF_COUNT0 MPU6050_D2
#define MPU6050_FF_COUNT1 MPU6050_D3
#define MPU6050_ACCEL_ON_DELAY0 MPU6050_D4
#define MPU6050_ACCEL_ON_DELAY1 MPU6050_D5
// USER_CTRL Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_SIG_COND_RESET MPU6050_D0
#define MPU6050_I2C_MST_RESET MPU6050_D1
#define MPU6050_FIFO_RESET MPU6050_D2
#define MPU6050_I2C_IF_DIS MPU6050_D4 // must be 0 for MPU-6050
#define MPU6050_I2C_MST_EN MPU6050_D5
#define MPU6050_FIFO_EN MPU6050_D6
// PWR_MGMT_1 Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_CLKSEL0 MPU6050_D0
#define MPU6050_CLKSEL1 MPU6050_D1
#define MPU6050_CLKSEL2 MPU6050_D2
#define MPU6050_TEMP_DIS MPU6050_D3 // 1: disable temperature sensor
#define MPU6050_CYCLE MPU6050_D5 // 1: sample and sleep
#define MPU6050_SLEEP MPU6050_D6 // 1: sleep mode
#define MPU6050_DEVICE_RESET MPU6050_D7 // 1: reset to default values
// PWR_MGMT_2 Register
// These are the names for the bits.
// Use these only with the bit() macro.
#define MPU6050_STBY_ZG MPU6050_D0
#define MPU6050_STBY_YG MPU6050_D1
#define MPU6050_STBY_XG MPU6050_D2
#define MPU6050_STBY_ZA MPU6050_D3
#define MPU6050_STBY_YA MPU6050_D4
#define MPU6050_STBY_XA MPU6050_D5
#define MPU6050_LP_WAKE_CTRL0 MPU6050_D6
#define MPU6050_LP_WAKE_CTRL1 MPU6050_D7
// Use the following global variables and access functions to help store the overall
// rotation angle of the sensor
unsigned long last_read_time;
float last_x_angle; // These are the filtered angles
float last_y_angle;
float last_z_angle;
float last_gyro_x_angle; // Store the gyro angles to compare drift
float last_gyro_y_angle;
float last_gyro_z_angle;
void set_last_read_angle_data(unsigned long time, float x, float y, float z, float x_gyro, float
y_gyro, float z_gyro) {
last_read_time = time;
last_x_angle = x;
last_y_angle = y;
last_z_angle = z;
last_gyro_x_angle = x_gyro;
last_gyro_y_angle = y_gyro;
last_gyro_z_angle = z_gyro;
}
float base_x_gyro;
float base_y_gyro;
float base_z_gyro;
return error;
}
//Serial.println("Starting Calibration");
//Serial.println("Finishing Calibration");
}
//-------------------------MPU---------------------
// default at power-up:
// Gyro at 250 degrees second
// Acceleration at 2g
// Clock source at internal 8MHz
// The device is in sleep mode.
//
pinMode(dir1PinA,OUTPUT);
pinMode(dir2PinA,OUTPUT);
pinMode(speedPinA,OUTPUT);
pinMode(dir1PinB,OUTPUT);
pinMode(dir2PinB,OUTPUT);
pinMode(speedPinB,OUTPUT);
//----------------------MPU-----------------
void(* resetFunc) (void) = 0; //declare reset function @ address 0
//----------------------MPU-------------------
void loop() {
//------------------------MPU--------------------------
int error;
double dT;
accel_t_gyro_union accel_t_gyro;
/*
Serial.println(F(""));
Serial.println(F("MPU-6050"));
*/
/*
Serial.print(F("Read accel, temp and gyro, error = "));
Serial.println(error,DEC);
float accel_angle_z = 0;
//------------------------MPU-------------------------------------
//int a= (abs(angle_y))*1.56+80;
int a= map(abs(angle_y), 0, 45, 50, 255); // speed control on various slope
if (angle_y > 0) {
analogWrite(speedPinA, a);//Sets speed variable via PWM
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
analogWrite(speedPinB, a);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
}
if (angle_y < 0) {
analogWrite(speedPinA, a);
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
analogWrite(speedPinB, a);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
/*
void maju(){
analogWrite(speedPinA, 100);//Sets speed variable via PWM
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
analogWrite(speedPinB, 100);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
}
void mundur(){
analogWrite(speedPinA, 100);
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
analogWrite(speedPinB, 100);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
}
void kanan(){
analogWrite(speedPinA, 80);//Sets speed variable via PWM
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
analogWrite(speedPinB, 80);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
}
void kiri(){
analogWrite(speedPinA, 80);
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
analogWrite(speedPinB, 80);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
}
void henti(){
analogWrite(speedPinA, 0);
analogWrite(speedPinB, 0);
}
*/
//----------------------MPU------------------
int MPU6050_read(int start, uint8_t *buffer, int size)
{
int i, n, error;
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
n = Wire.write(start);
if (n != 1)
return (-10);
// --------------------------------------------------------
// MPU6050_write
//
// This is a common function to write multiple bytes to an I2C device.
//
// If only a single register is written,
// use the function MPU_6050_write_reg().
//
// Parameters:
// start : Start address, use a define for the register
// pData : A pointer to the data to write.
// size : The number of bytes to write.
//
// If only a single register is written, a pointer
// to the data has to be used, and the size is
// a single byte:
// int data = 0; // the data to write
// MPU6050_write (MPU6050_PWR_MGMT_1, &c, 1);
//
int MPU6050_write(int start, const uint8_t *pData, int size)
{
int n, error;
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
n = Wire.write(start); // write the start address
if (n != 1)
return (-20);
// --------------------------------------------------------
// MPU6050_write_reg
//
// An extra function to write a single register.
// It is just a wrapper around the MPU_6050_write()
// function, and it is only a convenient function
// to make it easier to write a single register.
//
int MPU6050_write_reg(int reg, uint8_t data)
{
int error;
return (error);
}
//-----------------------MPU-------------------
=============================================================
62. CONTINOUS SERVO MOTOR
#include <ContinuousServo.h>
ContinuousServo servo(10);
void setup()
{
}
void loop()
{
}
#include <ContinuousServo.h>
void setup()
{
Serial.begin(9600);
void stepDone()
{
Serial.print(F("Servo completed. Now at "));
Serial.print(servo.getSteps());
Serial.println(F(" steps."));
}
// Do nothing in loop
void loop()
{
}
#include <ContinuousServo.h>
ContinuousServo servo(10);
void setup()
{
Serial.begin(9600);
}
void loop()
{
servo.step(100, stepDone);
delay(5000);
servo.step(-100, stepDone);
delay(5000);
}
void stepDone()
{
Serial.print(F("Servo completed. Now at "));
Serial.print(servo.getSteps());
Serial.println(F(" steps."));
}
===============================================================
#include <ContinuousServo.h>
// Use this to try to get the steps forward and backwards to match
ContinuousServo servo(10, 564, 1733);
void setup()
{
Serial.begin(9600);
servo.step(steps, doneStepping);
}
void loop()
{
if (step != 0)
{
delay(2000);
servo.step(step, doneStepping);
step = 0;
}
}
void doneStepping()
{
Serial.println(F("Done stepping, switching direction"));
fwd = !fwd;
step = fwd ? steps : -steps;
}
---------------------------------------------------------------------------------------------------
// http://www.bajdi.com
// Rotating a continuous servo (tested with a SpringRC SM-S4306R)
#include <Servo.h>
void setup()
{
myservo.attach(10); // attaches the servo on pin 9 to the servo object
}
void loop()
{
myservo.write(45); // rotate counterclockwise full speed
delay(2000);
myservo.write(90); // stop
delay(100);
myservo.write(135); // rotate clockwise full speed
delay(2000);
myservo.write(90); // stop
delay(100);
myservo.write(80); // rotate very slowly counterclockwise
delay(2000);
myservo.write(90); // stop
delay(100);
myservo.write(100); // rotate very slowly clockwise
delay(2000);
}
=======================================================
#include <ContinuousServo.h>
ContinuousServo servo1(2);
ContinuousServo servo2(10);
void setup()
{
}
void loop()
{
======================================================
// http://www.bajdi.com
// Rotating a continuous servo (tested with a SpringRC SM-S4306R)
#include <Servo.h>
void setup()
{
myservo1.attach(10); // attaches the servo on pin 9 to the servo object
myservo2.attach(2);
void loop()
{
==================================================================
63. RF CONTROL 433 MHz
Transmitter sket
void loop(){
controller="1";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,1);
delay(2000);
controller="0";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,0);
delay(2000);
Receiver sket
digitalWrite(13,1);
}
if(buf[0]=='0'){
digitalWrite(13,0);
}
}
}
Receiver as Counter
digitalWrite(13,1);
Counter++;
Serial.println(Counter);
}
if(buf[0]=='0'){
digitalWrite(13,0);
Serial.println("OFF");
}
}
}
---------------------------------------------------------------------------------------------------
Transmitter
#include <VirtualWire.h>
void setup()
{
// Initialise the IO and ISR
vw_set_tx_pin(transmit_pin);
//vw_set_rx_pin(receive_pin);
//vw_set_ptt_pin(transmit_en_pin);
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec
}
byte count = 1;
void loop()
{
char msg[7] = {'h','e','l','l','o',' ','#'};
msg[6] = count;
digitalWrite(led_pin, HIGH); // Flash a light to show transmitting
vw_send((uint8_t *)msg, 7);
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(led_pin, LOW);
delay(1000);
count = count + 1;
}
Receiver
#include <VirtualWire.h>
void setup()
{
delay(1000);
Serial.begin(9600); // Debugging only
Serial.println("setup");
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
Trasmitter
#include <RCSwitch.h>
void setup() {
mySwitch.enableTransmit(12); // Using Pin #12
}
void loop() {
mySwitch.send("10000100011000000000010100");
delay(1000);
}
Receiver
/*
Simple example for receiving
http://code.google.com/p/rc-switch/
void setup() {
Serial.begin(9600);
mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2
}
void loop() {
if (mySwitch.available()) {
if (value == 0) {
Serial.print("Unknown encoding");
} else {
Serial.print("Received ");
Serial.print( mySwitch.getReceivedValue() ); //decimal number
Serial.print(" / ");
Serial.print( mySwitch.getReceivedBitlength() );
Serial.print("bit ");
Serial.print("Protocol: ");
Serial.println( mySwitch.getReceivedProtocol() );
}
mySwitch.resetAvailable();
}
}
==============================================================
65. KONTROL RF DENGAN KEYBOARD
Ini adalah dasar sebagai panduan jika Anda akan mengontrol switch jarak jauh dengan bantuan RF
module by keyboard serial.
Receiver
digitalWrite(13,1);
}
if(buf[0]=='2'){
digitalWrite(13,0);
}
if(buf[0]=='3'){
digitalWrite(13,1);
}
if(buf[0]=='4'){
digitalWrite(13,0);
}
if(buf[0]=='5'){
digitalWrite(13,1);
}
if(buf[0]=='6'){
digitalWrite(13,0);
}
}
}
Transmitter
}
*/
//-------------------------------------------------
void loop() {
if (Serial.available() > 0) {
int inByte = Serial.read();
int speed; // Local variable
switch (inByte) {
case '1':
controller="1";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,1);
//delay(2000);
break;
case '2':
controller="2";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,0);
//delay(2000);
break;
case '3':
controller="3";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,1);
//delay(2000);
break;
case '4':
controller="4";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,0);
//delay(2000);
break;
case '5':
controller="5";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,1);
//delay(2000);
break;
case '6':
controller="6";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,0);
//delay(2000);
break;
default:
// turn all the connections off if an unmapped key is pressed:
for (int thisPin = 2; thisPin < 11; thisPin++) {
digitalWrite(thisPin, LOW);
}
}
}
}
//-----------------------------------------------------------------
===============================================================
66. ACCELEROMETER MMA7455
Dengan akselerometer ini kita dapat mengukur sudut kemiringan dengan memanfaatkan percepatan
gravitasi sebagai acuan. Ada beberapa sket yang dapat kita pakai.
// MMA7455 Accelerometer
// ---------------------
//
// By arduino.cc user "Krodal".
// May 2012
// Open Source / Public Domain
//
// Fixes to union and type conversions by Arduino.cc user "Afroviking"
// August 2014
//
// Using Arduino 1.0.1
// It will not work with an older version, since Wire.endTransmission()
// uses a parameter to hold or release the I2C bus.
//
// Documentation:
// - The Freescale MMA7455L datasheet
// - The AN3468 Application Note (programming).
// - The AN3728 Application Note (calibrating offset).
//
// The MMA7455 can be used by writing and reading a single byte,
// but it is also capable to read and write multiple bytes.
//
// The accuracy is 10-bits.
//
#include <Wire.h>
// Status Register
#define MMA7455_DRDY MMA7455_D0
#define MMA7455_DOVR MMA7455_D1
#define MMA7455_PERR MMA7455_D2
// Control 1 Register
#define MMA7455_INTPIN MMA7455_D0
#define MMA7455_INTREG0 MMA7455_D1
#define MMA7455_INTREG1 MMA7455_D2
#define MMA7455_XDA MMA7455_D3
#define MMA7455_YDA MMA7455_D4
#define MMA7455_ZDA MMA7455_D5
#define MMA7455_THOPT MMA7455_D6
#define MMA7455_DFBW MMA7455_D7
// Control 2 Register
#define MMA7455_LDPL MMA7455_D0
#define MMA7455_PDPL MMA7455_D1
#define MMA7455_DRVO MMA7455_D2
void setup()
{
int error;
uint8_t c;
Serial.begin(9600);
Serial.println("Freescale MMA7455 accelerometer");
Serial.println("May 2012");
void loop()
{
uint16_t x,y,z, error;
double dX,dY,dZ;
Serial.print("error = ");
Serial.print(error, DEC);
Serial.print(", xyz g-forces = ");
Serial.print(dX, 3);
Serial.print(", ");
Serial.print(dY, 3);
Serial.print(", ");
Serial.print(dZ, 3);
Serial.println("");
delay(100);
}
// --------------------------------------------------------
// MMA7455_init
//
// Initialize the MMA7455.
// Set also the offset, assuming that the accelerometer is
// in flat horizontal position.
//
// Important notes about the offset:
// The sensor has internal registers to set an offset.
// But the offset could also be calculated by software.
// This function uses the internal offset registers
// of the sensor.
// That turned out to be bad idea, since setting the
// offset alters the actual offset of the sensor.
// A second offset calculation had to be implemented
// to fine tune the offset.
// Using software variables for the offset would be
// much better.
//
// The offset is influenced by the slightest vibration
// (like a computer on the table).
//
int MMA7455_init(void)
{
uint16_t x, y, z;
int error;
xyz_union xyz;
uint8_t c1, c2;
if (c1 != c2)
return (-99);
// The mode has just been set, and the sensor is activated.
// To get a valid reading, wait some time.
delay(100);
#define USE_INTERNAL_OFFSET_REGISTERS
#ifdef USE_INTERNAL_OFFSET_REGISTERS
#endif
// --------------------------------------------------------
// MMA7455_xyz
//
// Get the 'g' forces.
// The values are with integers as 64 per 'g'.
//
int MMA7455_xyz( uint16_t *pX, uint16_t *pY, uint16_t *pZ)
{
xyz_union xyz;
int error;
uint8_t c;
// Wait for status bit DRDY to indicate that
// all 3 axis are valid.
do
{
error = MMA7455_read (MMA7455_STATUS, &c, 1);
} while ( !bitRead(c, MMA7455_DRDY) && error == 0);
if (error != 0)
return (error);
// --------------------------------------------------------
// MMA7455_read
//
// This is a common function to read multiple bytes
// from an I2C device.
//
// It uses the boolean parameter for Wire.endTransMission()
// to be able to hold or release the I2C-bus.
// This is implemented in Arduino 1.0.1.
//
// Only this function is used to read.
// There is no function for a single byte.
//
int MMA7455_read(int start, uint8_t *buffer, int size)
{
int i, n, error;
Wire.beginTransmission(MMA7455_I2C_ADDRESS);
n = Wire.write(start);
if (n != 1)
return (-10);
// --------------------------------------------------------
// MMA7455_write
//
// This is a common function to write multiple bytes
// to an I2C device.
//
// Only this function is used to write.
// There is no function for a single byte.
//
int MMA7455_write(int start, const uint8_t *pData, int size)
{
int n, error;
Wire.beginTransmission(MMA7455_I2C_ADDRESS);
n = Wire.write(start); // write the start address
if (n != 1)
return (-20);
===========================================================
// MMA7455 Accelerometer
// ---------------------
//
// By arduino.cc user "Krodal".
// May 2012
// Open Source / Public Domain
//
// Fixes to union and type conversions by Arduino.cc user "Afroviking"
// August 2014
//
// Using Arduino 1.0.1
// It will not work with an older version, since Wire.endTransmission()
// uses a parameter to hold or release the I2C bus.
//
// Documentation:
// - The Freescale MMA7455L datasheet
// - The AN3468 Application Note (programming).
// - The AN3728 Application Note (calibrating offset).
//
// The MMA7455 can be used by writing and reading a single byte,
// but it is also capable to read and write multiple bytes.
//
// The accuracy is 10-bits.
//
#include <Wire.h>
// Status Register
#define MMA7455_DRDY MMA7455_D0
#define MMA7455_DOVR MMA7455_D1
#define MMA7455_PERR MMA7455_D2
// Control 2 Register
#define MMA7455_LDPL MMA7455_D0
#define MMA7455_PDPL MMA7455_D1
#define MMA7455_DRVO MMA7455_D2
void setup()
{
int error;
uint8_t c;
Serial.begin(9600);
Serial.println("Freescale MMA7455 accelerometer");
Serial.println("May 2012");
//Serial.print("error = ");
//Serial.print(error, DEC);
Serial.print("xyz g-forces = ");
Serial.print(dX, 3);
Serial.print(", ");
Serial.print(dY, 3);
Serial.print(", ");
Serial.print(dZ, 3);
Serial.print(" ");
Serial.print(s);
Serial.println("");
delay(100);
}
// --------------------------------------------------------
// MMA7455_init
//
// Initialize the MMA7455.
// Set also the offset, assuming that the accelerometer is
// in flat horizontal position.
//
// Important notes about the offset:
// The sensor has internal registers to set an offset.
// But the offset could also be calculated by software.
// This function uses the internal offset registers
// of the sensor.
// That turned out to be bad idea, since setting the
// offset alters the actual offset of the sensor.
// A second offset calculation had to be implemented
// to fine tune the offset.
// Using software variables for the offset would be
// much better.
//
// The offset is influenced by the slightest vibration
// (like a computer on the table).
//
int MMA7455_init(void)
{
uint16_t x, y, z;
int error;
xyz_union xyz;
uint8_t c1, c2;
if (c1 != c2)
return (-99);
// The mode has just been set, and the sensor is activated.
// To get a valid reading, wait some time.
delay(100);
#define USE_INTERNAL_OFFSET_REGISTERS
#ifdef USE_INTERNAL_OFFSET_REGISTERS
#endif
// --------------------------------------------------------
// MMA7455_xyz
//
// Get the 'g' forces.
// The values are with integers as 64 per 'g'.
//
int MMA7455_xyz( uint16_t *pX, uint16_t *pY, uint16_t *pZ)
{
xyz_union xyz;
int error;
uint8_t c;
// --------------------------------------------------------
// MMA7455_read
//
// This is a common function to read multiple bytes
// from an I2C device.
//
// It uses the boolean parameter for Wire.endTransMission()
// to be able to hold or release the I2C-bus.
// This is implemented in Arduino 1.0.1.
//
// Only this function is used to read.
// There is no function for a single byte.
//
int MMA7455_read(int start, uint8_t *buffer, int size)
{
int i, n, error;
Wire.beginTransmission(MMA7455_I2C_ADDRESS);
n = Wire.write(start);
if (n != 1)
return (-10);
// --------------------------------------------------------
// MMA7455_write
//
// This is a common function to write multiple bytes
// to an I2C device.
//
// Only this function is used to write.
// There is no function for a single byte.
//
int MMA7455_write(int start, const uint8_t *pData, int size)
{
int n, error;
Wire.beginTransmission(MMA7455_I2C_ADDRESS);
n = Wire.write(start); // write the start address
if (n != 1)
return (-20);
================================================================
=================================================================
67. MP3 SHIELD
#include <SPI.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <SFEMP3Shield.h>
SdFat sd;
SFEMP3Shield MP3player;
void setup() {
Serial.begin(9600);
==============================================================
68. THERMOCOUPLE
#include "max6675.h"
int ktcSO = 8;
int ktcCS = 9;
int ktcCLK = 10;
void setup() {
Serial.begin(9600);
// give the MAX a little time to settle
delay(500);
}
void loop() {
// basic readout test
Serial.print("Deg C = ");
Serial.print(ktc.readCelsius());
Serial.print("\t Deg F = ");
Serial.println(ktc.readFahrenheit());
delay(500);
}
69. MENGUKUR SUDUT MEMUTAR DENGAN MPU6050
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
MPU6050 mpu;
#define OUTPUT_READABLE_EULER
#define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6)
bool blinkState = false;
int pinSetting = 4;
int addr = 1;
float sudut = 0;
int sudutawal = 0;
// ================================================================
// === INTERRUPT DETECTION ROUTINE ===
// ================================================================
volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high
void dmpDataReady() {
mpuInterrupt = true;
}
// ================================================================
// === INITIAL SETUP ===
// ================================================================
void setup() {
pinMode(pinSetting, INPUT);
// join I2C bus (I2Cdev library doesn't do this automatically)
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
Wire.begin();
TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz)
#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
Fastwire::setup(400, true);
#endif
mpu.initialize();
devStatus = mpu.dmpInitialize();
// supply your own gyro offsets here, scaled for min sensitivity
mpu.setXGyroOffset(38);
mpu.setYGyroOffset(-91);
mpu.setZGyroOffset(46);
mpu.setZAccelOffset(1682); // 1688 factory default for my test chip
// make sure it worked (returns 0 if so)
if (devStatus == 0) {
mpu.setDMPEnabled(true);
// set our DMP Ready flag so the main loop() function knows it's okay to use it
Serial.println(F("DMP ready! Waiting for first interrupt..."));
dmpReady = true;
// ================================================================
// === MAIN PROGRAM LOOP ===
// ================================================================
void loop() {
// if programming failed, don't try to do anything
if (!dmpReady) return;
if(digitalRead(pinSetting) == HIGH){
//------------------------------------------------------------------------
// check for overflow (this should never happen unless our code is too inefficient)
if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
// reset so we can continue cleanly
mpu.resetFIFO();
//Serial.println(F("FIFO overflow!"));
// otherwise, check for DMP data ready interrupt (this should happen frequently)
} else if (mpuIntStatus & 0x02) {
// wait for correct available data length, should be a VERY short wait
while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
while (!eeprom_is_ready());
cli();
sudutawal = eeprom_read_word((uint16_t*)addr); // => sensorValue
sei();
Serial.print(sudut);
Serial.print(" ");
Serial.print(sudutawal);
Serial.print(" ");
hitung();
delay(100);
//------------------------------------------------------------------------
// check for overflow (this should never happen unless our code is too inefficient)
if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
// reset so we can continue cleanly
mpu.resetFIFO();
//Serial.println(F("FIFO overflow!"));
// otherwise, check for DMP data ready interrupt (this should happen frequently)
} else if (mpuIntStatus & 0x02) {
// wait for correct available data length, should be a VERY short wait
while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
/*if(eeprom_read_word((uint16_t*)addr) != sudut) {
eeprom_write_word((uint16_t*)addr, sudut);
}
sei();
*/
while (!eeprom_is_ready());
cli();
sudutawal = eeprom_read_word((uint16_t*)addr); // => sensorValue
sei();
Serial.print(sudut);
Serial.print(" ");
Serial.print(sudutawal);
Serial.print(" ");
hitung();
delay(100);
}
void hitung(){
if(((sudutawal >= -90) && (sudutawal <= 90)) || ((sudutawal >= -180) && (sudutawal < -90))){
int delta = abs(sudut-sudutawal);
Serial.println(delta);
}
else if((sudutawal > 90) && (sudutawal <= 180) && (sudut >= -180) && (sudut < 0)){
int delta = (360 + sudut-sudutawal);
Serial.println(delta);
}
else if((sudutawal >= -180) && (sudutawal < -90) && (sudut >= 0) && (sudut <= 180)){
int delta = (360 - sudut+sudutawal);
Serial.println(delta);
}
else if((sudutawal > 90) && (sudutawal <= 180) && (sudut >= 0) && (sudut <= 180)){
int delta = abs(sudut-sudutawal);
Serial.println(delta);
}
else{
Serial.println(" ");
}
=================================================================
70. MENGUKUR SUDUT MEMUTAR DENGAN MPU6050 (IR RESET)
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
MPU6050 mpu;
#define OUTPUT_READABLE_EULER
#define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6)
bool blinkState = false;
int pinSetting = 4;
#include <IRremote.h>
int RECV_PIN = 5;
IRrecv irrecv(RECV_PIN);
decode_results results;
int addr = 1;
float sudut = 0;
int sudutawal = 0;
// orientation/motion vars
Quaternion q; // [w, x, y, z] quaternion container
VectorInt16 aa; // [x, y, z] accel sensor measurements
VectorInt16 aaReal; // [x, y, z] gravity-free accel sensor measurements
VectorInt16 aaWorld; // [x, y, z] world-frame accel sensor measurements
VectorFloat gravity; // [x, y, z] gravity vector
float euler[3]; // [psi, theta, phi] Euler angle container
float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector
// ================================================================
// === INTERRUPT DETECTION ROUTINE ===
// ================================================================
volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high
void dmpDataReady() {
mpuInterrupt = true;
}
// ================================================================
// === INITIAL SETUP ===
// ================================================================
void setup() {
irrecv.enableIRIn();
pinMode(pinSetting, INPUT);
// join I2C bus (I2Cdev library doesn't do this automatically)
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
Wire.begin();
TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz)
#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
Fastwire::setup(400, true);
#endif
mpu.initialize();
devStatus = mpu.dmpInitialize();
// supply your own gyro offsets here, scaled for min sensitivity
mpu.setXGyroOffset(38);
mpu.setYGyroOffset(-91);
mpu.setZGyroOffset(46);
mpu.setZAccelOffset(1682); // 1688 factory default for my test chip
mpu.setDMPEnabled(true);
// set our DMP Ready flag so the main loop() function knows it's okay to use it
Serial.println(F("DMP ready! Waiting for first interrupt..."));
dmpReady = true;
// ================================================================
// === MAIN PROGRAM LOOP ===
// ================================================================
void loop() {
// if programming failed, don't try to do anything
if (!dmpReady) return;
if(irrecv.decode(&results)){
//------------------------------------------------------------------------
// check for overflow (this should never happen unless our code is too inefficient)
if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
// reset so we can continue cleanly
mpu.resetFIFO();
//Serial.println(F("FIFO overflow!"));
// otherwise, check for DMP data ready interrupt (this should happen frequently)
} else if (mpuIntStatus & 0x02) {
// wait for correct available data length, should be a VERY short wait
while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
while (!eeprom_is_ready());
cli();
sudutawal = eeprom_read_word((uint16_t*)addr); // => sensorValue
sei();
Serial.print(sudut);
Serial.print(" ");
Serial.print(sudutawal);
Serial.print(" ");
hitung();
irrecv.resume();
delay(100);
}else{
//------------------------------------------------------------------------
// check for overflow (this should never happen unless our code is too inefficient)
if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
// reset so we can continue cleanly
mpu.resetFIFO();
//Serial.println(F("FIFO overflow!"));
// otherwise, check for DMP data ready interrupt (this should happen frequently)
} else if (mpuIntStatus & 0x02) {
// wait for correct available data length, should be a VERY short wait
while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
/*if(eeprom_read_word((uint16_t*)addr) != sudut) {
eeprom_write_word((uint16_t*)addr, sudut);
}
sei();
*/
while (!eeprom_is_ready());
cli();
sudutawal = eeprom_read_word((uint16_t*)addr); // => sensorValue
sei();
Serial.print(sudut);
Serial.print(" ");
Serial.print(sudutawal);
Serial.print(" ");
hitung();
delay(100);
}
void hitung(){
if(((sudutawal >= -90) && (sudutawal <= 90)) || ((sudutawal >= -180) && (sudutawal < -90))){
int delta = abs(sudut-sudutawal);
Serial.println(delta);
}
else if((sudutawal > 90) && (sudutawal <= 180) && (sudut >= -180) && (sudut < 0)){
int delta = (360 + sudut-sudutawal);
Serial.println(delta);
}
else if((sudutawal >= -180) && (sudutawal < -90) && (sudut >= 0) && (sudut <= 180)){
int delta = (360 - sudut+sudutawal);
Serial.println(delta);
}
else if((sudutawal > 90) && (sudutawal <= 180) && (sudut >= 0) && (sudut <= 180)){
int delta = abs(sudut-sudutawal);
Serial.println(delta);
}
else{
Serial.println(" ");
}
}
71. MENGENDALIKAN CONTINOUS MOTOR SERVO DENGAN IR REMOTE
#include <IRremote.h>
#include <Servo.h>
Servo myservo1; // create servo object to control a servo
Servo myservo2;
int RECV_PIN = 5;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
myservo1.attach(10);
myservo2.attach(11);
irrecv.enableIRIn(); // Start the receiver
}
int on = 0;
unsigned long last = millis();
void loop() {
if (irrecv.decode(&results)) {
if (results.value == 0xEF10E01F) {
kanan();
}
else if (results.value == 0xEF10609F) {
kiri();
}
else if (results.value == 0xEF1054AB) {
henti();
}
else if (results.value == 0xEF1020DF) {
maju();
}
else if (results.value == 0xEF10A05F) {
mundur();
}
irrecv.resume(); // Receive the next value
}
}
void kanan(){
myservo1.write(80);
myservo2.write(80);
delay(1000);
henti();
irrecv.resume();
}
void kiri(){
myservo1.write(100);
myservo2.write(100);
delay(1000);
henti();
irrecv.resume();
}
void henti(){
myservo1.write(90);
myservo2.write(90);
irrecv.resume();
}
void maju(){
myservo1.write(110);
myservo2.write(70);
irrecv.resume();
}
void mundur(){
myservo1.write(70);
myservo2.write(110);
irrecv.resume();
atau
/*
source: www.electroschematics.com
You'll need to change the led pins and the codes
accordingly to your configuration and IR remote
552656927
552600317
552624287
*/
#include <IRremote.h>
#include <Servo.h>
Servo myservo1; // create servo object to control a servo
Servo myservo2;
int RECV_PIN = 5; // the pin where you connect the output pin of TSOP4838
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
myservo1.attach(10);
myservo2.attach(11);
Serial.begin(9600); // you can comment this line
irrecv.enableIRIn(); // Start the receiver
void loop() {
if (irrecv.decode(&results)) {
unsigned int value = results.value;
switch(value) {
case code1:
kanan();
break;
case code2:
kiri();
break;
case code3:
henti();
break;
case code4:
maju();
break;
case code5:
mundur();
break;
}
Serial.println(value); // you can comment this line
irrecv.resume(); // Receive the next value
}
}
void kanan(){
myservo1.write(80);
myservo2.write(80);
delay(1000);
henti();
irrecv.resume();
}
void kiri(){
myservo1.write(100);
myservo2.write(100);
delay(1000);
henti();
irrecv.resume();
}
void henti(){
myservo1.write(90);
myservo2.write(90);
irrecv.resume();
}
void maju(){
myservo1.write(110);
myservo2.write(70);
irrecv.resume();
}
void mundur(){
myservo1.write(70);
myservo2.write(110);
irrecv.resume();
}
72. MENGENDALIKAN CONTINOUS MOTOR SERVO DENGAN MPU DAN IR REMOTE
#include <IRremote.h>
#include <Servo.h>
Servo myservo1; // create servo object to control a servo
Servo myservo2;
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <EEPROM.h>
int value;
int addr0 = 1;
int addr1 = 2;
int a;
byte b;
int RECV_PIN = 5;
IRrecv irrecv(RECV_PIN);
decode_results results;
//#include <avr/interrupt.h>
//#include <avr/eeprom.h>
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
MPU6050 mpu;
#define OUTPUT_READABLE_EULER
#define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6)
bool blinkState = false;
float sudut = 0;
int sudutawal = 0;
// orientation/motion vars
Quaternion q; // [w, x, y, z] quaternion container
VectorInt16 aa; // [x, y, z] accel sensor measurements
VectorInt16 aaReal; // [x, y, z] gravity-free accel sensor measurements
VectorInt16 aaWorld; // [x, y, z] world-frame accel sensor measurements
VectorFloat gravity; // [x, y, z] gravity vector
float euler[3]; // [psi, theta, phi] Euler angle container
float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector
// ================================================================
// === INTERRUPT DETECTION ROUTINE ===
// ================================================================
volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high
void dmpDataReady() {
mpuInterrupt = true;
}
void setup()
{
myservo1.attach(10);
myservo2.attach(11);
Serial.begin(9600); // you can comment this line
irrecv.enableIRIn(); // Start the receiver
mpu.initialize();
devStatus = mpu.dmpInitialize();
// supply your own gyro offsets here, scaled for min sensitivity
mpu.setXGyroOffset(38);
mpu.setYGyroOffset(-91);
mpu.setZGyroOffset(46);
mpu.setZAccelOffset(1682); // 1688 factory default for my test chip
mpu.setDMPEnabled(true);
// set our DMP Ready flag so the main loop() function knows it's okay to use it
Serial.println(F("DMP ready! Waiting for first interrupt..."));
dmpReady = true;
void loop() {
// if programming failed, don't try to do anything
if (!dmpReady) return;
if (irrecv.decode(&results)) {
//------------------------------------------------------------------------
// check for overflow (this should never happen unless our code is too inefficient)
if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
// reset so we can continue cleanly
mpu.resetFIFO();
//Serial.println(F("FIFO overflow!"));
// otherwise, check for DMP data ready interrupt (this should happen frequently)
} else if (mpuIntStatus & 0x02) {
// wait for correct available data length, should be a VERY short wait
while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
if(eeprom_read_word((uint16_t*)addr1) != sudut) {
eeprom_update_word((uint16_t*)addr1, sudut);
}
sei();
//kanan();
break;
case code2:
a=2;
EEPROM.write(addr0, a);;
while (!eeprom_is_ready());
cli();
if(eeprom_read_word((uint16_t*)addr1) != sudut) {
eeprom_update_word((uint16_t*)addr1, sudut);
}
sei();
//kiri();
break;
case code3:
a=3;
EEPROM.write(addr0, a);
while (!eeprom_is_ready());
cli();
if(eeprom_read_word((uint16_t*)addr1) != sudut) {
eeprom_update_word((uint16_t*)addr1, sudut);
}
sei();
henti();
break;
case code4:
a=4;
EEPROM.write(addr0, a);
while (!eeprom_is_ready());
cli();
if(eeprom_read_word((uint16_t*)addr1) != sudut) {
eeprom_update_word((uint16_t*)addr1, sudut);
}
sei();
maju();
break;
case code5:
a=5;
EEPROM.write(addr0, a);
while (!eeprom_is_ready());
cli();
if(eeprom_read_word((uint16_t*)addr1) != sudut) {
eeprom_update_word((uint16_t*)addr1, sudut);
}
sei();
mundur();
break;
}
//Serial.println(value); // you can comment this line
irrecv.resume(); // Receive the next value
}
else{
//------------------------------------------------------------------------
// check for overflow (this should never happen unless our code is too inefficient)
if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
// reset so we can continue cleanly
mpu.resetFIFO();
//Serial.println(F("FIFO overflow!"));
// otherwise, check for DMP data ready interrupt (this should happen frequently)
} else if (mpuIntStatus & 0x02) {
// wait for correct available data length, should be a VERY short wait
while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
if(((sudutawal >= -90) && (sudutawal <= 90)) || ((sudutawal >= -180) && (sudutawal < -90))){
int delta = abs(sudut-sudutawal);
if (delta <=90){
myservo1.write(80);
myservo2.write(80);
}
else if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.print(delta);
}
else if((sudutawal > 90) && (sudutawal <= 180) && (sudut >= -180) && (sudut < 0)){
int delta = (360 + sudut-sudutawal);
if (delta <=90){
myservo1.write(80);
myservo2.write(80);
}
else if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.print(delta);
}
else if((sudutawal >= -180) && (sudutawal < -90) && (sudut >= 0) && (sudut <= 180)){
int delta = (360 - sudut+sudutawal);
if (delta <=90){
myservo1.write(80);
myservo2.write(80);
}
else if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.print(delta);
}
else if((sudutawal > 90) && (sudutawal <= 180) && (sudut >= 0) && (sudut <= 180)){
int delta = abs(sudut-sudutawal);
if (delta <=90){
myservo1.write(80);
myservo2.write(80);
}
else if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.print(delta);
}
else{
Serial.print(" ");
//irrecv.resume();
}
}
else if(b==2){
if(((sudutawal >= -90) && (sudutawal <= 90)) || ((sudutawal >= -180) && (sudutawal < -90))){
int delta = abs(sudut-sudutawal);
if (delta <=90){
myservo1.write(100);
myservo2.write(100);
}
else if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.print(delta);
}
else if((sudutawal > 90) && (sudutawal <= 180) && (sudut >= -180) && (sudut < 0)){
int delta = (360 + sudut-sudutawal);
if (delta <=90){
myservo1.write(100);
myservo2.write(100);
}
else if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.print(delta);
}
else if((sudutawal >= -180) && (sudutawal < -90) && (sudut >= 0) && (sudut <= 180)){
int delta = (360 - sudut+sudutawal);
if (delta <=90){
myservo1.write(100);
myservo2.write(100);
}
else if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.print(delta);
}
else if((sudutawal > 90) && (sudutawal <= 180) && (sudut >= 0) && (sudut <= 180)){
int delta = abs(sudut-sudutawal);
if (delta <=90){
myservo1.write(100);
myservo2.write(100);
}
else if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.print(delta);
}
else{
Serial.print(" ");
//irrecv.resume();
}
}
}
void kanan(){
if(((sudutawal >= -90) && (sudutawal <= 90)) || ((sudutawal >= -180) && (sudutawal < -90))){
int delta = abs(sudut-sudutawal);
if (delta <=90){
myservo1.write(80);
myservo2.write(80);
}
if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.println(delta);
}
else if((sudutawal > 90) && (sudutawal <= 180) && (sudut >= -180) && (sudut < 0)){
int delta = (360 + sudut-sudutawal);
if (delta <=90){
myservo1.write(80);
myservo2.write(80);
}
if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.println(delta);
}
else if((sudutawal >= -180) && (sudutawal < -90) && (sudut >= 0) && (sudut <= 180)){
int delta = (360 - sudut+sudutawal);
if (delta <=90){
myservo1.write(80);
myservo2.write(80);
}
if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.println(delta);
}
else if((sudutawal > 90) && (sudutawal <= 180) && (sudut >= 0) && (sudut <= 180)){
int delta = abs(sudut-sudutawal);
if (delta <=90){
myservo1.write(80);
myservo2.write(80);
}
if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.println(delta);
}
else{
Serial.println(" ");
}
void kiri(){
if(((sudutawal >= -90) && (sudutawal <= 90)) || ((sudutawal >= -180) && (sudutawal < -90))){
int delta = abs(sudut-sudutawal);
if (delta <=90){
myservo1.write(100);
myservo2.write(100);
}
if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.println(delta);
}
else if((sudutawal > 90) && (sudutawal <= 180) && (sudut >= -180) && (sudut < 0)){
int delta = (360 + sudut-sudutawal);
if (delta <=90){
myservo1.write(100);
myservo2.write(100);
}
if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.println(delta);
}
else if((sudutawal >= -180) && (sudutawal < -90) && (sudut >= 0) && (sudut <= 180)){
int delta = (360 - sudut+sudutawal);
if (delta <=90){
myservo1.write(100);
myservo2.write(100);
}
if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.println(delta);
}
else if((sudutawal > 90) && (sudutawal <= 180) && (sudut >= 0) && (sudut <= 180)){
int delta = abs(sudut-sudutawal);
if (delta <=90){
myservo1.write(100);
myservo2.write(100);
}
if (delta > 90){
myservo1.write(90);
myservo2.write(90);
}
Serial.println(delta);
}
else{
Serial.println(" ");
}
}
void henti(){
myservo1.write(90);
myservo2.write(90);
irrecv.resume();
}
void maju(){
myservo1.write(110);
myservo2.write(70);
irrecv.resume();
}
void mundur(){
myservo1.write(71);
myservo2.write(110);
irrecv.resume();
}
73. WATERING PLANT
#define trigger 11
void setup() {
Serial.begin(9600);
pinMode(trigger, OUTPUT);
}
void loop() {
int sensorValue0 = analogRead(A0);
}
if (sensorValue0 >= 500) {
analogWrite(trigger, 0);
}
Serial.println(sensorValue0);
}
74. RAIN DETECTOR
int nRainDigitalIn = 2;
int nRainVal;
boolean bIsRaining = false;
String strRaining;
void setup() {
Serial.begin(9600);
pinMode(2,INPUT);
}
void loop() {
nRainVal = analogRead(A0);
bIsRaining = !(digitalRead(nRainDigitalIn)); //Cheks Digital Pin 2, Output D0
Serial.print("Raining: ");
Serial.print(strRaining);
Serial.print(" Moisture Level: ");
Serial.println(nRainVal);
delay(100);
}
=======================================================================
/*
* Arduino Rain Sensor Alarm
* Realized using a pre-wired rain sensor module
* Author: T.K.Hareendran
* Prototyped &Tested at Technode Protolabz /1:04 AM 7/26/2015
* Source: http://www.electroschematics.com
*/
int rainSensePin= 0; // analog pin 0 - sensor i/p
int alertPin= 8; // digital pin 8 - alert o/p
int curCounter= 0; // current counter - goes up by 1 every second while sensing
void setup(){
Serial.begin(9600);
pinMode(alertPin, OUTPUT);
pinMode(rainSensePin, INPUT);
}
void loop(){
int rainSenseReading = analogRead(rainSensePin);
Serial.println(rainSenseReading); // use this for serial monitoring if available
delay(100); // relax
// check to see how long it is raining at the threshold level
// rain strength value from 0 - 1023
// heavy rain -to- no rain.
if (curCounter >= 30){ // end of the time delay
digitalWrite(alertPin, HIGH); //raise an alert after x time
}
================================================================
void setup(){
Serial.begin(9600);
pinMode(buzzerout, OUTPUT);
pinMode(rainsense, INPUT);
}
void loop(){
int rainSenseReading = analogRead(rainsense);
Serial.println(rainSenseReading); // serial monitoring message
delay(50);// this variable fo adjust counter interval
// from heavy rain - no rain.
if (countval >= 35){
Serial.print("Heavy rain");
analogWrite(buzzerout, 150); //raise an alert after x time
}
//raining for long duration rise buzzer sound
// there is no rain then reset the counter value
if (rainSenseReading <350){
countval++; // increment count value
}
else if (rainSenseReading >350) { // if not raining
digitalWrite(buzzerout, LOW); // turn off buzzer
countval = 0; // reset count to 0
}
delay(50); //this variable fo adjust counter interval
}
-----------------------------------------------------------------------------------------------------------------
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
if (pirState == LOW) {
// we have just turned on
Serial.println("Motion detected!");
// We only want to print on the output change, not state
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
if (pirState == HIGH){
// we have just turned of
Serial.println("Motion ended!");
// We only want to print on the output change, not state
pirState = LOW;
}
}
}
-------------------------------------------------------------------------------------------------------------
/*
* //////////////////////////////////////////////////
* //making sense of the Parallax PIR sensor's output
* //////////////////////////////////////////////////
*
* Switches a LED according to the state of the sensors output pin.
* Determines the beginning and end of continuous motion sequences.
*
* @author: Kristian Gohlke / krigoo (_) gmail (_) com / http://krx.at
* @date: 3. September 2006
*
* kr1 (cleft) 2006
* released under a creative commons "Attribution-NonCommercial-ShareAlike 2.0" license
* http://creativecommons.org/licenses/by-nc-sa/2.0/de/
*
*
* The Parallax PIR Sensor is an easy to use digital infrared motion sensor module.
* (http://www.parallax.com/detail.asp?product_id=555-28027)
*
* The sensor's output pin goes to HIGH if motion is present.
* However, even if motion is present it goes to LOW from time to time,
* which might give the impression no motion is present.
* This program deals with this issue by ignoring LOW-phases shorter than a given time,
* assuming continuous motion is present during these phases.
*
*/
/////////////////////////////
//VARS
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;
int pirPin = 7; //the digital pin connected to the PIR sensor's output
int ledPin = 13;
/////////////////////////////
//SETUP
void setup(){
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(pirPin, LOW);
////////////////////////////
//LOOP
void loop(){
if(digitalRead(pirPin) == HIGH){
digitalWrite(ledPin, HIGH); //the led visualizes the sensors output pin state
if(lockLow){
//makes sure we wait for a transition to LOW before any further output is made:
lockLow = false;
Serial.println("---");
Serial.print("motion detected at ");
Serial.print(millis()/1000);
Serial.println(" sec");
delay(50);
}
takeLowTime = true;
}
if(digitalRead(pirPin) == LOW){
digitalWrite(ledPin, LOW); //the led visualizes the sensors output pin state
if(takeLowTime){
lowIn = millis(); //save the time of the transition from high to LOW
takeLowTime = false; //make sure this is only done at the start of a LOW phase
}
//if the sensor is low for more than the given pause,
//we assume that no more motion is going to happen
if(!lockLow && millis() - lowIn > pause){
//makes sure this block of code is only executed again after
//a new motion sequence has been detected
lockLow = true;
Serial.print("motion ended at "); //output
Serial.print((millis() - pause)/1000);
Serial.println(" sec");
delay(50);
}
}
}
=================================================================
//int rainsense= 0; // analog sensor input pin 0
const int pinSpeaker = 11; // buzzer output
//int countval= 0; // counter value starting from 0
#define NOTE_C4 262
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
/////////////////////////////
//VARS
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;
int pirPin = 7; //the digital pin connected to the PIR sensor's output
int ledPin = 13;
/////////////////////////////
//SETUP
void setup(){
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(pirPin, LOW);
pinMode(pinSpeaker, OUTPUT);
////////////////////////////
//LOOP
void loop(){
if(digitalRead(pirPin) == HIGH){
digitalWrite(ledPin, HIGH); //the led visualizes the sensors output pin state
alarm();
if(lockLow){
//makes sure we wait for a transition to LOW before any further output is made:
lockLow = false;
Serial.println("---");
Serial.print("motion detected at ");
Serial.print(millis()/1000);
Serial.println(" sec");
delay(50);
}
takeLowTime = true;
}
if(digitalRead(pirPin) == LOW){
digitalWrite(ledPin, LOW); //the led visualizes the sensors output pin state
noTone(pinSpeaker);
if(takeLowTime){
lowIn = millis(); //save the time of the transition from high to LOW
takeLowTime = false; //make sure this is only done at the start of a LOW phase
}
//if the sensor is low for more than the given pause,
//we assume that no more motion is going to happen
if(!lockLow && millis() - lowIn > pause){
//makes sure this block of code is only executed again after
//a new motion sequence has been detected
lockLow = true;
Serial.print("motion ended at "); //output
Serial.print((millis() - pause)/1000);
Serial.println(" sec");
delay(50);
}
}
}
void alarm(){
tone(pinSpeaker,NOTE_C4, 500);
delay(500);
tone(pinSpeaker,NOTE_D4, 500);
delay(500);
}
---------------------------------------------------------------------------------------------------------
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
pinMode(pinSpeaker, OUTPUT);
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
playTone(300, 160);
delay(150);
if (pirState == LOW) {
// we have just turned on
Serial.println("Motion detected!");
// We only want to print on the output change, not state
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
playTone(0, 0);
delay(300);
if (pirState == HIGH){
// we have just turned of
Serial.println("Motion ended!");
// We only want to print on the output change, not state
pirState = LOW;
}
}
}
// duration in mSecs, frequency in hertz
void playTone(long duration, int freq) {
duration *= 1000;
int period = (1.0 / freq) * 1000000;
long elapsed_time = 0;
while (elapsed_time < duration) {
digitalWrite(pinSpeaker,HIGH);
delayMicroseconds(period / 2);
digitalWrite(pinSpeaker, LOW);
delayMicroseconds(period / 2);
elapsed_time += (period);
}
}
===================================================================
76. SAKLAR SENTUH
#include <CapacitiveSensor.h>
int OUTPUT_PIN = 11; //PWM pin
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); // 10M resistor between pins 4 & 2, pin 2 is
sensor pin, add a wire and or foil if desired
void setup() {
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an
example
Serial.begin(9600);
pinMode(OUTPUT_PIN, OUTPUT);
}
int on = 0;
unsigned long last = millis();
void loop() {
long start = millis();
long total1 = cs_4_2.capacitiveSensor(30);
if (total1 >= 1000) {//this value can be adjusted for get desired sensitivity
//==============================
if (millis() - last > 250) {
on = !on;
analogWrite(OUTPUT_PIN, on ? 255 : 0);
//digitalWrite(OUTPUT_PIN, on ? HIGH : LOW); if do not want adjustable speed
}
last = millis();
//===================================================
}
Serial.println(total1);
delay(100);
}
77. SENSOR INFRAMERAH
void setup() {
pinMode(LED, OUTPUT);
pinMode(isObstaclePin, INPUT);
Serial.begin(9600);
void loop() {
isObstacle = digitalRead(isObstaclePin);
if (isObstacle == LOW)
{
Serial.println("OBSTACLE!!, OBSTACLE!!");
digitalWrite(LED, HIGH);
}
else
{
Serial.println("clear");
digitalWrite(LED, LOW);
}
delay(200);
}
78. PENGUKURAN TEGANGAN DC, KUAT ARUS, DAYA
#include <Wire.h>
#include <Adafruit_INA219.h> // You will need to download this library
void setup(void)
{
Serial.begin(9600);
sensor219.begin();
}
void loop(void)
{
float busVoltage = 0;
float current = 0; // Measure in milli amps
float power = 0;
busVoltage = sensor219.getBusVoltage_V();
current = sensor219.getCurrent_mA();
power = busVoltage * (current); // Calculate the Power
Serial.print("Bus Voltage: ");
Serial.print(busVoltage);
Serial.print(" V ");
Serial.print("Current: ");
Serial.print(current);
Serial.print(" mA ");
Serial.print("Power: ");
Serial.print(power);
Serial.println(" mW");
//Serial.println("");
delay(1000);
}
----------------------------------------------------------------------------------------------------------
#include <Wire.h>
#include <Adafruit_INA219.h>
Adafruit_INA219 ina219;
void setup()
{
uint32_t currentFrequency;
Serial.begin(9600);
Serial.println("Hello!");
Serial.println("Measuring voltage and current with INA219 ...");
ina219.begin();
pinMode(2,OUTPUT);
}
void loop()
{
digitalWrite(2,HIGH);
float shuntvoltage = 0;
float busvoltage = 0;
float current_mA = 0;
float loadvoltage = 0;
float power = 0;
shuntvoltage = ina219.getShuntVoltage_mV();
busvoltage = ina219.getBusVoltage_V();
current_mA = ina219.getCurrent_mA();
loadvoltage = busvoltage + (shuntvoltage / 1000);
power = current_mA * loadvoltage;
Serial.print("Bus Voltage: ");
Serial.print(busvoltage);
Serial.print(" V ");
Serial.print("Shunt Voltage: ");
Serial.print(shuntvoltage);
Serial.print(" mV ");
Serial.print("Load Voltage: ");
Serial.print(loadvoltage);
Serial.print(" V ");
Serial.print("Current: ");
Serial.print(current_mA);
Serial.print(" mA ");
Serial.print("Power: ");
Serial.print(power);
Serial.print(" mW");
Serial.println("");
delay(1000);
}
79. ETHERNET SHIELD
Untuk dapat menggunakan ethernet shield kita harus mendapatkan IP address dahulu. Sambungkan
kabel LAN ke shield dan upload sket di bawah, IP dapat kita baca pada serial monitor. Pin yang
dipakai ethernet adalah pin 10, 11, 12, 13, jadi pin-pin tersebut tidak dapat digunakan lagi.
/*
DHCP-based IP printer
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
*/
#include <SPI.h>
#include <Ethernet.h>
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
// this check is only needed on the Leonardo:
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
void loop() {
===============================================================
80. MENYALAKAN LED VIA BROWSER
Sket di bawah ini adalah menyalakan dan mematikan lampu LED melalui jaringan LAN lokal
/*
Web Server Demo
thrown together by Randy Sarafan
To turn it on:
http://your-IP-address/$1
To turn it off:
http://your-IP-address/$2
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Connect an LED to pin D2 and put it in series with a 220 ohm resistor to ground
Based almost entirely upon Web Server by Tom Igoe and David Mellis
Edit history:
created 18 Dec 2009
by David A. Mellis
modified 4 Sep 2010
by Tom Igoe
*/
#include <SPI.h>
#include <Ethernet.h>
boolean incoming = 0;
void setup()
{
pinMode(2, OUTPUT);
void loop()
{
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if(c == '1'){
Serial.println("ON");
digitalWrite(2, HIGH);
}
if(c == '2'){
Serial.println("OFF");
digitalWrite(2, LOW);
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}
================================================================
81. SWITCH LED DAN SERVO MOTOR VIA HTML
Pada sket di bawah adalah mendemonstrasikan pengontrolan LED dan servo motor via halaman
HTML. Untuk membuka halaman web, ketikkan http://192.168.1.126 , atau sesuai IP address yang
digunakan.
/*
Created by Rui Santos
Visit: http://randomnerdtutorials.com for more arduino projects
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
int led = 2;
Servo microservo;
int pos = 0;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 126 }; // ip in lan (that's what you need to use in your
browser. ("192.168.1.178")
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
String readString;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
pinMode(led, OUTPUT);
microservo.attach(7);
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
delay(1);
//stopping client
client.stop();
//controls the Arduino if you press the buttons
if (readString.indexOf("?button1on") >0){
digitalWrite(led, HIGH);
}
if (readString.indexOf("?button1off") >0){
digitalWrite(led, LOW);
}
if (readString.indexOf("?button2on") >0){
for(pos = 0; pos < 180; pos += 3) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
microservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
if (readString.indexOf("?button2off") >0){
for(pos = 180; pos>=1; pos-=3) // goes from 180 degrees to 0 degrees
{
microservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
//clearing string for next read
readString="";
}
}
}
}
}
82. MEMBACA INPUT ANALOG VIA BROWSER
Pada sket di bawah adalah pembacaan signal analog melalui web browser. Untuk membuka
halaman web, ketikkan http://192.168.1.126 , atau sesuai IP address yang digunakan.
/*
Web Server
A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)
*/
#include <SPI.h>
#include <Ethernet.h>
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the
response
client.println("Refresh: 1"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("<br />");
}
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}
83. ETHERNET SHIELD MULTI SWITCH
Pada sket ini didemonstrasikan penggunaan ethernet shield untuk menyalahan atau mematikan
beberapa LED. Untuk penerapan yang lebih lanjut LED ini dapat diganti dengan relay, yang
selanjutnya dari relay ini kita dapat mengendalikan alat-alat listrik dengan tegangan lebih tinggi.
/*
Created by Rui Santos
Visit: http://randomnerdtutorials.com for more arduino projects
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 8;
int led7 = 9;
int led8 = 7;
Servo microservo;
int pos = 0;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 126 }; // ip in lan (that's what you need to use in your
browser. ("192.168.1.178")
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
String readString;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
microservo.attach(14);
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
client.println("<TITLE>WEB SWITCH</TITLE>");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<H1>WEB SWITCH</H1>");
client.println("<hr />");
client.println("<br />");
//client.println("<H2>Arduino with Ethernet Shield</H2>");
client.println("<br />");
client.println("<a href=\"/?button1on\"\">LAMPU 1 ON</a>");
//client.println("<a>|</a>");
client.println("<a href=\"/?button2on\"\">LAMPU 2 ON</a>");
client.println("<a href=\"/?button3on\"\">LAMPU 3 ON</a>");
client.println("<a href=\"/?button4on\"\">LAMPU 4 ON</a>");
client.println("<a href=\"/?button5on\"\">LAMPU 5 ON</a>");
client.println("<a href=\"/?button6on\"\">LAMPU 6 ON</a>");
client.println("<a href=\"/?button7on\"\">LAMPU 7 ON</a>");
client.println("<a href=\"/?button8on\"\">LAMPU 8 ON</a>");
client.println("<br />");
client.println("<br />");
client.println("<a href=\"/?button1off\"\">LAMPU 1 OFF</a>");
client.println("<a href=\"/?button2off\"\">LAMPU 2 OFF</a>");
client.println("<a href=\"/?button3off\"\">LAMPU 3 OFF</a>");
client.println("<a href=\"/?button4off\"\">LAMPU 4 OFF</a>");
client.println("<a href=\"/?button5off\"\">LAMPU 5 OFF</a>");
client.println("<a href=\"/?button6off\"\">LAMPU 6 OFF</a>");
client.println("<a href=\"/?button7off\"\">LAMPU 7 OFF</a>");
client.println("<a href=\"/?button8off\"\">LAMPU 8 OFF</a>");
client.println("<br />");
client.println("<br />");
client.println("<a href=\"/?button9on\"\">Rotate Left</a>");
client.println("<a href=\"/?button9off\"\">Rotate Right</a><br />");
client.println("<br />");
client.println("<hr />");
//client.println("<p>Created by Rui Santos. Visit http://randomnerdtutorials.com for more
projects!</p>");
client.println("<br />");
client.println("</BODY>");
client.println("</HTML>");
delay(1);
//stopping client
client.stop();
//controls the Arduino if you press the buttons
if (readString.indexOf("?button1on") >0){
digitalWrite(led1, HIGH);
}
if (readString.indexOf("?button1off") >0){
digitalWrite(led1, LOW);
}
if (readString.indexOf("?button2on") >0){
digitalWrite(led2, HIGH);
}
if (readString.indexOf("?button2off") >0){
digitalWrite(led2, LOW);
}
if (readString.indexOf("?button3on") >0){
digitalWrite(led3, HIGH);
}
if (readString.indexOf("?button3off") >0){
digitalWrite(led3, LOW);
}
if (readString.indexOf("?button4on") >0){
digitalWrite(led4, HIGH);
}
if (readString.indexOf("?button4off") >0){
digitalWrite(led4, LOW);
}
if (readString.indexOf("?button5on") >0){
digitalWrite(led5, HIGH);
}
if (readString.indexOf("?button5off") >0){
digitalWrite(led5, LOW);
}
if (readString.indexOf("?button6on") >0){
digitalWrite(led6, HIGH);
}
if (readString.indexOf("?button6off") >0){
digitalWrite(led6, LOW);
}
if (readString.indexOf("?button7on") >0){
digitalWrite(led7, HIGH);
}
if (readString.indexOf("?button7off") >0){
digitalWrite(led7, LOW);
}
if (readString.indexOf("?button8on") >0){
digitalWrite(led8, HIGH);
}
if (readString.indexOf("?button8off") >0){
digitalWrite(led8, LOW);
}
if (readString.indexOf("?button9on") >0){
for(pos = 0; pos < 180; pos += 3) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
microservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
if (readString.indexOf("?button9off") >0){
for(pos = 180; pos>=1; pos-=3) // goes from 180 degrees to 0 degrees
{
microservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
//clearing string for next read
readString="";
}
}
}
}
}
===================================================================
Sket lain :
/*
Created by Rui Santos
Visit: http://randomnerdtutorials.com for more arduino projects
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 8;
int led7 = 9;
int led8 = 7;
Servo microservo;
int pos = 0;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 126 }; // ip in lan (that's what you need to use in your
browser. ("192.168.1.178")
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
String readString;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
microservo.attach(14);
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
client.println("<TITLE>WEB SWITCH</TITLE>");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<H1>WEB SWITCH</H1>");
client.println("<hr />");
client.println("<br />");
//client.println("<H2>Arduino with Ethernet Shield</H2>");
client.println("<br />");
client.println("<a href=\"/?button1on\"\">LAMPU 1 ON</a>");
//client.println("<a>|</a>");
client.println("<a href=\"/?button2on\"\">LAMPU 2 ON</a>");
client.println("<a href=\"/?button3on\"\">LAMPU 3 ON</a>");
client.println("<a href=\"/?button4on\"\">LAMPU 4 ON</a>");
client.println("<a href=\"/?button5on\"\">LAMPU 5 ON</a>");
client.println("<a href=\"/?button6on\"\">LAMPU 6 ON</a>");
client.println("<a href=\"/?button7on\"\">LAMPU 7 ON</a>");
client.println("<a href=\"/?button8on\"\">LAMPU 8 ON</a>");
client.println("<br />");
client.println("<br />");
client.println("<a href=\"/?button1off\"\">LAMPU 1 OFF</a>");
client.println("<a href=\"/?button2off\"\">LAMPU 2 OFF</a>");
client.println("<a href=\"/?button3off\"\">LAMPU 3 OFF</a>");
client.println("<a href=\"/?button4off\"\">LAMPU 4 OFF</a>");
client.println("<a href=\"/?button5off\"\">LAMPU 5 OFF</a>");
client.println("<a href=\"/?button6off\"\">LAMPU 6 OFF</a>");
client.println("<a href=\"/?button7off\"\">LAMPU 7 OFF</a>");
client.println("<a href=\"/?button8off\"\">LAMPU 8 OFF</a>");
client.println("<br />");
client.println("<br />");
client.println("<a href=\"/?button9on\"\">Rotate Left</a>");
client.println("<a href=\"/?button9off\"\">Rotate Right</a><br />");
client.println("<br />");
client.println("<a href=\"/?allon\"\">ALL ON</a>");
client.println("<a href=\"/?alloff\"\">ALL OFF</a>");
client.println("<br />");
client.println("<br />");
client.println("<hr />");
//client.println("<p>Created by Rui Santos. Visit http://randomnerdtutorials.com for more
projects!</p>");
client.println("<br />");
client.println("</BODY>");
client.println("</HTML>");
delay(1);
//stopping client
client.stop();
//controls the Arduino if you press the buttons
if (readString.indexOf("?button1on") >0){
digitalWrite(led1, HIGH);
}
if (readString.indexOf("?button1off") >0){
digitalWrite(led1, LOW);
}
if (readString.indexOf("?button2on") >0){
digitalWrite(led2, HIGH);
}
if (readString.indexOf("?button2off") >0){
digitalWrite(led2, LOW);
}
if (readString.indexOf("?button3on") >0){
digitalWrite(led3, HIGH);
}
if (readString.indexOf("?button3off") >0){
digitalWrite(led3, LOW);
}
if (readString.indexOf("?button4on") >0){
digitalWrite(led4, HIGH);
}
if (readString.indexOf("?button4off") >0){
digitalWrite(led4, LOW);
}
if (readString.indexOf("?button5on") >0){
digitalWrite(led5, HIGH);
}
if (readString.indexOf("?button5off") >0){
digitalWrite(led5, LOW);
}
if (readString.indexOf("?button6on") >0){
digitalWrite(led6, HIGH);
}
if (readString.indexOf("?button6off") >0){
digitalWrite(led6, LOW);
}
if (readString.indexOf("?button7on") >0){
digitalWrite(led7, HIGH);
}
if (readString.indexOf("?button7off") >0){
digitalWrite(led7, LOW);
}
if (readString.indexOf("?button8on") >0){
digitalWrite(led8, HIGH);
}
if (readString.indexOf("?button8off") >0){
digitalWrite(led8, LOW);
}
if (readString.indexOf("?allon") >0){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
}
if (readString.indexOf("?alloff") >0){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
if (readString.indexOf("?button9on") >0){
for(pos = 0; pos < 180; pos += 3) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
microservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
if (readString.indexOf("?button9off") >0){
for(pos = 180; pos>=1; pos-=3) // goes from 180 degrees to 0 degrees
{
microservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
//clearing string for next read
readString="";
}
}
}
}
}
====================================================================
84. ETHERNET SHIELD MULTI SWITCH DENGAN TELNET
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
int ledPin1 = 2;
int ledPin2 = 3;
int ledPin3 = 4;
int ledPin4 = 5;
int ledPin5 = 6;
int ledPin6 = 7;
int ledPin7 = 8;
int ledPin8 = 9;
Servo microservo;
int pos = 0;
String commandString;
void setup() {
void loop() {
while (client.available()) {
char newChar = client.read(); // read the bytes incoming from the client:
if (newChar == 0x0D) //If a 0x0D is received, a Carriage Return, then evaluate the command
{
server.print("Received this command: ");
server.println(commandString);
processCommand(commandString);
} else
{
Serial.println(newChar);
commandString += newChar;
}
}
}
}
commandString = "";
instructions();
}
void instructions()
{
/*
server.println("I don't understand");
server.println("Please use one of these commands:");
server.println("* pot, to get a reading from the potentiomet");
server.println("* ledon, to turn on the LED");
server.println("* ledoff, to turn off the LED");
*/
server.println("I don't understand");
/*
server.println("Please use one of these commands:");
server.println("* turn1, to servo turn to 180");
server.println("* turn2, to servo turn to 0");
server.println("* led1on, to turn on the LED1");
server.println("* led1off, to turn off the LED1");
server.println("* led2on, to turn on the LED1");
server.println("* led2off, to turn off the LED1");
server.println("* led3on, to turn on the LED1");
server.println("* led3off, to turn off the LED1");
server.println("* led4on, to turn on the LED1");
server.println("* led4off, to turn off the LED1");
server.println("* led5on, to turn on the LED1");
server.println("* led5off, to turn off the LED1");
server.println("* led6on, to turn on the LED1");
server.println("* led6off, to turn off the LED1");
server.println("* led7on, to turn on the LED1");
server.println("* led7off, to turn off the LED1");
server.println("* led8on, to turn on the LED1");
server.println("* led8off, to turn off the LED1");
*/
}
Hasil sket ini dapat dibuka dengan telnet, ketikkan “telnet 192.168.1.126” atau sesuai dengan IP
address yang dipakai, lalu untuk menjalankan perintah ketikkan comand : led1on untuk menyalakan
LED 1, led1off untuk mematikan LED1, Allon untuk menyalan secara bersama-sama, dan
seterusnya sesuai comand pada bagian “if”.
===========================================================
85. MAGNETOMETER HMC5883L
#include <Wire.h>
#include <HMC5883L.h>
HMC5883L compass;
void setup()
{
Wire.begin();
Serial.begin(9600);
compass = HMC5883L();
void loop()
{
MagnetometerRaw raw = compass.ReadRawAxis();
float heading = atan2(raw.YAxis, raw.XAxis);
if(heading < 0)
heading += 2*PI;
float headingDegrees = heading * 180/M_PI;
Serial.println(headingDegrees);
delay(100);
}
-----------------------------------------------------------------------------------------------------------
#include <Wire.h>
#include <HMC5883L.h>
HMC5883L compass;
int i;
float X_tot, Y_tot, Z_tot;
float X,Y,Z;
void setup()
{
Wire.begin();
Serial.begin(9600);
compass = HMC5883L();
i = 0;
X_tot = 0;
Y_tot = 0;
Z_tot = 0;
X = 0; Y = 0; Z = 0;
}
void loop()
{
MagnetometerRaw raw = compass.ReadRawAxis();
if(i<499){
X_tot += raw.XAxis;
Y_tot += raw.YAxis;
Z_tot += raw.ZAxis;
}else{
X = X_tot/500;
Y = Y_tot/500;
Z = Z_tot/500;
X_tot = 0; Y_tot = 0; Z_tot = 0;
i = 0;
Serial.print(i+":\t");
Serial.print(X);
Serial.print(" ");
Serial.print(Y);
Serial.print(" ");
Serial.print(Z);
Serial.println(" ");
delay(10);
}
i++;
}
------------------------------------------------------------------------------------------------------------
/* Arduino Compass
*
* by Dejan Nedelkovski,
* www.HowToMechatronics.com
*
*/
#include <Wire.h> //I2C Arduino Library
#define Magnetometer_mX0 0x03
#define Magnetometer_mX1 0x04
#define Magnetometer_mZ0 0x05
#define Magnetometer_mZ1 0x06
#define Magnetometer_mY0 0x07
#define Magnetometer_mY1 0x08
int mX0, mX1, mX_out;
int mY0, mY1, mY_out;
int mZ0, mZ1, mZ_out;
float heading, headingDegrees, headingFiltered, declination;
float Xm,Ym,Zm;
#define Magnetometer 0x1E //I2C 7bit address of HMC5883
void setup(){
//Initialize Serial and I2C communications
Serial.begin(9600);
Wire.begin();
delay(100);
Wire.beginTransmission(Magnetometer);
Wire.write(0x02); // Select mode register
Wire.write(0x00); // Continuous measurement mode
Wire.endTransmission();
}
void loop(){
//---- X-Axis
Wire.beginTransmission(Magnetometer); // transmit to device
Wire.write(Magnetometer_mX1);
Wire.endTransmission();
Wire.requestFrom(Magnetometer,1);
if(Wire.available()<=1)
{
mX0 = Wire.read();
}
Wire.beginTransmission(Magnetometer); // transmit to device
Wire.write(Magnetometer_mX0);
Wire.endTransmission();
Wire.requestFrom(Magnetometer,1);
if(Wire.available()<=1)
{
mX1 = Wire.read();
}
//---- Y-Axis
Wire.beginTransmission(Magnetometer); // transmit to device
Wire.write(Magnetometer_mY1);
Wire.endTransmission();
Wire.requestFrom(Magnetometer,1);
if(Wire.available()<=1)
{
mY0 = Wire.read();
}
Wire.beginTransmission(Magnetometer); // transmit to device
Wire.write(Magnetometer_mY0);
Wire.endTransmission();
Wire.requestFrom(Magnetometer,1);
if(Wire.available()<=1)
{
mY1 = Wire.read();
}
//---- Z-Axis
Wire.beginTransmission(Magnetometer); // transmit to device
Wire.write(Magnetometer_mZ1);
Wire.endTransmission();
Wire.requestFrom(Magnetometer,1);
if(Wire.available()<=1)
{
mZ0 = Wire.read();
}
Wire.beginTransmission(Magnetometer); // transmit to device
Wire.write(Magnetometer_mZ0);
Wire.endTransmission();
Wire.requestFrom(Magnetometer,1);
if(Wire.available()<=1)
{
mZ1 = Wire.read();
}
//---- X-Axis
mX1=mX1<<8;
mX_out =mX0+mX1; // Raw data
// From the datasheet: 0.92 mG/digit
Xm = mX_out*0.00092; // Gauss unit
//* Earth magnetic field ranges from 0.25 to 0.65 Gauss, so these are the values that we need to get
approximately.
//---- Y-Axis
mY1=mY1<<8;
mY_out =mY0+mY1;
Ym = mY_out*0.00092;
//---- Z-Axis
mZ1=mZ1<<8;
mZ_out =mZ0+mZ1;
Zm = mZ_out*0.00092;
// ==============================
//Calculating Heading
heading = atan2(Ym, Xm);
// Correcting the heading with the declination angle depending on your location
// You can find your declination angle at: http://www.ngdc.noaa.gov/geomag-web/
// At my location it's 4.2 degrees => 0.073 rad
declination = 0.073;
heading += declination;
delay(50);
}
-----------------------------------------------------------------------------------------------------------
/*
HMC5883L_Example.ino - Example sketch for integration with an HMC5883L triple axis
magnetometer.
Copyright (C) 2013 BluLemonLabs (bluelemonlabs.blogspot.com)
This program is free software: you can redistribute it and/or modify
it under the terms of the version 3 GNU General Public License as
published by the Free Software Foundation.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Out setup routine, here we will configure the microcontroller and compass.
void setup()
{
// Initialize the serial port.
Serial.begin(9600);
// Calculate heading when the magnetometer is level, then correct for signs of axis.
// Atan2() automatically check the correct formula taking care of the quadrant you are in
float heading = atan2(scaled.YAxis, scaled.XAxis);
// Once you have your heading, you must then add your 'Declination Angle',
// which is the 'Error' of the magnetic field in your location. Mine is 0.0404
// Find yours here: http://www.magnetic-declination.com/
// If you cannot find your Declination, comment out these two lines, your compass will be slightly
off.
float declinationAngle = 0.0404;
heading += declinationAngle;
// By default the HMC5883L reads the data 15 time per second (15Hz)
// However since we have a long serial out (104ms at 9600) we will let
// it run at its natural speed.
// delay(66);
}
Serial.print(scaled.XAxis);
Serial.print(" ");
Serial.print(scaled.YAxis);
Serial.print(" ");
Serial.print(scaled.ZAxis);
Serial.print(" \tHeading:\t");
Serial.print(heading);
Serial.print(" Radians \t");
Serial.print(headingDegrees);
Serial.println(" Degrees \t");
}
=========================================================
86. ACCELEROMETER GY-61
/*
ADXL335
note:vcc-->5v ,but ADXL335 Vs is 3.3V
The circuit:
5V: VCC
analog 1: x-axis
analog 2: y-axis
analog 3: z-axis
*/
const int xpin = 1; // x-axis of the accelerometer
const int ypin = 2; // y-axis
const int zpin = 3; // z-axis (only on 3-axis models)
void setup()
{
// initialize the serial communications:
Serial.begin(9600);
}
void loop()
{
int x = analogRead(xpin); //read from xpin
float zero_G = 512.0; //ADC is 0~1023 the zero g output equal to Vs/2
//ADXL335 power supply by Vs 3.3V
float scale = 102.3; //ADXL335330 Sensitivity is 330mv/g
//330 * 1024/3.3/1000
Serial.print(x);
Serial.print(" ");
Serial.print(y);
Serial.print(" ");
Serial.print(z);
Serial.print(" ");
Serial.print(((float)x - 395)/65*9.8); //print x value on serial monitor
Serial.print(" ");
Serial.print(((float)y - 350)/68.5*9.8); //print y value on serial monitor
Serial.print(" ");
Serial.print(((float)z - 372)/68*9.8); //print z value on serial monitor
Serial.println(" ");
delay(100);
}
===================================================================
87. SEND DATA VIA BLUETOOTH
Module bluetooth ini pada dasarnya berguna untuk mengirim data yang tertampil pada monitor
serial ke klien atau pair. Data dari arduino dikirim melalui pin RX dan TX. Sebagai contoh kita
akan mengirim data pada pin A0,
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
Pertama-tama kita lepas dahulu kabel pin TX dan RX dari arduino, kemudian kita upload kode di
atas, lalu kita sambungkan lagi kabel ke pin RX dan TX arduino, maka data telah dipancarkan lewat
bluetooth.
Untuk membaca data via bluetooth maka kita memerlukan komputer yang dapat mengakses signal
bluetooth. Jika kita menggunakan Windows 10, aktifkan bluetooth dengan cara klik ikon bluetooth
pada task bar ---> Show Bluetooth Devises, maka pada tampilan Manage Bluetooth devices akan
tertampil HC-05, klik lalu lakukan pair, akan diminta password, isikan 1234 sebagai password,
maka bluetooth siap diakses. Cara mengakses data yang terkirim via bluetooth dapat kita lakukan
dengan membuka Arduino IDE versi 1.6.xx. Arahkan port ke port yang digunakan oleh bluetooth,
kemudian buka serial monitor, maka data yang terkirim via bluetooth akan tertampil.
Cara lain untuk mengakses data via bluetooth ini adalah dengan sofware Tera Term, kita bisa
download secara gratis. Setelah kita install kita open maka akan tampil menu koneksi, pilih serial
serta pilih port yang dipakai bluetooth, maka data akan tertampil. Kelebihan Tera Term ini kita bisa
simpan data yang tertampil dengan cara data log ke suatu file notepad.
===================================================================
88. SERVO MOTOR
#include <Servo.h>
Servo head;
void setup()
{
head.attach(9);
head.write(80);
}
void loop(){
head.write(180);
delay(1000);
head.write(160);
delay(1000);
head.write(140);
delay(1000);
head.write(120);
delay(1000);
head.write(100);
delay(1000);
head.write(80);
delay(1000);
head.write(60);
delay(1000);
head.write(40);
delay(1000);
head.write(20);
delay(1000);
head.write(0);
delay(1000);
head.write(20);
delay(1000);
head.write(40);
delay(1000);
head.write(60);
delay(1000);
head.write(80);
delay(1000);
head.write(100);
delay(1000);
head.write(120);
delay(1000);
head.write(140);
delay(1000);
head.write(160);
delay(1000);
==================================================================
#include <Servo.h>
Serial.begin(9600);
}
delay(3);
}
Serial.print("X");
Serial.println(leftRightPos);
}
}
=======================================================================
#include <Servo.h>
Servo leftRightServo; // set a variable to map the servo
int leftRightPos = 0; // set a variable to store the servo position
void setup() {
leftRightServo.attach(9);
Serial.begin(9600);
}
void loop() {
for(leftRightPos = 0; leftRightPos < 180; leftRightPos++) { // going left to right.
leftRightServo.write(leftRightPos);
Serial.print("X"); // print leading X to mark the following value as
degrees
Serial.println(leftRightPos); // current servo position
delay(50);
}
for(leftRightPos = 180; leftRightPos > 0; leftRightPos--) { // going right to left
leftRightServo.write(leftRightPos);
Serial.print("X");
Serial.println(leftRightPos);
delay(50);
}
}
89. SONAR ARDUINO
//Arduino Code
#include <Servo.h>
/*
code for arduino bord ultrasonic radar system.
*/
Servo leftRightServo; // set a variable to map the servo
int leftRightPos = 0; // set a variable to store the servo position
const int numReadings = 1; // set a variable for the number of readings to take
int index = 0; // the index of the current reading
int total = 0; // the total of all readings
int average = 0; // the average
int echoPin = 6; // the SRF05's echo pin
int initPin = 7; // the SRF05's init pin
unsigned long pulseTime = 0; // variable for reading the pulse
unsigned long distance = 0; // variable for storing distance
/* setup the pins, servo and serial port */
void setup() {
leftRightServo.attach(9);
// make the init pin an output:
pinMode(initPin, OUTPUT);
// make the echo pin an input:
pinMode(echoPin, INPUT);
// initialize the serial port:
Serial.begin(9600);
}
/* begin rotating the servo and getting sensor values */
void loop() {
for(leftRightPos = 0; leftRightPos < 180; leftRightPos++) { // going left to right.
leftRightServo.write(leftRightPos);
for (index = 0; index<=numReadings;index++) { // take x number of readings from the
sensor and average them
digitalWrite(initPin, LOW);
delayMicroseconds(50);
digitalWrite(initPin, HIGH); // send signal
delayMicroseconds(50); // wait 50 microseconds for it to return
digitalWrite(initPin, LOW); // close signal
pulseTime = pulseIn(echoPin, HIGH); // calculate time for signal to return
distance = pulseTime/58; // convert to centimetres
total = total + distance; // update total
delay(1);
}
average = total/numReadings; // create average reading
if (index >= numReadings) { // reset the counts when at the last item of the
array
index = 0;
total = 0;
}
Serial.print("X"); // print leading X to mark the following value as
degrees
Serial.print(leftRightPos); // current servo position
Serial.print("V"); // preceeding character to separate values
Serial.println(average); // average of sensor readings
}
/*
start going right to left after we got to 180 degrees
same code as above
*/
for(leftRightPos = 180; leftRightPos > 0; leftRightPos--) { // going right to left
leftRightServo.write(leftRightPos);
for (index = 0; index<=numReadings;index++) {
digitalWrite(initPin, LOW);
delayMicroseconds(50);
digitalWrite(initPin, HIGH);
delayMicroseconds(50);
digitalWrite(initPin, LOW);
pulseTime = pulseIn(echoPin, HIGH);
distance = pulseTime/58;
total = total + distance;
delay(1);
}
average = total/numReadings;
if (index >= numReadings) {
index = 0;
total = 0;
}
Serial.print("X");
Serial.print(leftRightPos);
Serial.print("V");
Serial.println(average);
}
}
----------------------------------------------------
kode Processing
/*
Radar Screen Visualisation for HC-SR04
Maps out an area of what the HC-SR04 sees from a top down view.
Takes and displays 2 readings, one left to right and one right to left.
Displays an average of the 2 readings
Displays motion alert if there is a large difference between the 2 values.
*/
import processing.serial.*; // import serial library
Serial arduinoport; // declare a serial port
float x, y; // variable to store x and y co-ordinates for vertices
int radius = 350; // set the radius of objects
int w = 300; // set an arbitary width value
int degree = 0; // servo position in degrees
int value = 0; // value from sensor
int motion = 0; // value to store which way the servo is panning
int[] newValue = new int[181]; // create an array to store each new sensor value for each servo
position
int[] oldValue = new int[181]; // create an array to store the previous values.
PFont myFont; // setup fonts in Processing
int radarDist = 0; // set value to configure Radar distance labels
int firstRun = 0; // value to ignore triggering motion on the first 2 servo sweeps
/* create background and serial buffer */
void setup(){
// setup the background size, colour and font.
size(750, 450);
background (0); // 0 = black
myFont = createFont("verdana", 12);
textFont(myFont);
// setup the serial port and buffer
arduinoport = new Serial(this, Serial.list()[0], 9600);
}
/* draw the screen */
void draw(){
fill(0); // set the following shapes to be black
noStroke(); // set the following shapes to have no outline
ellipse(radius, radius, 750, 750); // draw a circle with a width/ height = 750 with its center position
(x and y) set by the radius
rectMode(CENTER); // set the following rectangle to be drawn around its center
rect(350,402,800,100); // draw rectangle (x, y, width, height)
if (degree >= 179) { // if at the far right then set motion = 1/ true we're about to go right
to left
motion = 1; // this changes the animation to run right to left
}
if (degree <= 1) { // if servo at 0 degrees then we're about to go left to right
motion = 0; // this sets the animation to run left to right
}
/* setup the radar sweep */
/*
We use trigonmetry to create points around a circle.
So the radius plus the cosine of the servo position converted to radians
Since radians 0 start at 90 degrees we add 180 to make it start from the left
Adding +1 (i) each time through the loops to move 1 degree matching the one degree of servo
movement
cos is for the x left to right value and sin calculates the y value
since its a circle we plot our lines and vertices around the start point for everything will always be
the center.
*/
strokeWeight(7); // set the thickness of the lines
if (motion == 0) { // if going left to right
for (int i = 0; i <= 20; i++) { // draw 20 lines with fading colour each 1 degree further round than
the last
stroke(0, (10*i), 0); // set the stroke colour (Red, Green, Blue) base it on the the value of i
line(radius, radius, radius + cos(radians(degree+(180+i)))*w, radius +
sin(radians(degree+(180+i)))*w); // line(start x, start y, end x, end y)
}
} else { // if going right to left
for (int i = 20; i >= 0; i--) { // draw 20 lines with fading colour
stroke(0,200-(10*i), 0); // using standard RGB values, each between 0 and 255
line(radius, radius, radius + cos(radians(degree+(180+i)))*w, radius +
sin(radians(degree+(180+i)))*w);
}
}
/* Setup the shapes made from the sensor values */
noStroke(); // no outline
/* first sweep */
fill(0,50,0); // set the fill colour of the shape (Red, Green, Blue)
beginShape(); // start drawing shape
for (int i = 0; i < 180; i++) { // for each degree in the array
x = radius + cos(radians((180+i)))*((oldValue[i])); // create x coordinate
y = radius + sin(radians((180+i)))*((oldValue[i])); // create y coordinate
vertex(x, y); // plot vertices
}
endShape(); // end shape
/* second sweep */
fill(0,110,0);
beginShape();
for (int i = 0; i < 180; i++) {
x = radius + cos(radians((180+i)))*(newValue[i]);
y = radius + sin(radians((180+i)))*(newValue[i]);
vertex(x, y);
}
endShape();
/* average */
fill(0,170,0);
beginShape();
for (int i = 0; i < 180; i++) {
x = radius + cos(radians((180+i)))*((newValue[i]+oldValue[i])/2); // create average
y = radius + sin(radians((180+i)))*((newValue[i]+oldValue[i])/2);
vertex(x, y);
}
endShape();
/* if after first 2 sweeps, highlight motion with red circle*/
if (firstRun >= 360) {
stroke(150,0,0);
strokeWeight(1);
noFill();
for (int i = 0; i < 180; i++) {
if (oldValue[i] - newValue[i] > 35 || newValue[i] - oldValue[i] > 35) {
x = radius + cos(radians((180+i)))*(newValue[i]);
y = radius + sin(radians((180+i)))*(newValue[i]);
ellipse(x, y, 10, 10);
}
}
}
/* set the radar distance rings and out put their values, 50, 100, 150 etc.. */
for (int i = 0; i <=6; i++){
noFill();
strokeWeight(1);
stroke(0, 255-(30*i), 0);
ellipse(radius, radius, (100*i), (100*i));
fill(0, 100, 0);
noStroke();
text(Integer.toString(radarDist+50), 380, (305-radarDist), 50, 50);
radarDist+=50;
}
radarDist = 0;
/* draw the grid lines on the radar every 30 degrees and write their values 180, 210, 240 etc.. */
for (int i = 0; i <= 6; i++) {
strokeWeight(1);
stroke(0, 55, 0);
line(radius, radius, radius + cos(radians(180+(30*i)))*w, radius + sin(radians(180+(30*i)))*w);
fill(0, 55, 0);
noStroke();
if (180+(30*i) >= 300) {
text(Integer.toString(180+(30*i)), (radius+10) + cos(radians(180+(30*i)))*(w+10), (radius+10) +
sin(radians(180+(30*i)))*(w+10), 25,50);
} else {
text(Integer.toString(180+(30*i)), radius + cos(radians(180+(30*i)))*w, radius +
sin(radians(180+(30*i)))*w, 60,40);
}
}
/* Write information text and values. */
noStroke();
fill(0);
rect(350,402,800,100);
fill(0, 100, 0);
text("Degrees: "+Integer.toString(degree), 100, 380, 100, 50); // use Integet.toString to convert
numeric to string as text() only outputs strings
text("Distance: "+Integer.toString(value), 100, 400, 100, 50); // text(string, x, y, width, height)
text("Radar screen code ", 540, 380, 250, 50);
fill(0);
rect(70,60,150,100);
fill(0, 100, 0);
text("Screen Key:", 100, 50, 150, 50);
fill(0,50,0);
rect(30,53,10,10);
text("First sweep", 115, 70, 150, 50);
fill(0,110,0);
rect(30,73,10,10);
text("Second sweep", 115, 90, 150, 50);
fill(0,170,0);
rect(30,93,10,10);
text("Average", 115, 110, 150, 50);
noFill();
stroke(150,0,0);
strokeWeight(1);
ellipse(29, 113, 10, 10);
fill(150,0,0);
text("Motion", 115, 130, 150, 50);
}
/* get values from serial port */
void serialEvent (Serial arduinoport) {
String xString = arduinoport.readStringUntil('\n'); // read the serial port until a new line
if (xString != null) { // if theres data in between the new lines
xString = trim(xString); // get rid of any whitespace just in case
String getX = xString.substring(1, xString.indexOf("V")); // get the value of the servo position
String getV = xString.substring(xString.indexOf("V")+1, xString.length()); // get the value of the
sensor reading
degree = Integer.parseInt(getX); // set the values to variables
value = Integer.parseInt(getV);
oldValue[degree] = newValue[degree]; // store the values in the arrays.
newValue[degree] = value;
/* sets a counter to allow for the first 2 sweeps of the servo */
firstRun++;
if (firstRun > 360) {
firstRun = 360; // keep the value at 360
}
}
}
=============================================================
90. WATERBATH
Pada diagram di atas kita sajikan draft waterbath. Garis besar cara kerjanya adalah sebagai berikut.
Temperatur dari air dalam wadah diukur dengan PT100, signal dari PT100 ini diperkuat dengan
penguat LM324, output dari LM324 ini diumpankan ke ADS1115, di mana modul ADS1115 ini
akan meningkatkan resolusi pembacaan signal analog dari output LM324. Signal analog yang
dibaca kemudian dikalibrasi terhadap rentang suhu. Pembacaan suhu ini akan digunakan untuk
mengendalikan sebuah pemanas listrik melalui relay. Relay tidak terhubung secara langsung
terhadap sirkuit kontroler, karena jika relay ini tergabung pada sirkuit kontroler maka akan
menimbulkan ketidakstabilan pembacaan suhu, sebagai gantinya maka kita gunakan gabungan LED
dan LDR untuk mengaktifkan relay ini. Sumber tegangan yang dipakai kontroler dan relay juga
terpisah. Hal yang tak kalah penting adalah pisahkan ground untuk ADS1115 terhadap ground yang
digunakan module lain agar stabilitas pembacaan suhu terjaga.
#include <EEPROM.h>
#include <LiquidCrystal.h>
int pinIncrease = 2; //pin increase button
int pinDecrease = 3; //pin decrease button
int pinHeater = 11; // go to relay input
int pinIND = 13; // LED heating indicator
int pinSetting = 10; // setting temperature button key
int SettingSuhu = 0;
byte BatasSuhu;
//---------------------------temp section
#include <Wire.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads(0x48);
int temp0;
//---------------------------temp section
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);//order number : RS,EN,D4,D5,D6,D7
void setup() {
Serial.begin(9600);
lcd.begin(16, 4);
//---------------------------temp section
ads.begin();
//---------------------------temp section
pinMode(pinIncrease, INPUT);
pinMode(pinDecrease, INPUT);
pinMode(pinSetting, INPUT);
pinMode(pinHeater, OUTPUT);
pinMode(pinIND, OUTPUT);
digitalWrite(pinIncrease, HIGH);
digitalWrite(pinDecrease, HIGH);
}
void loop() {
if(digitalRead(pinSetting) == HIGH){
int16_t adc0; // we read from the ADC, we have a sixteen bit integer as a result
adc0 = ads.readADC_SingleEnded(0);
temp0 = adc0;
float suhu = (temp0*0.030705394)-364.87967;//from calabration plot
SettingSuhu = constrain(SettingSuhu, 0, 255);
setting();
EEPROM.write(1, SettingSuhu);
BatasSuhu = EEPROM.read(1);
heater();
Serial.print(BatasSuhu);
Serial.print(" ");
Serial.print(suhu);
Serial.print(" ");
Serial.println(temp0);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SETT :");
lcd.setCursor(7, 0);
lcd.print(BatasSuhu);
lcd.setCursor(0, 1);
lcd.print("TEMP :");
lcd.setCursor(7, 1);
lcd.print(suhu);
lcd.setCursor(0, 2);
lcd.print("READ :");
lcd.setCursor(7, 2);
lcd.print(temp0);
delay(100);
}
else if(digitalRead(pinSetting) == LOW){
int16_t adc0; // we read from the ADC, we have a sixteen bit integer as a result
adc0 = ads.readADC_SingleEnded(0);
temp0 = adc0;
float suhu = (temp0*0.030705394)-364.87967;//from calabration plot
BatasSuhu = EEPROM.read(1);
heater();
Serial.print(BatasSuhu);
Serial.print(" ");
Serial.print(suhu);
Serial.print(" ");
Serial.println(temp0);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SETT :");
lcd.setCursor(7, 0);
lcd.print(BatasSuhu);
lcd.setCursor(0, 1);
lcd.print("TEMP :");
lcd.setCursor(7, 1);
lcd.print(suhu);
lcd.setCursor(0, 2);
lcd.print("READ :");
lcd.setCursor(7, 2);
lcd.print(temp0);
delay(100);
}
}
void setting(){
if(digitalRead(pinIncrease) == LOW){
SettingSuhu++;
}else if(digitalRead(pinDecrease) == LOW){
SettingSuhu--;
}
}
void heater(){
float suhu = (temp0*0.030705394)-364.87967;//from calabration plot
if(suhu < BatasSuhu){
digitalWrite(pinHeater, HIGH);
digitalWrite(pinIND, HIGH);
}else{
digitalWrite(pinHeater, LOW);
digitalWrite(pinIND, LOW);
}
}
==============================================================
91. WATERBATH REMOTE CONTROLLED
Sketsa di atas adalah waterbath yang setting suhunya dilakukan melalui remote control.
#include <EEPROM.h>
#include <LiquidCrystal.h>
int pinIncrease = 2; //pin increase button
int pinDecrease = 3; //pin decrease button
int pinHeater = 11; // go to relay input
int pinIND = 13; // LED heating indicator
int pinSetting = 10; // setting temperature button key
int SettingSuhu = 0;
byte BatasSuhu;
//---------------------------temp section
#include <Wire.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads(0x48);
int temp0;
//---------------------------temp section
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);//order number : RS,EN,D4,D5,D6,D7
#include <IRremote.h>
int RECV_PIN = 12;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
lcd.begin(16, 4);
//---------------------------temp section
ads.begin();
//---------------------------temp section
pinMode(pinIncrease, INPUT);
pinMode(pinDecrease, INPUT);
pinMode(pinSetting, INPUT);
pinMode(pinHeater, OUTPUT);
pinMode(pinIND, OUTPUT);
digitalWrite(pinIncrease, HIGH);
digitalWrite(pinDecrease, HIGH);
}
unsigned long last = millis();
void loop() {
SettingSuhu = constrain(SettingSuhu, 0, 255);
if (irrecv.decode(&results)) {
if (results.value == 0xEF1020DF) {
SettingSuhu++;
EEPROM.write(1, SettingSuhu);
}
else if (results.value == 0xEF10A05F) {
SettingSuhu--;
EEPROM.write(1, SettingSuhu);
}
irrecv.resume(); // Receive the next value
}
int16_t adc0; // we read from the ADC, we have a sixteen bit integer as a result
adc0 = ads.readADC_SingleEnded(0);
temp0 = adc0;
float suhu = (temp0*0.030705394)-364.87967;//from calabration plot
BatasSuhu = EEPROM.read(1);
heater();
Serial.print(BatasSuhu);
Serial.print(" ");
Serial.print(suhu);
Serial.print(" ");
Serial.println(temp0);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SETT :");
lcd.setCursor(7, 0);
lcd.print(BatasSuhu);
lcd.setCursor(0, 1);
lcd.print("TEMP :");
lcd.setCursor(7, 1);
lcd.print(suhu);
lcd.setCursor(0, 2);
lcd.print("READ :");
lcd.setCursor(7, 2);
lcd.print(temp0);
delay(100);
}
void heater(){
float suhu = (temp0*0.030705394)-364.87967;//from calabration plot
if(suhu < BatasSuhu){
digitalWrite(pinHeater, HIGH);
digitalWrite(pinIND, HIGH);
}else{
digitalWrite(pinHeater, LOW);
digitalWrite(pinIND, LOW);
}
}
=======================================================================
92. SWITCH VIA BLUETOOTH
Melalui bluetooth kita dapat mengirimkan signal untuk mematikan atau menyalakan suatu lampu
atau peralatan.
char INBYTE;
int LED = 13; // LED on pin 13
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
}
void loop() {
Serial.println("Press 1 to turn Arduino pin 13 LED ON or 0 to turn it OFF:");
while (!Serial.available()); // stay here so long as COM port is empty
INBYTE = Serial.read(); // read next available byte
if( INBYTE == '0' ) digitalWrite(LED, LOW); // if it's a 0 (zero) tun LED off
if( INBYTE == '1' ) digitalWrite(LED, HIGH); // if it's a 1 (one) turn LED on
delay(50);
}
================================================================
93. GAS SENSOR MQ135
==================================================================
94. KEYPAD 4x4
#include <Keypad.h>
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad
void loop(){
char key = keypad.getKey();
if (key){
Serial.println(key);
}
}
==============================================================
95. KEYPAD SWITCH
/* Keypadtest.pde
*
* Demonstrate the simplest use of the keypad library.
*
* The first step is to connect your keypad to the
* Arduino using the pin numbers listed below in
* rowPins[] and colPins[]. If you want to use different
* pins then you can change the numbers below to
* match your setup.
*
*/
#include <Keypad.h>
#define ledpin 13
void setup()
{
pinMode(ledpin,OUTPUT);
//digitalWrite(ledpin, HIGH);
Serial.begin(9600);
}
void loop()
{
char key = kpd.getKey();
if(key) // Check for a valid key.
{
switch (key)
{
case 'A':
digitalWrite(ledpin, HIGH);
break;
case 'B':
digitalWrite(ledpin, LOW);
break;
default:
Serial.println(key);
}
}
}
96. RF REMOTE SWITCH
Pada proyek berikut adalah contoh sederhana bagaimana kita memanfaatkan RF module ini untuk
melakukan penyalaan lampu.
Kode transmitter
#include <VirtualWire.h>
char *controller;
void setup() {
pinMode(13,OUTPUT);
vw_set_ptt_inverted(true); //
vw_set_tx_pin(12);
vw_setup(4000);// speed of data transfer Kbps
}
void loop(){
int sensorValue = analogRead(A0);
if(sensorValue > 500){
controller="1";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,1);
//delay(2000);
}
else{
controller="0";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,0);
//delay(2000);
}
}
Kode receiver
#include <VirtualWire.h>
void setup()
{
vw_set_ptt_inverted(true); // Required for DR3100
vw_set_rx_pin(12);
vw_setup(4000); // Bits per sec
pinMode(13, OUTPUT);
digitalWrite(13,1);
}
if(buf[0]=='0'){
digitalWrite(13,0);
}
}
}
97. CALCULATOR
/*
|| @version 1.0
|| @author Andrew Mascolo
|| @date May 15, 2013
||
|| @description
|| Simple use of keypad and LCD
*/
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LCD.h>
//LiquidCrystal_I2C lcd(0x20,20,4);
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C
lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,BACKLIGHT_PIN,POSI
TIVE);
LCD *myLCD = &lcd;
long first = 0;
long second = 0;
double total = 0;
char customKey;
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','+'},
{'4','5','6','-'},
{'7','8','9','*'},
{'C','0','=','/'}
};
byte rowPins[ROWS] = {5, 4, 3, 2 }; //connect to the row pinouts of the keypad
byte colPins[COLS] = {9, 8, 7, 6 }; //connect to the column pinouts of the keypad
void setup()
{
//lcd.init(); // initialize the lcd
//lcd.backlight();
lcd.begin(16,2);lcd.clear();
lcd.setCursor(0,0);
lcd.print("LOADING");
for(int i=0; i<16; i++){
lcd.setCursor(i,1);
lcd.write(255);
delay(170);
}
lcd.clear();
}
void loop()
{
customKey = customKeypad.getKey();
switch(customKey)
{
case '0' ... '9': // This keeps collecting the first value until a operator is pressed "+-*/"
lcd.setCursor(0,0);
first = first * 10 + (customKey - '0');
lcd.print(first);
break;
case '+':
first = (total != 0 ? total : first);
lcd.setCursor(0,1);
lcd.print("+");
second = SecondNumber(); // get the collected the second number
total = first + second;
lcd.setCursor(0,3);
lcd.print(total);
first = 0, second = 0; // reset values back to zero for next use
break;
case '-':
first = (total != 0 ? total : first);
lcd.setCursor(0,1);
lcd.print("-");
second = SecondNumber();
total = first - second;
lcd.setCursor(0,3);
lcd.print(total);
first = 0, second = 0;
break;
case '*':
first = (total != 0 ? total : first);
lcd.setCursor(0,1);
lcd.print("*");
second = SecondNumber();
total = first * second;
lcd.setCursor(0,3);
lcd.print(total);
first = 0, second = 0;
break;
case '/':
first = (total != 0 ? total : first);
lcd.setCursor(0,1);
lcd.print("/");
second = SecondNumber();
lcd.setCursor(0,3);
second == 0 ? lcd.print("Invalid") : total = (float)first / (float)second;
lcd.print(total);
first = 0, second = 0;
break;
case 'C':
total = 0;
lcd.clear();
break;
}
}
long SecondNumber()
{
while( 1 )
{
customKey = customKeypad.getKey();
if(customKey >= '0' && customKey <= '9')
{
second = second * 10 + (customKey - '0');
lcd.setCursor(0,2);
lcd.print(second);
}
--------------------------------------------------------------------------------------------
atau dapat dicoba sket lain
--------------------------------------------------------------------------------------------------------
/*
Written by:
Gabe (http://rampantrobots.blogspot.com/)
and Kale (http://kalecloud.com/)
*/
#include <Keypad.h>
//#include <LiquidCrystal.h>
#include <stdlib.h>
#include <math.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
///////////////////////////////////////////////////////VARIABLES///////////////////////////////////////////
//VARIABLES TO PARSE FLOATING ANSWER INTO WHOLE NUMBER AND DECIMAL
PARTS///
char outresult[20];
String OutResult;
int decimal_location;
String whole_number;
String decimal_number;
int de=0;
//INPUT VARIABLES//
char input[9]; //buffer for input characters
float firstnumber = 0; //stores first number
float secondnumber = 0; //stores second number
float response = 0; //stores "answer"
bool positive = 1; //indicates positive number
int lcdcolumnindexrow1 = 1; // used to indicate location of input key
//FUNCTION VARIABLES//
int function = 9; //stores currently selected function
const int number_of_functions = 10;
int mode = 2; // select normal operation (1) or mystery function (0)
bool toggle = 1;
int level = 0; // stores level for the game
const int number_of_levels = 10;
///////////////////////////////////////////////////////KEYPAD SETUP///////////////////////////////////////
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns
// Define the Keymap
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 5, 4, 3, 2 };
// Connect keypad COL0, COL1, COL2, and COL3 to these Arduino pins.
byte colPins[COLS] = { 9, 8, 7, 6 };
///////////////////////////////////////////////////////LCD SETUP///////////////////////////////////////
//LiquidCrystal lcd(2, 3, 13, 8, 9, 10, 11, 4, 5, 6, 7);
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C
lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,BACKLIGHT_PIN,POSI
TIVE);
LCD *myLCD = &lcd;
void setup()
{
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("LOADING");
for(int i=0; i<16; i++){
lcd.setCursor(i,1);
lcd.write(255);
delay(170);
}
lcd.clear();
for(int i = 0; i < 8; i++) { input[i] = '0'; } // initialize input as zero
}
void loop()
{
if(scroll1) // display the input number and function(s) on the top line if math has been done
{
scrollline(750, 0, length);
}
else if(scroll2) // display the input number and function(s) on the second line if awaiting a 2nd
number
{
scrollline(750, 1, length2);
}
}else{
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
printresponse(response);
de=1;
}
else if(firstnumber == 0) // this is the first time that enter has been pressed and we have a valid
function
{
firstnumber = atof(input); // convert input character array to a float
numintototalarray();
printoperation(function);
lcd.setCursor(0,0);
lcd.print(" "); //clear first line to make space for the second number
lcd.setCursor(0,1);
lcd.print(" "); //clear line
length2 = length;
scroll2 = 1; //print what the user has entered so far on the second line
for(int i = 0; i < 8; i++) { input[i] = '0'; } // reinitialize the input buffer to make space for the
second number
lcdcolumnindexrow1 = 1;
positive = 1;
}else{
secondnumber = atof(input); // convert input character array to a float
response = executefunction(function, firstnumber, secondnumber); // do the math
numintototalarray();
totalarray = totalarray + "= ";
length = length + 2;
scroll1 = 1; // display the input numbers and function on the top line
if(function == 3 && secondnumber == 0){
lcd.setCursor(0,1);
lcd.print("ERROR");
de=1;
}else{
lcd.setCursor(0,1);
lcd.print(" "); //clear line
lcd.setCursor(0,1);
printresponse(response); //print answer
positive = 1;
de=1;
}
}
}
}
else if(key == '#' && positive ==1) //negative number read and number is currently positive
{
input[0] = '-';
lcd.setCursor(0,0);
lcd.print(input[0]); //print negative sign
positive = 0; //indicate number is now negative
++length;
}
else if(key == '#' && positive ==0)
{
positive = 1; //indicate number is now negative
input[0] = '0';
lcd.setCursor(0,0);
lcd.print(' '); //remove negative sign
--length;
}
else if(lcdcolumnindexrow1 < 8) //buffer overrun prevention
{
//read in a number or a decimal
{
for(int i =1; i < 7; i++) {input[i] = input[i+1]; } //shift all the values left
if(key == '*') { input[7] = '.'; } else { input[7] = key; } //* is decimal
lcd.setCursor(lcdcolumnindexrow1,0); //print on left of LCD moving right
lcd.print(input[7]);
++lcdcolumnindexrow1;
++length;
}
}
}
}
=====================================================================
98. HALL PROXIMITY SENSOR
Pada penggunaan modul Hall ini, jika magnet didekatkan pada sensor Hall maka lampu LED akan
menyala. Pada diagram di atas A0 adalah kebalikan dari D0, artinya jika pin D3 kita sambungkan ke
pin modul D0 maka yang terjadi adalah jika magnet didekatkan ke sensor Hall maka LED akan
padam.
const int hallPin = 3; // the number of the hall effect sensor pin
const int ledPin = 2; // the number of the LED pin
// variables will change:
int hallState = 0; // variable for reading the hall sensor status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the hall effect sensor pin as an input:
pinMode(hallPin, INPUT);
}
void loop(){
// read the state of the hall effect sensor:
hallState = digitalRead(hallPin);
if (hallState == LOW) {
// turn LED on:
digitalWrite(ledPin, HIGH);
}
else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
99. SERVO SERIAL CONTROLED
Kita bisa mengendalikan servo ini melalui serial monitor, ketikkan nilai sudut yang kita inginkan
(0-180) lalu tekan enter.
#include <Servo.h>
Servo servo1;
long num;
void setup()
{
servo1.attach(9);
Serial.begin(9600);
Serial.print("Enter Position = ");
}
void loop()
{
while(Serial.available()>0)
{
num= Serial.parseInt();
Serial.print(num);
Serial.println(" degree");
Serial.print("Enter Position = ");
}
servo1.write(num);
delay(15);
}
=======================================================================
100. SERVO CONTROL VIA BLUETOOTH
Kita juga dapat mengendalikan servo melalui bluetooth. Perlu diketahui ketika kita melakukan
upload sket lepaskan kabel TX dan RX pada arduino karena ketika RX dan TX ini terhubung maka
komunikasi usb arduino akan terputus. Operasikan servo via komputer lain yang terhubung
bluetooth dengan memakai Arduino IDE atau Tera Term.
#include <Servo.h>
Servo servo1;
long num;
void setup()
{
servo1.attach(9);
Serial.begin(9600);
Serial.print("Enter Position = ");
}
void loop()
{
while(Serial.available()>0)
{
num= Serial.parseInt();
Serial.print(num);
Serial.println(" degree");
Serial.print("Enter Position = ");
}
servo1.write(num);
delay(15);
}
===================================================================
101. LCD SERIAL MONITOR
Pada proyek ini kita demonstrasikan pengiriman karakter dari serial monitor ke LCD display.
/*
// include the library code:
#include <LiquidCrystal.h>
Connect the LCD: VCC -> 5V, GND -> GND, SDA -> A4 (PortC4, ADC4), SCL -> A5 (PortC5,
SDA)
LiquidCrystal_I2C
lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,BACKLIGHT_PIN,POSI
TIVE);
LCD *myLCD = &lcd;
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// initialize the serial communications:
Serial.begin(9600);
}
void loop() {
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
}
102. LCD SERIAL MONITOR WITH SCHROLL
Kita juga dapat menggeser tulisan yang terkirim dari serial monitor ke LCD. Karakter yang dapat
kita tuliskan hanya 64 karakter, kelebihan karakter dari 64 tidak akan tertampil.
/*
// include the library code:
#include <LiquidCrystal.h>
Connect the LCD: VCC -> 5V, GND -> GND, SDA -> A4 (PortC4, ADC4), SCL -> A5 (PortC5,
SDA)
LiquidCrystal_I2C
lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,BACKLIGHT_PIN,POSI
TIVE);
LCD *myLCD = &lcd;
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 1);
// initialize the serial communications:
Serial.begin(9600);
}
void loop() {
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
//int i;
//for (i = 0 ; i < 16; i ++) {
lcd.scrollDisplayLeft();
delay(400);
//}#
}
103. PESAN 63 HURUF
Pada proyek ini kita demostrasikan penggunaan LED matrix untuk menuliskan pesan singkat 63
huruf. Ketik pesan pada serial monitor. Huruf yang dapat dituliskan hanya 63 saja karena
keterbatasan kapasitas EEPROM.
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
#include <EEPROM.h>
const PROGMEM prog_uchar CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};
int maxInUse = 5; //change this variable to set how many MAX7219's you'll use
byte buffer[10];
const int EEPROM_MIN_ADDR = 0;
const int EEPROM_MAX_ADDR = 511;
void eeprom_serial_dump_column() {
int i;
byte b;
char buf[10];
for (i = EEPROM_MIN_ADDR; i <= EEPROM_MAX_ADDR; i++) {
b = EEPROM.read(i);
sprintf(buf, "%03X: %02X", i, b);
Serial.println(buf);
}
}
int i;
int j;
byte b;
char buf[10];
j = 0;
for (i = EEPROM_MIN_ADDR; i <= EEPROM_MAX_ADDR; i++) {
if (j == 0) {
sprintf(buf, "%03X: ", i);
Serial.print(buf);
}
b = EEPROM.read(i);
sprintf(buf, "%02X ", b);
j++;
if (j == bytesPerRow) {
j = 0;
Serial.println(buf);
}
else {
Serial.print(buf);
}
}
}
int i;
return true;
}
boolean eeprom_read_bytes(int startAddr, byte array[], int numBytes) {
int i;
return true;
}
ptr = (byte*)&value;
return eeprom_write_bytes(addr, ptr, sizeof(value));
}
numBytes = strlen(string) + 1;
int bytesRead;
if (!eeprom_is_addr_ok(addr)) {
return false;
}
if (bufSize == 0) {
return false;
}
if (bufSize == 1) {
buffer[0] = 0;
return true;
}
bytesRead = 0;
ch = EEPROM.read(addr + bytesRead);
buffer[bytesRead] = ch;
bytesRead++;
while ( (ch != 0x00) && (bytesRead < bufSize) && ((addr + bytesRead) <=
EEPROM_MAX_ADDR) ) {
// if no stop condition is met, read the next byte from eeprom
ch = EEPROM.read(addr + bytesRead);
buffer[bytesRead] = ch;
bytesRead++;
}
return true;
}
int start_time;
int stop_time;
void start_timing() {
start_time = millis();
}
void print_elapsed() {
stop_time = millis();
Serial.print("Time elapsed (ms): ");
Serial.println(stop_time - start_time);
}
//======================================
bool write_StringEE(int Addr, String input)
{
char cbuff[input.length() + 1];
input.toCharArray(cbuff, input.length() + 1);
return eeprom_write_string(Addr, cbuff);
}
String stemp(cbuff);
return stemp;
}
void setup(){
m.init(); // module initialize
m.setIntensity(0); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
}
void loop(){
String text;
if (Serial.available()) {
for (int i = 0 ; i < 512 ; i++) {
EEPROM.write(i, 0);
}
//eeprom_erase_all(byte b = 0xFF);
text = Serial.readString();
write_StringEE(0, text);//Write string starting at address 0
}
else{
int i;
for (i = 0; i <= 512; i++) {
byte c = EEPROM.read(i);
//printStringWithShift(" ", 100);
printCharWithShift(c, 100);
//printStringWithShift(" ", 100);
}
}
}
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
#include <EEPROM.h>
const PROGMEM prog_uchar CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};
int maxInUse = 5; //change this variable to set how many MAX7219's you'll use
byte buffer[10];
void setup(){
m.init(); // module initialize
m.setIntensity(0); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
}
void loop(){
if (Serial.available()) {
byte b = Serial.read();
int i;
printCharWithShift(b, 100);
}
else{
int i;
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
================================================================
104. MATRIX-RTC-DHT22
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
#include <EEPROM.h>
//===============================
const float fVerNum = 0.03;
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
#include <stdlib.h>
#include "DHT.h" //include the temp sensor library
#define DHTPIN 7 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 temp&humid sensor
DHT dht(DHTPIN, DHTTYPE);
//=====================================
const PROGMEM prog_uchar CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B00100100, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};
int data = 12; // 8, DIN pin of MAX7219 module
int load = 10; // 9, CS pin of MAX7219 module
int clock = 11; // 10, CLK pin of MAX7219 module
int maxInUse = 9; //change this variable to set how many MAX7219's you'll use
byte buffer[10];
void eeprom_serial_dump_column() {
int i;
byte b;
char buf[10];
int i;
int j;
byte b;
char buf[10];
j = 0;
if (j == 0) {
sprintf(buf, "%03X: ", i);
Serial.print(buf);
}
b = EEPROM.read(i);
j++;
if (j == bytesPerRow) {
j = 0;
Serial.println(buf);
}
else {
Serial.print(buf);
}
}
}
int i;
return true;
}
return true;
}
boolean eeprom_write_int(int addr, int value) {
byte *ptr;
ptr = (byte*)&value;
return eeprom_write_bytes(addr, ptr, sizeof(value));
}
int numBytes;
numBytes = strlen(string) + 1;
return true;
}
int start_time;
int stop_time;
void start_timing() {
start_time = millis();
}
void print_elapsed() {
stop_time = millis();
Serial.print("Time elapsed (ms): ");
Serial.println(stop_time - start_time);
}
//======================================
bool write_StringEE(int Addr, String input)
{
char cbuff[input.length() + 1];
input.toCharArray(cbuff, input.length() + 1);
return eeprom_write_string(Addr, cbuff);
}
char cbuff[length+1];
eeprom_read_string(Addr, cbuff, length+1);
String stemp(cbuff);
return stemp;
///===================================================
void setup(){
m.init(); // module initialize
m.setIntensity(0); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
m.setIntensity(1); // dot matix intensity 0-15
dht.begin();
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
RTC.adjust(DateTime(__DATE__, __TIME__));
}
//====================================================
}
void loop(){
String text;
if (Serial.available()) {
}
else{
int i;
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
void waktu(){
float t = dht.readTemperature();
float h = dht.readHumidity();
char temp[4];
char hum[4];
itoa(t,temp,10); //convert int to char!!!!
itoa(h,hum,10); //convert int to char!!!!
DateTime now = RTC.now();
int mt = (now.month());
int dy = (now.day());
int y = (now.year());
int jm = (now.hour());
int men = (now.minute());
int dt = (now.second());
char tahun[5];
char bulan[4];
char tanggal[4];
char jam[4];
char menit[4];
char detik[4];
if(now.dayOfWeek()==1){
printStringWithShift("MONDAY", 100);
}
if(now.dayOfWeek()==2){
printStringWithShift("TUESDAY", 100);
}
if(now.dayOfWeek()==3){
printStringWithShift("WEDNESDAY", 100);
}
if(now.dayOfWeek()==4){
printStringWithShift("THURSDAY", 100);
}
if(now.dayOfWeek()==5){
printStringWithShift("FRIDAY", 100);
}
if(now.dayOfWeek()==6){
printStringWithShift("SATURDAY", 100);
}
if(now.dayOfWeek()==0){
printStringWithShift("SUNDAY", 100);
}
printStringWithShift(" ", 100);
printStringWithShift(tanggal, 100);
printStringWithShift("/", 100);
printStringWithShift(bulan, 100);
printStringWithShift("/", 100);
printStringWithShift(tahun, 100);
printStringWithShift(" ", 100);
printStringWithShift(jam, 100);
printStringWithShift(":", 100);
printStringWithShift(menit, 100);
printStringWithShift(":", 100);
printStringWithShift(detik, 100);
printStringWithShift(" ", 100);
printStringWithShift("temp: ", 100);
printStringWithShift(temp, 100);
printStringWithShift(" C ", 100);
printStringWithShift("humidity: ", 100);
printStringWithShift(hum, 100);
printStringWithShift(" % ", 100);
printStringWithShift(" ", 100);
m.shiftLeft(false, true);
}
============================================================
105. KEYPAD LOCK PASSWORD
/*
and press "#" than enter your password and press*. The LED will turn ON and will OFF.
*/
#include <Password.h> //http://playground.arduino.cc/uploads/Code/Password.zip //tells to use
password library
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip //tells to use
keypad library
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad
void setup(){
Serial.begin(9600);
delay(200);
pinMode(13, OUTPUT);
keypad.addEventListener(keypadEvent); //add an event listener for this keypad
}
void loop(){
keypad.getKey();
}
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
Serial.print("Enter:");
Serial.println(eKey);
delay(10);
switch (eKey){
case '*': checkPassword(); delay(1); break;
case '#': password.reset(); delay(1); break;
default: password.append(eKey); delay(1);
}
}
}
void checkPassword(){
Serial.println("Accepted");
digitalWrite(13, HIGH);//turn on
delay(5000); //wait 5 seconds
digitalWrite(13, LOW);// turn off
}else{
Serial.println("Denied"); //if passwords wrong keep locked
digitalWrite(13, LOW);//turn off
}
}
=================================================================
106. WIRELESS RF TEMPERATURE AND RH
Transmitter
// Defininition
#define dhtPin 4
#define dhtType DHT11
#define txPowerPin 8 // virtual pin, allways different with vw_set_tx_pin
// using the DHT library
DHT dht(dhtPin, dhtType);
// Variables
char msg0[3];
char msg1[3];
int tem = 0;
int hum = 0;
digitalWrite(txPowerPin, LOW);
}
Receiver
// Variables
int tem = 0;
int i;
int led = 13;
// Setup function - run one time
void setup() {
lcd.begin(16,2); // Defining the LCD
lcd.createChar(1, degreesymbol); // Creating the degree symbol at place 1
Serial.begin(9600); // For debugging purpose
vw_setup(4800); // VirtualWire communication speed
vw_rx_start(); // Getting redy to receive
vw_set_rx_pin(2); // VirtualWiore receive pin
lcd.clear(); // Clear the LCD
}
Serial.print("Hum: ");
for (i=2;i<4;i++) // Get the two last bytes
{
Serial.write(buf[i]); // Debugging
lcd.write(buf[i]); // Write the last bytes on the LCD
}
Serial.print(" %");
lcd.print("% RH");
Serial.println();
}
else{
digitalWrite(led, LOW);
}
}
107. SEND ANALOG DATA VIA RF
Transmitter
/*
Sensor Transmitter
By Markus Ulfberg 2012-07-06
Takes a sensor reading 0-1023
converts it to a char array and sends
to RF receiver unit via VirtualWire
*/
#include <VirtualWire.h>
#define txPowerPin 8
// LED's
const int ledPin = 13;
// Sensors
const int Sensor1Pin = A2;
// const int Sensor2Pin = 3;
int Sensor1Data;
//int Sensor2Data;
char Sensor1CharMsg[4];
void setup() {
pinMode(txPowerPin, OUTPUT);
pinMode(txPowerPin, LOW);
// PinModes
// LED
pinMode(ledPin,OUTPUT);
// Sensor(s)
pinMode(Sensor1Pin,INPUT);
// for debugging
Serial.begin(9600);
// VirtualWire setup
vw_setup(2000); // Bits per sec
vw_set_tx_pin(12); // VirtualWire transmit pin
void loop() {
digitalWrite(txPowerPin, HIGH);
// Read and store Sensor 1 data
Sensor1Data = analogRead(Sensor1Pin);
// DEBUG
Serial.print("Sensor1 Integer: ");
Serial.print(Sensor1Data);
Serial.print(" Sensor1 CharMsg: ");
Serial.print(Sensor1CharMsg);
Serial.println(" ");
delay(1000);
// END DEBUG
Receiver
/*
Sensor Receiver
By Markus Ulfberg 2012-07-06
*/
#include <VirtualWire.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
/*
For details about the LCD display with I2C support see
http://www.fasttech.com/reviews/1380909/22072
and
http://dx.com/p/funduino-iic-i2c-1602-lcd-adapter-board-w-2-5-lcd-screen-black-green-red-173588
The reviewer comments by docpayce and particularly JackWP associated with the two product
pages above have been very useful.
Connect the LCD: VCC -> 5V, GND -> GND, SDA -> A4 (PortC4, ADC4), SCL -> A5 (PortC5,
SDA)
LiquidCrystal_I2C
lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,BACKLIGHT_PIN,POSI
TIVE);
LCD *myLCD = &lcd;
// LED's
int ledPin = 13;
// Sensors
int Sensor1Data;
// RF Transmission container
char Sensor1CharMsg[4];
void setup() {
Serial.begin(9600);
lcd.begin(16,2); // initialize the lcd
lcd.home ();
// sets the digital pin as output
pinMode(ledPin, OUTPUT);
// VirtualWire
// Initialise the IO and ISR
// Required for DR3100
vw_set_ptt_inverted(true);
// Bits per sec
vw_setup(2000);
void loop(){
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
// Non-blocking
if (vw_get_message(buf, &buflen))
{
int i;
// Turn on a light to show received good message
digitalWrite(13, true);
// DEBUG
Serial.print("Sensor 1: ");
Serial.println(Sensor1Data);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SensorData = ");
lcd.setCursor(0, 1);
lcd.print(Sensor1Data);
// END DEBUG
#include <IRremote.h>
int RECV_PIN = 3;
//int OUTPUT_PIN = 4;
IRrecv irrecv(RECV_PIN);
decode_results results;
int pinLED = 5; //don't use pin D11
int brighness = 0;
void setup()
{
Serial.begin(9600);
//pinMode(OUTPUT_PIN, OUTPUT);
pinMode(13, OUTPUT);
pinMode(pinLED, OUTPUT);
irrecv.enableIRIn(); // Start the receiver
}
int on = 0;
unsigned long last = millis();
void loop() {
brighness = constrain(brighness, 0, 255);
analogWrite(pinLED, brighness);
Serial.println(brighness);
delay(20);
if (irrecv.decode(&results)) {
if (results.value == 0xEF1020DF) { //enter you remote code
brighness++;
}
else if (results.value == 0xEF10A05F) { //enter you remote code
brighness--;
}
irrecv.resume(); // Receive the next value
}
}
#include <IRremote.h>
#include <EEPROM.h>
int RECV_PIN = 3;
IRrecv irrecv(RECV_PIN);
decode_results results;
int pinLED = 5; //don't use pin D11
int brighness = 0;
void setup()
{
Serial.begin(9600);
pinMode(pinLED, OUTPUT);
irrecv.enableIRIn(); // Start the receiver
}
int on = 0;
unsigned long last = millis();
void loop() {
brighness = constrain(brighness, 0, 255);
if (irrecv.decode(&results)) {
if (results.value == 0xEF1020DF) {
brighness++;
EEPROM.write(1, brighness);
}
else if (results.value == 0xEF10A05F) {
brighness--;
EEPROM.write(1, brighness);
}
irrecv.resume(); // Receive the next value
}
brighness = EEPROM.read(1);
analogWrite(pinLED, brighness);
Serial.println(brighness);
}
========================================================
109. DC FAN SPEED CONTROL BY IR REMOTE
Pada proyek ini kita gunakan transistor mosfet RFP30N06LE sebagai switch fan.
#include <IRremote.h>
int RECV_PIN = 3;
//int OUTPUT_PIN = 4;
IRrecv irrecv(RECV_PIN);
decode_results results;
int pinLED = 5; //go to MOSFET input
int SpeedFan = 0;
void setup()
{
Serial.begin(9600);
//pinMode(OUTPUT_PIN, OUTPUT);
pinMode(13, OUTPUT);
pinMode(pinLED, OUTPUT);
irrecv.enableIRIn(); // Start the receiver
}
int on = 0;
unsigned long last = millis();
void loop() {
SpeedFan = constrain(SpeedFan, 0, 255);
analogWrite(pinLED, SpeedFan);
Serial.println(SpeedFan);
delay(20);
if (irrecv.decode(&results)) {
if (results.value == 0xEF1020DF) {
SpeedFan++;
}
else if (results.value == 0xEF10A05F) {
SpeedFan--;
}
irrecv.resume(); // Receive the next value
}
}
#include <IRremote.h>
#include <EEPROM.h>
int RECV_PIN = 3;
IRrecv irrecv(RECV_PIN);
decode_results results;
int pinLED = 5; //go to MOSFET input
int SpeedFan = 0;
void setup()
{
Serial.begin(9600);
pinMode(pinLED, OUTPUT);
irrecv.enableIRIn(); // Start the receiver
}
int on = 0;
unsigned long last = millis();
void loop() {
SpeedFan = constrain(SpeedFan, 0, 255);
if (irrecv.decode(&results)) {
if (results.value == 0xEF1020DF) {
SpeedFan++;
EEPROM.write(1, SpeedFan);
}
else if (results.value == 0xEF10A05F) {
SpeedFan--;
EEPROM.write(1, SpeedFan);
}
irrecv.resume(); // Receive the next value
}
SpeedFan = EEPROM.read(1);
analogWrite(pinLED, SpeedFan);
Serial.println(SpeedFan);
}
110. CONTROL KECERAHAN LED BY LDR
int level = 0;
int encoder_pin = 5;
void setup()
{
Serial.begin(9600);
pinMode(encoder_pin, OUTPUT);
}
void loop() {
int sensorValue = analogRead(A0);
level = map(sensorValue, 0, 1023, 255, 0);
analogWrite(encoder_pin, level);
Serial.print(sensorValue);
Serial.print(" ");
Serial.println(level);
}
===============================================================
111. CONTROL LED BRIGHNESS BY SERIAL
#include <avr/interrupt.h>
#include <avr/eeprom.h>
int addr = 1;
int readValue = 0;
int a;
int encoder_pin = 5;
void setup()
{
Serial.begin(9600);
pinMode(encoder_pin, INPUT);
}
void loop() {
if (Serial.available() > 0) {
a = Serial.parseInt();
while (!eeprom_is_ready());
cli();
if(eeprom_read_word((uint16_t*)addr) != a) {
eeprom_write_word((uint16_t*)addr, a);
}
sei();
}
else{
readValue = eeprom_read_word((uint16_t*)addr);
Serial.print("Serial Input = ");
Serial.println(readValue);
readValue = constrain(readValue, 0, 255);
analogWrite(encoder_pin, readValue);
}
===================================================================
112. EEPROM BIG NUMBER AND PWM SETTING
#include <avr/interrupt.h>
#include <avr/eeprom.h>
int addr = 1;
int readValue;
int a;
int b;
int encoder_pin = 5;
void setup()
{
Serial.begin(9600);
pinMode(encoder_pin, INPUT);
}
void loop() {
if (Serial.available() > 0) {
a = Serial.parseFloat();
while (!eeprom_is_ready());
cli();
if(eeprom_read_word((uint16_t*)addr) != a) {
eeprom_write_word((uint16_t*)addr, a);
}
sei();
}
else{
readValue = eeprom_read_word((uint16_t*)addr);
b=readValue*10;
Serial.print("Serial Input = ");
Serial.print(readValue);
Serial.print(" ");
Serial.println(b);
readValue = constrain(readValue, 0, 255);
analogWrite(encoder_pin, readValue);
}
================================================================
113. MOTOR SPEED MEASUREMENT
int encoder_pin = 2; // pulse output from the module
int pulses;
unsigned long timeold;
int pinState = 0;
int lastpinState = 0;
int laju;
int turn;
void setup()
{
Serial.begin(9600);
pinMode(encoder_pin, INPUT);
attachInterrupt(0, counter, FALLING);
pulses = 0;
timeold = 0;
}
void loop()
{
if (millis() - timeold >= 500) {
detachInterrupt(0);
laju=(pulses)*(6.28/10000)*1000*60; //number pulses in 500ms with 20 hole disk
turn=(pulses)/10;
Serial.print(pulses);
Serial.print(" pulses/500ms ");
Serial.print(laju);
Serial.print(" rpm");
Serial.print(" ");
Serial.print(turn);
Serial.println(" turn/second");
timeold = millis();
pulses = 0;
attachInterrupt(0, counter, FALLING);
}
}
void counter()
{
pinState = digitalRead(encoder_pin);
if (pinState != lastpinState) {
if (pinState == HIGH) {
pulses++;
}
lastpinState = pinState;
}
}
===============================================================
114. SPEED CONTROL BY SERIAL
int dir1PinA = 7;
int dir2PinA = 8;
int speedPinA = 9;
#include <avr/interrupt.h>
#include <avr/eeprom.h>
int addr = 1;
int readValue = 0;
int a;
void setup()
{
Serial.begin(9600);
pinMode(dir1PinA,OUTPUT);
pinMode(dir2PinA,OUTPUT);
pinMode(speedPinA,OUTPUT);
}
void loop()
{
if (Serial.available() > 0) {
a = Serial.parseInt();
while (!eeprom_is_ready());
cli();
if(eeprom_read_word((uint16_t*)addr) != a) {
eeprom_write_word((uint16_t*)addr, a);
}
sei();
}
maju();
Serial.print(" Set point: ");
Serial.println(readValue);
}
void maju(){
readValue = eeprom_read_word((uint16_t*)addr);
readValue = constrain(readValue, 0, 255);
analogWrite(speedPinA, readValue);
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
}
====================================================================
115. SPEED CONTROL DC MOTOR WITH SPEED SENSOR
void setup()
{
Serial.begin(9600);
pinMode(encoder_pin, INPUT);
attachInterrupt(0, counter, FALLING);
pulses = 0;
timeold = 0;
pinMode(dir1PinA,OUTPUT);
pinMode(dir2PinA,OUTPUT);
pinMode(speedPinA,OUTPUT);
}
void loop()
{
if (Serial.available() > 0) {
a = Serial.parseInt();
while (!eeprom_is_ready());
cli();
if(eeprom_read_word((uint16_t*)addr) != a) {
eeprom_write_word((uint16_t*)addr, a);
}
sei();
}
signalPWM = constrain(signalPWM, 0, 255);
readValue = eeprom_read_word((uint16_t*)addr);
maju();
if (millis() - timeold >= 100) {
detachInterrupt(0);
laju=(pulses)*(6.28/2000)*1000*60; //number pulses in 100ms with 20 hole disk
turn=(pulses)/2;
if (laju <= readValue) {
signalPWM++;
}
else if (laju > readValue) {
signalPWM--;
}
Serial.print(pulses);
Serial.print(" pulses/100ms ");
Serial.print(" Speed: ");
Serial.print(laju);
Serial.print(" rpm ");
Serial.print(turn);
Serial.print(" turn/second ");
Serial.print(" PWM signal: ");
Serial.print(signalPWM);
Serial.print(" Set point: ");
Serial.println(readValue);
timeold = millis();
pulses = 0;
attachInterrupt(0, counter, FALLING);
}
}
void counter()
{
pinState = digitalRead(encoder_pin);
if (pinState != lastpinState) {
if (pinState == HIGH) {
pulses++;
}
lastpinState = pinState;
}
}
void maju(){
readValue = eeprom_read_word((uint16_t*)addr);
analogWrite(speedPinA, signalPWM);//Sets speed variable via PWM
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
====================================================================
116. PASSWORD KEYPAD WITH I2C LCD
#include <Password.h>
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LCD.h>
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C
lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,BACKLIGHT_PIN,POSI
TIVE);
LCD *myLCD = &lcd;
char keys[ROWS][COLS] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
void setup()
{
Serial.begin(9600);
keypad.addEventListener(keypadEvent);
pinMode(ledRed, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(ledRed, HIGH);
digitalWrite(ledGreen, LOW);
lcd.begin(16, 2);
lcd.setCursor(1,0);
lcd.print(" :Welcome:");
lcd.setCursor(0,1);
lcd.print("PLEASE ENTER PIN");
}
void loop()
{
keypad.getKey();
}
void keypadEvent(KeypadEvent eKey)
{
switch (keypad.getState())
{
case PRESSED:
int i;
for( i = 1; i <= 1; i++ )
{
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
delay(50);
}
Serial.print("Pressed: ");
Serial.println(eKey);
switch (eKey)
{
/*
case '#':
break;
case '*':
break;
*/
default:
ilosc=ilosc+1;
password.append(eKey);
}
//Serial.println(ilosc);
if(ilosc == 1)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("*_");
}
if(ilosc == 2)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("**_");
}
if(ilosc == 3)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("***_");
}
if(ilosc == 4)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("****_");
}
if(ilosc == 5)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("*****_");
}
if(ilosc == 6)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("******_");
}
if(ilosc == 7)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("*******_");
}
if(ilosc == 8)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("********");
}
if(ilosc == dlugosc)
{
delay(250);
checkPassword();
ilosc = 0;
}
}
}
void checkPassword()
{
if (password.evaluate())
{
int i;
for( i = 1; i <= 2; i++ )
{
digitalWrite(buzzer, HIGH);
delay(70);
digitalWrite(buzzer, LOW);
delay(70);
}
ilosc = 0;
//===============Event that want to do if pin right
Serial.println("Success");
digitalWrite(ledRed, LOW);
digitalWrite(ledGreen, HIGH);
lcd.clear();
lcd.setCursor(0,1);
lcd.print(" << SUCCESS >>");
//======================================================
}
else
{
int i;
for( i = 1; i <= 1; i++ )
{
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
}
ilosc = 0;
password.reset();
Serial.println("Wrong");
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, HIGH);
lcd.clear();
lcd.setCursor(0,1);
lcd.print(" << WRONG >>");
delay(2000);
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" :Welcome:");
lcd.setCursor(0,1);
lcd.print("PLEASE ENTER PIN");
}
}
#include <Password.h>
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LCD.h>
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C
lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,BACKLIGHT_PIN,POSI
TIVE);
LCD *myLCD = &lcd;
char keys[ROWS][COLS] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
void setup()
{
Serial.begin(9600);
keypad.addEventListener(keypadEvent);
pinMode(ledRed, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(ledRed, HIGH);
digitalWrite(ledGreen, LOW);
lcd.begin(16, 2);
lcd.setCursor(1,0);
lcd.print(" :Welcome:");
lcd.setCursor(0,1);
lcd.print("PLEASE ENTER PIN");
}
void loop()
{
keypad.getKey();
}
void keypadEvent(KeypadEvent eKey)
{
switch (keypad.getState())
{
case PRESSED:
int i;
for( i = 1; i <= 1; i++ )
{
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
delay(50);
}
Serial.print("Pressed: ");
Serial.println(eKey);
switch (eKey)
{
/*
case '#':
break;
case '*':
break;
*/
default:
ilosc=ilosc+1;
password.append(eKey);
}
//Serial.println(ilosc);
if(ilosc == 1)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("*_");
}
if(ilosc == 2)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("**_");
}
if(ilosc == 3)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("***_");
}
if(ilosc == 4)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("****_");
}
if(ilosc == 5)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("*****_");
}
if(ilosc == 6)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("******_");
}
if(ilosc == 7)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("*******_");
}
if(ilosc == 8)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("********");
}
if(ilosc == dlugosc)
{
delay(250);
checkPassword();
ilosc = 0;
}
}
}
void checkPassword()
{
if (password.evaluate())
{
int i;
for( i = 1; i <= 2; i++ )
{
digitalWrite(buzzer, HIGH);
delay(70);
digitalWrite(buzzer, LOW);
delay(70);
}
ilosc = 0;
//===============Event that want to do if pin right
Serial.println("Success");
digitalWrite(ledRed, LOW);
digitalWrite(ledGreen, HIGH);
lcd.clear();
lcd.setCursor(0,1);
lcd.print(" << SUCCESS >>");
password.reset();
delay(3000);
digitalWrite(ledRed, LOW);
digitalWrite(ledGreen, LOW);
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" :Welcome:");
lcd.setCursor(0,1);
lcd.print("PLEASE ENTER PIN");
//======================================================
}
else
{
int i;
for( i = 1; i <= 1; i++ )
{
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
}
ilosc = 0;
password.reset();
Serial.println("Wrong");
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, HIGH);
lcd.clear();
lcd.setCursor(0,1);
lcd.print(" << WRONG >>");
delay(2000);
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" :Welcome:");
lcd.setCursor(0,1);
lcd.print("PLEASE ENTER PIN");
}
}
117. SEND CHARACTER VIA RF
Transmitter
#include <VirtualWire.h>
char inData[10];
int newmessage = 0;
void setup() {
vw_setup(1000);
vw_set_tx_pin(12);
Serial.begin(9600);
}
void loop()
{
char inChar;
byte index = 0;
char mss[50];
while(Serial.available() > 1){
if(index < 49)
{
delay(10);
inChar = Serial.read();
inData[index] = inChar;
index++;
inData[index] = '\0';
}
newmessage = 1;
}
if(newmessage == 1){
inData[0] = '-';
sprintf(mss, "%s", inData);
vw_send((uint8_t *)mss, strlen(mss));
vw_wait_tx();
Serial.println(mss);
delay(100);
newmessage = 0; // Indicate that there is no new message to wait for the new one
}
}
Receiver
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600);
Serial.println("Listening");
vw_setup(1000);
vw_rx_start();
vw_set_rx_pin(2);
}
void loop()
{
byte message[VW_MAX_MESSAGE_LEN];
byte messageLength = VW_MAX_MESSAGE_LEN;
if (vw_get_message(message, &messageLength))
{
for (int i = 0; i < messageLength; i++)
{
Serial.write(message[i]);
}
Serial.println();
}
}
====================================================================
118. SEVEN SEGMENT
Common Anode
void setup() {
pinMode(seg_a,OUTPUT); // configure all pins used to outputs
pinMode(seg_b,OUTPUT);
pinMode(seg_c,OUTPUT);
pinMode(seg_d,OUTPUT);
pinMode(seg_e,OUTPUT);
pinMode(seg_f,OUTPUT);
pinMode(seg_g,OUTPUT);
pinMode(seg_dp,OUTPUT);
pinMode(com,OUTPUT);
}
void loop() {
digitalWrite(com,HIGH); // set common anode HIGH (5V)
for (int i = 0; i < 10; i++) { // count 0 - 9
switch(i){ // switch statemet to select the number
case 1:
digitalWrite(seg_a,HIGH);
digitalWrite(seg_b,LOW);
digitalWrite(seg_c,LOW);
digitalWrite(seg_d,HIGH);
digitalWrite(seg_e,HIGH);
digitalWrite(seg_f,HIGH);
digitalWrite(seg_g,HIGH);
digitalWrite(seg_dp,HIGH);
break;
case 2:
digitalWrite(seg_a,LOW);
digitalWrite(seg_b,LOW);
digitalWrite(seg_c,HIGH);
digitalWrite(seg_d,LOW);
digitalWrite(seg_e,LOW);
digitalWrite(seg_f,HIGH);
digitalWrite(seg_g,LOW);
digitalWrite(seg_dp,HIGH);
break;
case 3:
digitalWrite(seg_a,LOW);
digitalWrite(seg_b,LOW);
digitalWrite(seg_c,LOW);
digitalWrite(seg_d,LOW);
digitalWrite(seg_e,HIGH);
digitalWrite(seg_f,HIGH);
digitalWrite(seg_g,LOW);
digitalWrite(seg_dp,HIGH);
break;
case 4:
digitalWrite(seg_a,HIGH);
digitalWrite(seg_b,LOW);
digitalWrite(seg_c,LOW);
digitalWrite(seg_d,HIGH);
digitalWrite(seg_e,HIGH);
digitalWrite(seg_f,LOW);
digitalWrite(seg_g,LOW);
digitalWrite(seg_dp,HIGH);
break;
case 5:
digitalWrite(seg_a,LOW);
digitalWrite(seg_b,HIGH);
digitalWrite(seg_c,LOW);
digitalWrite(seg_d,LOW);
digitalWrite(seg_e,HIGH);
digitalWrite(seg_f,LOW);
digitalWrite(seg_g,LOW);
digitalWrite(seg_dp,HIGH);
break;
case 6:
digitalWrite(seg_a,LOW);
digitalWrite(seg_b,HIGH);
digitalWrite(seg_c,LOW);
digitalWrite(seg_d,LOW);
digitalWrite(seg_e,LOW);
digitalWrite(seg_f,LOW);
digitalWrite(seg_g,LOW);
digitalWrite(seg_dp,HIGH);
break;
case 7:
digitalWrite(seg_a,LOW);
digitalWrite(seg_b,LOW);
digitalWrite(seg_c,LOW);
digitalWrite(seg_d,HIGH);
digitalWrite(seg_e,HIGH);
digitalWrite(seg_f,HIGH);
digitalWrite(seg_g,HIGH);
digitalWrite(seg_dp,HIGH);
break;
case 8:
digitalWrite(seg_a,LOW);
digitalWrite(seg_b,LOW);
digitalWrite(seg_c,LOW);
digitalWrite(seg_d,LOW);
digitalWrite(seg_e,LOW);
digitalWrite(seg_f,LOW);
digitalWrite(seg_g,LOW);
digitalWrite(seg_dp,HIGH);
break;
case 9:
digitalWrite(seg_a,LOW);
digitalWrite(seg_b,LOW);
digitalWrite(seg_c,LOW);
digitalWrite(seg_d,LOW);
digitalWrite(seg_e,HIGH);
digitalWrite(seg_f,LOW);
digitalWrite(seg_g,LOW);
digitalWrite(seg_dp,HIGH);
break;
}
delay(1000); // Show each number for 1 second
}
Common Cathode
void setup() {
pinMode(seg_a,OUTPUT); // configure all pins used to outputs
pinMode(seg_b,OUTPUT);
pinMode(seg_c,OUTPUT);
pinMode(seg_d,OUTPUT);
pinMode(seg_e,OUTPUT);
pinMode(seg_f,OUTPUT);
pinMode(seg_g,OUTPUT);
pinMode(seg_dp,OUTPUT);
pinMode(com,OUTPUT);
void loop() {
digitalWrite(com,LOW); // set common anode HIGH (5V)
for (int i = 0; i < 10; i++) { // count 0 - 9
switch(i){ // switch statemet to select the number
case 0: // set relevent segments HIGH and others LOW
digitalWrite(seg_a,HIGH);
digitalWrite(seg_b,HIGH);
digitalWrite(seg_c,HIGH);
digitalWrite(seg_d,HIGH);
digitalWrite(seg_e,HIGH);
digitalWrite(seg_f,HIGH);
digitalWrite(seg_g,LOW);
digitalWrite(seg_dp,LOW);
break;
case 1:
digitalWrite(seg_a,LOW);
digitalWrite(seg_b,HIGH);
digitalWrite(seg_c,HIGH);
digitalWrite(seg_d,LOW);
digitalWrite(seg_e,LOW);
digitalWrite(seg_f,LOW);
digitalWrite(seg_g,LOW);
digitalWrite(seg_dp,LOW);
break;
case 2:
digitalWrite(seg_a,HIGH);
digitalWrite(seg_b,HIGH);
digitalWrite(seg_c,LOW);
digitalWrite(seg_d,HIGH);
digitalWrite(seg_e,HIGH);
digitalWrite(seg_f,LOW);
digitalWrite(seg_g,HIGH);
digitalWrite(seg_dp,LOW);
break;
case 3:
digitalWrite(seg_a,HIGH);
digitalWrite(seg_b,HIGH);
digitalWrite(seg_c,HIGH);
digitalWrite(seg_d,HIGH);
digitalWrite(seg_e,LOW);
digitalWrite(seg_f,LOW);
digitalWrite(seg_g,HIGH);
digitalWrite(seg_dp,LOW);
break;
case 4:
digitalWrite(seg_a,LOW);
digitalWrite(seg_b,HIGH);
digitalWrite(seg_c,HIGH);
digitalWrite(seg_d,LOW);
digitalWrite(seg_e,LOW);
digitalWrite(seg_f,HIGH);
digitalWrite(seg_g,HIGH);
digitalWrite(seg_dp,LOW);
break;
case 5:
digitalWrite(seg_a,HIGH);
digitalWrite(seg_b,LOW);
digitalWrite(seg_c,HIGH);
digitalWrite(seg_d,HIGH);
digitalWrite(seg_e,LOW);
digitalWrite(seg_f,HIGH);
digitalWrite(seg_g,HIGH);
digitalWrite(seg_dp,LOW);
break;
case 6:
digitalWrite(seg_a,HIGH);
digitalWrite(seg_b,LOW);
digitalWrite(seg_c,HIGH);
digitalWrite(seg_d,HIGH);
digitalWrite(seg_e,HIGH);
digitalWrite(seg_f,HIGH);
digitalWrite(seg_g,HIGH);
digitalWrite(seg_dp,LOW);
break;
case 7:
digitalWrite(seg_a,HIGH);
digitalWrite(seg_b,HIGH);
digitalWrite(seg_c,HIGH);
digitalWrite(seg_d,LOW);
digitalWrite(seg_e,LOW);
digitalWrite(seg_f,LOW);
digitalWrite(seg_g,LOW);
digitalWrite(seg_dp,LOW);
break;
case 8:
digitalWrite(seg_a,HIGH);
digitalWrite(seg_b,HIGH);
digitalWrite(seg_c,HIGH);
digitalWrite(seg_d,HIGH);
digitalWrite(seg_e,HIGH);
digitalWrite(seg_f,HIGH);
digitalWrite(seg_g,HIGH);
digitalWrite(seg_dp,LOW);
break;
case 9:
digitalWrite(seg_a,HIGH);
digitalWrite(seg_b,HIGH);
digitalWrite(seg_c,HIGH);
digitalWrite(seg_d,HIGH);
digitalWrite(seg_e,LOW);
digitalWrite(seg_f,HIGH);
digitalWrite(seg_g,HIGH);
digitalWrite(seg_dp,LOW);
break;
}
delay(1000); // Show each number for 1 second
}
void setup() {
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
writeDot(1); // start with the "dot" off
//writeDot(0); // start with the "dot" on
}
void loop() {
// write '9'
digitalWrite(12, 1);
digitalWrite(11, 0);
digitalWrite(10, 0);
digitalWrite(9, 0);
digitalWrite(8, 0);
digitalWrite(7, 1);
digitalWrite(6, 0);
digitalWrite(5, 0);
delay(1000);
// write '8'
digitalWrite(12, 1);
digitalWrite(11, 0);
digitalWrite(10, 0);
digitalWrite(9, 0);
digitalWrite(8, 0);
digitalWrite(7, 0);
digitalWrite(6, 0);
digitalWrite(5, 0);
delay(1000);
// write '7'
digitalWrite(12, 1);
digitalWrite(11, 0);
digitalWrite(10, 0);
digitalWrite(9, 0);
digitalWrite(8, 1);
digitalWrite(7, 1);
digitalWrite(6, 1);
digitalWrite(5, 1);
delay(1000);
// write '6'
digitalWrite(12, 1);
digitalWrite(11, 0);
digitalWrite(10, 1);
digitalWrite(9, 0);
digitalWrite(8, 0);
digitalWrite(7, 0);
digitalWrite(6, 0);
digitalWrite(5, 0);
delay(1000);
// write '5'
digitalWrite(12, 1);
digitalWrite(11, 0);
digitalWrite(10, 1);
digitalWrite(9, 0);
digitalWrite(8, 0);
digitalWrite(7, 1);
digitalWrite(6, 0);
digitalWrite(5, 0);
delay(1000);
// write '4'
digitalWrite(12, 1);
digitalWrite(11, 1);
digitalWrite(10, 0);
digitalWrite(9, 0);
digitalWrite(8, 1);
digitalWrite(7, 1);
digitalWrite(6, 0);
digitalWrite(5, 0);
delay(1000);
// write '3'
digitalWrite(12, 1);
digitalWrite(11, 0);
digitalWrite(10, 0);
digitalWrite(9, 0);
digitalWrite(8, 0);
digitalWrite(7, 1);
digitalWrite(6, 1);
digitalWrite(5, 0);
delay(1000);
// write '2'
digitalWrite(12, 1);
digitalWrite(11, 0);
digitalWrite(10, 0);
digitalWrite(9, 1);
digitalWrite(8, 0);
digitalWrite(7, 0);
digitalWrite(6, 1);
digitalWrite(5, 0);
delay(1000);
// write '1'
digitalWrite(12, 1);
digitalWrite(11, 1);
digitalWrite(10, 0);
digitalWrite(9, 0);
digitalWrite(8, 1);
digitalWrite(7, 1);
digitalWrite(6, 1);
digitalWrite(5, 1);
delay(1000);
// write '0'
digitalWrite(12, 1);
digitalWrite(11, 0);
digitalWrite(10, 0);
digitalWrite(9, 0);
digitalWrite(8, 0);
digitalWrite(7, 0);
digitalWrite(6, 0);
digitalWrite(5, 1);
delay(1000);
}
void setup() {
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
writeDot(1); // start with the "dot" off
}
void loop() {
digitalWrite(12, HIGH);
for (byte count = 10; count > 0; --count) {
delay(1000);
sevenSegWrite(count - 1);
}
}
====================================================================
119. SEVEN SEGMENT DATA DISPLAY
void setup(){
for(int i=0;i<4;i++)
{
pinMode(digitPins[i],OUTPUT);
}
pinMode(tempPin, INPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(tempPin, INPUT);
}
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B11111111);
digitalWrite(latchPin, HIGH);
delayMicroseconds(100);
digitalWrite(digitPins[digitScan], HIGH);
digitalWrite(latchPin, LOW);
digitalWrite(latchPin, HIGH);
digitScan++;
if(digitScan>3) digitScan=0;
void loop(){
data = analogRead(tempPin);
digitBuffer[3] = int(data)/1000;
digitBuffer[2] = (int(data)%1000)/100;
digitBuffer[1] = (int(data)%100)/10;
digitBuffer[0] = (int(data)%100)%10;
updateDisp();
delay(2);
}
120. SERIAL MONITOR TO SEVEN SEG DISPLAY
//---------Common Anode----------------------
#include "Timer.h" //include timer library
Timer t; // craete a timer object
long number = 0; //declear the variables
int first_digit = 0;
int second_digit = 0;
int third_digit = 0;
int fourth_digit = 0;
int timer_event = 0;
int CA_1 = 12;
int CA_2 = 11;
int CA_3 = 10;
int CA_4 = 9;
int clk = 6;
int latch = 5;
int data = 4;
int count = 0;
int digits[4] ;
int CAS[4] = {12, 11, 10, 9};
byte numbers[10] {B00000011, B10011111, B00100101, B00001101, B10011001, B01001001,
B01000001, B00011111, B00000001, B00001001};
//byte combinations for each number 0-9
void setup() {
Serial.begin(9600); //serial start and pin config
pinMode(CA_1, OUTPUT);
pinMode(CA_2, OUTPUT);
pinMode(CA_3, OUTPUT);
pinMode(CA_4, OUTPUT);
pinMode(clk, OUTPUT);
pinMode(latch, OUTPUT);
pinMode(data, OUTPUT);
digitalWrite(CA_1, LOW);
digitalWrite(CA_2, LOW);
digitalWrite(CA_3, LOW);
digitalWrite(CA_4, LOW);
Serial.println("please Enter a number from 0 to 9999");
}
void loop() {
t.update(); //timer update
if (Serial.available()) { // read from serial
t.stop(timer_event); //stop timer if anythign to read
cathode_high(); // blank the screen
String s = Serial.readString(); //read the serail value
number = (long)s.toInt(); //convert it to int
if (number > 9999) { //check the number is 0-9999
Serial.println("Please Enter Number Between 0 - 9999");
} else {
break_number(number);
timer_event = t.every(1, display_number); // start timer again
}
void break_number(long num) { // seperate the input number into 4 single digits
digitalWrite(CA_1, LOW);
digitalWrite(CA_2, LOW);
digitalWrite(CA_3, LOW);
digitalWrite(CA_4, LOW);
}
void loop() {
t.update(); //timer update
if (Serial.available()) { // read from serial
t.stop(timer_event); //stop timer if anythign to read
cathode_high(); // blank the screen
String s = Serial.readString(); //read the serail value
number = (long)s.toInt(); //convert it to int
if (number > 9999) { //check the number is 0-9999
Serial.println("Please Enter Number Between 0 - 9999");
} else {
break_number(number);
timer_event = t.every(1, display_number); // start timer again
}
void break_number(long num) { // seperate the input number into 4 single digits
digitalWrite(CA_1, HIGH);
digitalWrite(CA_2, HIGH);
digitalWrite(CA_3, HIGH);
digitalWrite(CA_4, HIGH);
}
=========================================================
121. ANALOG DATA TO MATRIX DISPLAY
void setup(){
m.init(); // module initialize
m.setIntensity(1); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
}
void loop(){
m.init();
m.setIntensity(1);
int sensorValue = analogRead(A0);
char sens[4];
itoa(sensorValue,sens,10); //convert int to char!!!!
printString(sens);
Serial.println(sensorValue);
delay(500);
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
122. ULTRASONIC SENSOR WITH LED MATRIX
#include <Wire.h>
#include <MaxMatrix.h> //include matrix library
#include <avr/pgmspace.h>
#include <stdlib.h>
#define trigPin1 2
#define echoPin1 4
void setup(){
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
m.init(); // module initialize
m.setIntensity(1); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
}
void loop(){
m.init();
m.setIntensity(1);
SonarSensor(trigPin1, echoPin1);
UltraSensor = distance;
Serial.println(UltraSensor);
char jarak[4];
itoa(UltraSensor,jarak,10); //convert int to char!!!!
printString(jarak);
delay(1000);
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
Receiver
void setup(){
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
// Non-blocking
if (vw_get_message(buf, &buflen))
{
int i;
// Turn on a light to show received good message
digitalWrite(13, true);
Sensor1CharMsg[i] = char(buf[i]);
}
Sensor1CharMsg[buflen] = '\0';
digitalWrite(13, false);
}
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
Transmitter
#include <VirtualWire.h>
#define txPowerPin 8
// LED's
const int ledPin = 13;
// Sensors
const int Sensor1Pin = A2;
// const int Sensor2Pin = 3;
int Sensor1Data;
//int Sensor2Data;
char Sensor1CharMsg[4];
void setup() {
pinMode(txPowerPin, OUTPUT);
pinMode(txPowerPin, LOW);
// PinModes
// LED
pinMode(ledPin,OUTPUT);
// Sensor(s)
pinMode(Sensor1Pin,INPUT);
// for debugging
Serial.begin(9600);
// VirtualWire setup
vw_setup(2000); // Bits per sec
vw_set_tx_pin(12); // VirtualWire transmit pin
void loop() {
digitalWrite(txPowerPin, HIGH);
// Read and store Sensor 1 data
Sensor1Data = analogRead(Sensor1Pin);
// DEBUG
Serial.print("Sensor1 Integer: ");
Serial.print(Sensor1Data);
Serial.print(" Sensor1 CharMsg: ");
Serial.print(Sensor1CharMsg);
Serial.println(" ");
//delay(1000);
// END DEBUG
In this section we try to measure body heigh by ultrasonic distance sensor. Data that get from sensor
send to matrix display via RF. The zero can be adjusted by IR remote. The transmitter must be fixed
above of floor not more than 250 cm.
Transmitter
#include <VirtualWire.h>
#include <EEPROM.h>
#define txPowerPin 8
const int ledPin = 13;
#define trigPin1 2
#define echoPin1 4
long duration, distance, UltraSensor;
int Sensor1Data;
char Sensor1CharMsg[4];
int ZeroCalib = 0;
byte ZeroLevel;
#include <IRremote.h>
int RECV_PIN = 9;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
irrecv.enableIRIn(); // Start the receiver
pinMode(txPowerPin, OUTPUT);
pinMode(txPowerPin, LOW);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(ledPin,OUTPUT);
Serial.begin(9600);
vw_setup(1000); // Bits per sec
vw_set_tx_pin(12); // VirtualWire transmit pin
}
unsigned long last = millis();
void loop() {
ZeroCalib = constrain(ZeroCalib, 0, 255);
if (irrecv.decode(&results)) {
if (results.value == 0xEF1020DF) {
ZeroCalib++;
EEPROM.write(1, ZeroCalib);
}
else if (results.value == 0xEF10A05F) {
ZeroCalib--;
EEPROM.write(1, ZeroCalib);
}
irrecv.resume(); // Receive the next value
}
else{
ZeroLevel = EEPROM.read(1);
SonarSensor(trigPin1, echoPin1);
UltraSensor = ZeroLevel-distance;
digitalWrite(txPowerPin, HIGH);
Sensor1Data = UltraSensor;
// Convert integer data to Char array directly
itoa(Sensor1Data,Sensor1CharMsg,10);
// DEBUG
Serial.print("Sensor1 Integer: ");
Serial.print(Sensor1Data);
Serial.print(" Sensor1 CharMsg: ");
Serial.print(Sensor1CharMsg);
Serial.println(" ");
Receiver
void setup(){
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
// Non-blocking
if (vw_get_message(buf, &buflen))
{
int i;
// Turn on a light to show received good message
digitalWrite(13, true);
Sensor1CharMsg[i] = char(buf[i]);
}
Sensor1CharMsg[buflen] = '\0';
digitalWrite(13, false);
}
}
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
125. DHT 22 WITH LED MATRIX-RTC
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
#include <MaxMatrix.h> //include matrix library
const float fVerNum = 0.03;
#include <avr/pgmspace.h>
#include <stdlib.h>
#include "DHT.h" //include the temp sensor library
#define DHTPIN 7 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 11 temp&humid sensor
DHT dht(DHTPIN, DHTTYPE);
void setup(){
//pinMode(2,INPUT); //button input
m.init(); // module initialize
m.setIntensity(0); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
Serial.println("DHTxx test!");
dht.begin();
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop(){
float t = dht.readTemperature();
float h = dht.readHumidity();
char temp[4];
char hum[4];
itoa(t,temp,10); //convert int to char!!!!
itoa(h,hum,10); //convert int to char!!!!
DateTime now = RTC.now();
int mt = (now.month());
int dy = (now.day());
int y = (now.year());
int jm = (now.hour());
int men = (now.minute());
int dt = (now.second());
char tahun[5];
char bulan[4];
char tanggal[4];
char jam[4];
char menit[4];
char detik[4];
if(now.dayOfWeek()==1){
printStringWithShift("MONDAY", 100);
}
if(now.dayOfWeek()==2){
printStringWithShift("TUESDAY", 100);
}
if(now.dayOfWeek()==3){
printStringWithShift("WEDNESDAY", 100);
}
if(now.dayOfWeek()==4){
printStringWithShift("THURSDAY", 100);
}
if(now.dayOfWeek()==5){
printStringWithShift("FRIDAY", 100);
}
if(now.dayOfWeek()==6){
printStringWithShift("SATURDAY", 100);
}
if(now.dayOfWeek()==0){
printStringWithShift("SUNDAY", 100);
}
printStringWithShift(" ", 100);
printStringWithShift(tanggal, 100);
printStringWithShift("/", 100);
printStringWithShift(bulan, 100);
printStringWithShift("/", 100);
printStringWithShift(tahun, 100);
printStringWithShift(" ", 100);
printStringWithShift(jam, 100);
printStringWithShift(":", 100);
printStringWithShift(menit, 100);
printStringWithShift(":", 100);
printStringWithShift(detik, 100);
printStringWithShift(" ", 100);
printStringWithShift("temp: ", 100);
printStringWithShift(temp, 100);
printStringWithShift(" C ", 100);
printStringWithShift("humidity: ", 100);
printStringWithShift(hum, 100);
printStringWithShift(" % ", 100);
printStringWithShift(" ", 100);
m.shiftLeft(false, true);
}
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
====================================================================
126. CONTROL SERVO BY MOUSE
Arduino Sketch
#include <Servo.h>
void setup() {
pinMode(1,OUTPUT);
servo1.attach(14); //analog pin 0
//servo1.setMaximumPulse(2000);
//servo1.setMinimumPulse(700);
void loop() {
static int v = 0;
if ( Serial.available()) {
char ch = Serial.read();
switch(ch) {
case '0'...'9':
v = v * 10 + ch - '0';
break;
case 's':
servo1.write(v);
v = 0;
break;
case 'w':
servo2.write(v);
v = 0;
break;
case 'd':
servo2.detach();
break;
case 'a':
servo2.attach(15);
break;
}
}
//Servo::refresh();
Processing sketch
/**
* Servocontrol (derived from processing Mouse 1D example.)
*
* Updated 24 November 2007
*/
int gx = 15;
int gy = 35;
int spos1=90;
int spos2=90;
void draw()
{
background(0.0);
update(mouseX,mouseY);
/*
fill(mouseX/4);
rect(150, 320, gx*2, gx*2);
fill(180 - (mouseX/4));
rect(450, 320, gy*2, gy*2);
*/
}
gx = x/2;
gy = 100-x/2;
}
127. SETUP BLUETOOTH MODULE AS MASTER OR SLAVE
#include <SoftwareSerial.h>
SoftwareSerial BTserial(2, 3); // RX | TX
// Connect the HC-05 TX to Arduino pin 2 RX.
// Connect the HC-05 RX to Arduino pin 3 TX through a voltage divider.
void setup()
{
Serial.begin(9600);
Serial.println("Arduino is ready");
Serial.println("Remember to select Both NL & CR in the serial monitor");
void loop()
{
First step we have to setup one bluetooth module as master and other one as slave. The master or
slave we can use for transmitter or receiver.
int potValue = 0;
void setup() {
Serial.begin(9600); // Default communication rate of the Bluetooth module
}
void loop() {
potValue = analogRead(A0);
//int potValueMapped = map(potValue, 0, 1023, 0, 180);
Serial.println(potValue); // Sends potValue to servo motor
delay(100);
}
int state = 0;
int buttonState = 0;
void setup() {
Serial.begin(9600); // Default communication rate of the Bluetooth module
}
void loop() {
if(Serial.available() > 0){ // Checks whether data is comming from the serial port
int state = Serial.parseInt(); // Reads the data from the serial port
Serial.println(state);
}
}
129. CONTROL SERVO VIA BLUETOOTH
int potValue = 0;
void setup() {
Serial.begin(9600); // Default communication rate of the Bluetooth module
}
void loop() {
potValue = analogRead(A0);
int potValueMapped = map(potValue, 0, 1023, 0, 180);
Serial.println(potValueMapped); // Sends potValue to servo motor
delay(10);
}
#include <Servo.h>
Servo myServo;
int state = 0;
int buttonState = 0;
void setup() {
myServo.attach(9);
Serial.begin(9600); // Default communication rate of the Bluetooth module
}
void loop() {
if(Serial.available() > 0){ // Checks whether data is comming from the serial port
int state = Serial.parseInt(); // Reads the data from the serial port
Serial.println(state);
myServo.write(state);
}
}
130. SEND ANALOG DATA ARDUINO TO ARDUINO VIA BLUETOOTH BY LED MATRIX
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
int maxInUse = 3; //change this variable to set how many MAX7219's you'll use
byte buffer[10];
int state = 0;
void setup(){
m.init(); // module initialize
m.setIntensity(0); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
}
void loop(){
if(Serial.available() > 0){
// Checks whether data is comming from the serial port
int state = Serial.parseInt(); // Reads the data from the serial port
char value[10];
itoa(state,value,10);
Serial.println(state);
m.init();
m.setIntensity(0);
printString(value);
}
}
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
int potValue = 0;
void setup() {
Serial.begin(9600); // Default communication rate of the Bluetooth module
}
void loop() {
potValue = analogRead(A0);
Serial.println(potValue); // Sends potValue to servo motor
delay(1000);
}
131. BODY HEIGHT MEASUREMENT BY ULTRASONIC VIA BLUETOOTH
#include <EEPROM.h>
#define trigPin1 2
#define echoPin1 4
long duration, distance, UltraSensor;
int Sensor1Data;
int ZeroCalib = 0;
byte ZeroLevel;
#include <IRremote.h>
int RECV_PIN = 9;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
irrecv.enableIRIn(); // Start the receiver
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
Serial.begin(9600);
}
unsigned long last = millis();
void loop() {
ZeroCalib = constrain(ZeroCalib, 0, 255);
if (irrecv.decode(&results)) {
if (results.value == 0xEF1020DF) {
ZeroCalib++;
EEPROM.write(1, ZeroCalib);
}
else if (results.value == 0xEF10A05F) {
ZeroCalib--;
EEPROM.write(1, ZeroCalib);
}
irrecv.resume(); // Receive the next value
}
else{
ZeroLevel = EEPROM.read(1);
SonarSensor(trigPin1, echoPin1);
UltraSensor = ZeroLevel-distance;
Sensor1Data = UltraSensor;
Serial.print("Sensor1 Integer: ");
Serial.println(Sensor1Data);
delay(1000);
}
} // END void loop...
void SonarSensor(int trigPin,int echoPin)
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
delay(100);
}
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
int maxInUse = 3; //change this variable to set how many MAX7219's you'll use
byte buffer[10];
int state = 0;
void setup(){
m.init(); // module initialize
m.setIntensity(0); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
}
void loop(){
if(Serial.available() > 0){
// Checks whether data is comming from the serial port
int state = Serial.parseInt(); // Reads the data from the serial port
char value[10];
itoa(state,value,10);
Serial.println(state);
m.init();
m.setIntensity(0);
printString(value);
}
}
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
132. PIR ALARM VIA RF
int pirPin = 2;
int statePir = 0;
#include <VirtualWire.h>
void setup(){
Serial.begin(9600);
vw_setup(2000);
vw_set_tx_pin(3);
pinMode(pirPin,INPUT);
}
void loop(){
statePir = digitalRead(pirPin);
if (statePir == HIGH){
const char *msg = "A";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if (statePir == LOW){
const char *msg = "a";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
}
133. RFID READ CODE
/*
* --------------------------------------------------------------------------------------------------------------------
* Example sketch/program showing how to read data from a PICC to serial.
* --------------------------------------------------------------------------------------------------------------------
* This is a MFRC522 library example; for further details and other examples see:
https://github.com/miguelbalboa/rfid
*
* Example sketch/program showing how to read data from a PICC (that is: a RFID Tag or Card)
using a MFRC522 based RFID
* Reader on the Arduino SPI interface.
*
* When the Arduino and the MFRC522 module are connected (see the pin layout below), load this
sketch into Arduino IDE
* then verify/compile and upload it. To see the output: use Tools, Serial Monitor of the IDE (hit
Ctrl+Shft+M). When
* you present a PICC (that is: a RFID Tag or Card) at reading distance of the MFRC522
Reader/PCD, the serial output
* will show the ID/UID, type and any data blocks it can read. Note: you may see "Timeout in
communication" messages
* when removing the PICC from reading distance too early.
*
* If your reader supports it, this sketch/program will read all the PICCs presented (that is: multiple
tag reading).
* So if you stack two or more PICCs on top of each other and present them to the reader, it will
first output all
* details of the first and then the next PICC. Note that this may take some time as all data blocks
are dumped, so
* keep the PICCs at reading distance until complete.
*
* @license Released into the public domain.
*
* Typical pin layout used:
* -----------------------------------------------------------------------------------------
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro
* Signal Pin Pin Pin Pin Pin Pin
* -----------------------------------------------------------------------------------------
* RST/Reset RST 9 5 D9 RESET/ICSP-5 RST
* SPI SS SDA(SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
*/
#include <SPI.h>
#include <MFRC522.h>
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
while (!Serial); // Do nothing if no serial port is opened (added for Arduinos
based on ATMEGA32U4)
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522
mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card
Reader details
Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));
}
void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
/*
*
* All the resources for this project: https://www.hackster.io/Aritro
* Modified by Aritro Mukherjee
*
*
*/
int led = 5; //bring the signal to relay when used for drive high voltage power
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
void setup()
{
pinMode(led, OUTPUT);
Serial.begin(9600); // Initiate a serial communication
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
Serial.println("Approximate your card to the reader...");
Serial.println();
//dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE);
}
int on = 0;
void loop()
{
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Show UID on serial monitor
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
//if ((content.substring(1) == "E0 7C F4 79") || (content.substring(1) == "A0 D1 39 83" )) //change
here the UID of the card/cards that you want to give access
if (content.substring(1) == "E0 7C F4 79")// single card
{
Serial.println("Authorized access");
on = !on;
digitalWrite(led, on? HIGH:LOW);
Serial.println(on?"ON":"OFF");
//Serial.println();
delay(1000);
}
else {
Serial.println(" Access denied");
digitalWrite(led, LOW);
delay(1000);
}
}
135. RFID ROOM POWER SWITCH
#include <SPI.h>
#include <Wire.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 10
#define address 2
int led = 5; //bring the signal to relay when used for drive high voltage power
uint16_t xor_uid = 0;
void setup()
{
pinMode(led, OUTPUT);
SPI.begin(); // Init SPI bus
Serial.begin(9600);
mfrc522.PCD_Init(); // Init MFRC522
Wire.begin(address);
Wire.onRequest(sendCardInfo); // register event
//mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);
}
uint16_t read_card() {
uint16_t xor_uid = 0;
if (! mfrc522.PICC_ReadCardSerial())
{ //Okay. This does the same PICC_Select as the previous ReadCardSerial(), but this one fails if
there is no card on the reader. Funny.
//Seems like we need two Select's in a row to detect card's presence.
xor_uid = 0;
Serial.println("NOK");
digitalWrite(led, LOW);
}
else
{
for (int i = 0; i < mfrc522.uid.size; i=i+2)
{
xor_uid = xor_uid ^ (mfrc522.uid.uidByte[i]<<8 | mfrc522.uid.uidByte[i+1]);
}
Serial.println("OK");
digitalWrite(led, HIGH);
}
return xor_uid;
}
void loop()
{
mfrc522.PICC_ReadCardSerial(); //Always fails
mfrc522.PICC_IsNewCardPresent(); //Does RequestA
xor_uid = read_card();
delay(1);
}
void sendCardInfo() {
byte myArray[2]; //Thanks http://thewanderingengineer.com/2015/05/06/sending-16-bit-and-32-bit-
numbers-with-arduino-i2c for this solution
myArray[0] = (xor_uid >> 8) & 0xFF;
myArray[1] = xor_uid & 0xFF;
Wire.write(myArray, 2);
}
136. RFID ROOM DOOR KEY
/*
*
* All the resources for this project: https://www.hackster.io/Aritro
* Modified by Aritro Mukherjee
*
*
*/
int led = 5; //bring the signal to relay when used for drive high voltage power
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
void setup()
{
pinMode(led, OUTPUT);
Serial.begin(9600); // Initiate a serial communication
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
Serial.println("Approximate your card to the reader...");
Serial.println();
//dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE);
}
int on = 0;
void loop()
{
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Show UID on serial monitor
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if ((content.substring(1) == "E0 7C F4 79") || (content.substring(1) == "A0 D1 39 83")) //change
here the UID of the card/cards that you want to give access
{
Serial.println("Authorized access");
//on = !on;
digitalWrite(led,HIGH);
Serial.println("UNLOCK");
//Serial.println();
delay(3000);
digitalWrite(led,LOW);
Serial.println("LOCK");
}
else {
Serial.println(" Access denied");
digitalWrite(led, LOW);
delay(1000);
}
}
=====================================================================
137. LED LEVEL INDICATOR
B11100010,
B11010010,
B10110010,
B01110010,
B11100100,
B11010100,
B10110100,
B01110100,
B11101000,
B11011000,
B10111000,
B01111000,
};
int proximity=0;
void setup() {
Serial.begin (9600);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
int sensorValue = analogRead(A0);
digitalWrite(latchPin, LOW);
Serial.println(sensorValue);
proximity=map(sensorValue, 0, 1024, 0, 17);
shiftOut(dataPin, clockPin, MSBFIRST,possible_patterns[proximity]);
digitalWrite(latchPin, HIGH);
}
138. LED BAR LEVEL INDICATOR
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
Serial.begin(9600);
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
dataArrayGREEN[0] = 0x00; //00000000
dataArrayGREEN[1] = 0x80; //00000001
dataArrayGREEN[2] = 0xC0; //00000011
dataArrayGREEN[3] = 0xE0; //00000111
dataArrayGREEN[4] = 0xF0; //00001111
dataArrayGREEN[5] = 0xF8; //00011111
dataArrayGREEN[6] = 0xFC; //00111111
dataArrayGREEN[7] = 0xFE; //01111111
dataArrayGREEN[8] = 0xFF; //11111111
dataArrayGREEN[9] = 0xFF; //11111111
dataArrayGREEN[10] = 0xFF; //11111111
dataArrayGREEN[11] = 0xFF; //11111111
dataArrayGREEN[12] = 0xFF; //11111111
dataArrayGREEN[13] = 0xFF; //11111111
dataArrayGREEN[14] = 0xFF; //11111111
dataArrayGREEN[15] = 0xFF; //11111111
dataArrayGREEN[16] = 0xFF; //11111111
dataArrayGREEN[17] = 0xFF; //11111111
dataArrayGREEN[18] = 0xFF; //11111111
dataArrayGREEN[19] = 0xFF; //11111111
dataArrayGREEN[20] = 0xFF; //11111111
dataArrayGREEN[21] = 0xFF; //11111111
dataArrayGREEN[22] = 0xFF; //11111111
dataArrayGREEN[23] = 0xFF; //11111111
dataArrayGREEN[24] = 0xFF; //11111111
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
dataArrayRED[0] = 0x00; //11111111
dataArrayRED[1] = 0x00; //00000000
dataArrayRED[2] = 0x00; //00000000
dataArrayRED[3] = 0x00; //00000000
dataArrayRED[4] = 0x00; //00000000
dataArrayRED[5] = 0x00; //00000000
dataArrayRED[6] = 0x00; //00000000
dataArrayRED[7] = 0x00; //00000000
dataArrayRED[8] = 0x00; //00000000
dataArrayRED[9] = 0x80; //10000000
dataArrayRED[10] = 0xC0; //11000000
dataArrayRED[11] = 0xE0; //11100000
dataArrayRED[12] = 0xF0; //11110000
dataArrayRED[13] = 0xF8; //11111000
dataArrayRED[14] = 0xFC; //11111100
dataArrayRED[15] = 0xFE; //11111110
dataArrayRED[16] = 0xFF; //11111111
dataArrayRED[17] = 0xFF; //11111111
dataArrayRED[18] = 0xFF; //11111111
dataArrayRED[19] = 0xFF; //11111111
dataArrayRED[20] = 0xFF; //11111111
dataArrayRED[21] = 0xFF; //11111111
dataArrayRED[22] = 0xFF; //11111111
dataArrayRED[23] = 0xFF; //11111111
dataArrayRED[24] = 0xFF; //11111111
//ground latchPin and hold low for as long as you are transmitting
digitalWrite(latchPin, 1);
//move 'em out
shiftOut(dataPin, clockPin, dataGREEN);
shiftOut(dataPin, clockPin, dataRED);
shiftOut(dataPin, clockPin, dataBLUE);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(latchPin, 0);
//delay(100);
//}
}
// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
// This shifts 8 bits out MSB first,
//on the rising edge of the clock,
//clock idles low
//stop shifting
digitalWrite(myClockPin, 0);
}
//blinks the whole register based on the number of times you want to
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
for (int x = 0; x < n; x++) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
digitalWrite(latchPin, 1);
delay(d);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(d);
}
}
===================================================================
139. OSCILOSCOPE
//Arduino Code:
#define ANALOG_IN 0
void setup() {
Serial.begin(9600);
//Serial.begin(115200);
}
void loop() {
int val = analogRead(ANALOG_IN);
Serial.write( 0xff );
Serial.write( (val >> 8) & 0xff );
Serial.write( val & 0xff );
}
-----------------------------------------------------
//Proscessing code:
import processing.serial.*;
Serial port; // Create object from Serial class
int val;
// Data received from the serial port
int[] values;
float zoom;
void setup()
{
size(1280, 480);
// Open the port that the board is connected to and use the same speed (9600 bps)
port = new Serial(this, Serial.list()[0], 9600);
values = new int[width];
zoom = 1.0f;
smooth();
}
int getY(int val) {
return (int)(height - val / 1023.0f * (height - 1));
}
int getValue() {
int value = -1;
while (port.available() >= 3) {
if (port.read() == 0xff) {
value = (port.read() << 8) | (port.read());
}
}
return value;
}
void pushValue(int value) {
for (int i=0; i<width-1; i++)
values[i] = values[i+1];
values[width-1] = value;
}
void drawLines() {
stroke(255);
int displayWidth = (int) (width / zoom);
int k = values.length - displayWidth;
int x0 = 0;
int y0 = getY(values[k]);
for (int i=1; i<displayWidth; i++) {
k++;
int x1 = (int) (i * (width-1) / (displayWidth-1));
int y1 = getY(values[k]);
line(x0, y0, x1, y1);
x0 = x1;
y0 = y1;
}
}
void drawGrid() {
stroke(255, 0, 0);
line(0, height/2, width, height/2);
}
void keyReleased() {
switch (key) {
case '+':
zoom *= 2.0f;
println(zoom);
if ( (int) (width / zoom) <= 1 )
zoom /= 2.0f;
break;
case '-':
zoom /= 2.0f;
if (zoom < 1.0f)
zoom *= 2.0f;
break;
}
}
void draw()
{
background(0);
drawGrid();
val = getValue();
if (val != -1) {
pushValue(val);
}
drawLines();
}
140. WRITING STRING ON EEPROM VIA SERIAL MONITOR
//
// EEPROM utility functions with usage example
//
// This example defines some utility functions
// to write byte arrays, integers and strings
// to eeprom and read them back.
//
// Some usage examples are provided.
#include <EEPROM.h>
//
// Absolute min and max eeprom addresses.
// Actual values are hardware-dependent.
//
// These values can be changed e.g. to protect
// eeprom cells outside this range.
//
const int EEPROM_MIN_ADDR = 0;
const int EEPROM_MAX_ADDR = 511;
//
// Initialize eeprom memory with
// the specified byte.
// Default value is 0xFF.
//
void eeprom_erase_all(byte b = 0xFF) {
int i;
//
// Dump eeprom memory contents over serial port.
// For each byte, address and value are written.
//
void eeprom_serial_dump_column() {
// counter
int i;
//
// Dump eeprom memory contents over serial port in tabular form.
// Each printed row shows the value of bytesPerRow bytes
// (by default 16).
//
void eeprom_serial_dump_table(int bytesPerRow = 16) {
// address counter
int i;
//
// Returns true if the address is between the
// minimum and maximum allowed values,
// false otherwise.
//
// This function is used by the other, higher-level functions
// to prevent bugs and runtime errors due to invalid addresses.
//
boolean eeprom_is_addr_ok(int addr) {
return ((addr >= EEPROM_MIN_ADDR) && (addr <= EEPROM_MAX_ADDR));
}
//
// Writes a sequence of bytes to eeprom starting at the specified address.
// Returns true if the whole array is successfully written.
// Returns false if the start or end addresses aren't between
// the minimum and maximum allowed values.
// When returning false, nothing gets written to eeprom.
//
boolean eeprom_write_bytes(int startAddr, const byte* array, int numBytes) {
// counter
int i;
// both first byte and last byte addresses must fall within
// the allowed range
if (!eeprom_is_addr_ok(startAddr) || !eeprom_is_addr_ok(startAddr + numBytes)) {
return false;
}
return true;
}
//
// Reads the specified number of bytes from the specified address into the provided buffer.
// Returns true if all the bytes are successfully read.
// Returns false if the star or end addresses aren't between
// the minimum and maximum allowed values.
// When returning false, the provided array is untouched.
//
// Note: the caller must ensure that array[] has enough space
// to store at most numBytes bytes.
//
boolean eeprom_read_bytes(int startAddr, byte array[], int numBytes) {
int i;
// both first byte and last byte addresses must fall within
// the allowed range
if (!eeprom_is_addr_ok(startAddr) || !eeprom_is_addr_ok(startAddr + numBytes)) {
return false;
}
return true;
}
//
// Writes an int variable at the specified address.
// Returns true if the variable value is successfully written.
// Returns false if the specified address is outside the
// allowed range or too close to the maximum value
// to store all of the bytes (an int variable requires
// more than one byte).
//
boolean eeprom_write_int(int addr, int value) {
byte *ptr;
ptr = (byte*)&value;
return eeprom_write_bytes(addr, ptr, sizeof(value));
}
//
// Reads an integer value at the specified address.
// Returns true if the variable is successfully read.
// Returns false if the specified address is outside the
// allowed range or too close to the maximum vlaue
// to hold all of the bytes (an int variable requires
// more than one byte).
//
boolean eeprom_read_int(int addr, int* value) {
return eeprom_read_bytes(addr, (byte*)value, sizeof(int));
}
//
// Writes a string starting at the specified address.
// Returns true if the whole string is successfully written.
// Returns false if the address of one or more bytes
// fall outside the allowed range.
// If false is returned, nothing gets written to the eeprom.
//
boolean eeprom_write_string(int addr, const char* string) {
// actual number of bytes to be written
int numBytes;
//
// Reads a string starting from the specified address.
// Returns true if at least one byte (even only the
// string terminator one) is read.
// Returns false if the start address falls outside
// or declare buffer size os zero.
// the allowed range.
// The reading might stop for several reasons:
// - no more space in the provided buffer
// - last eeprom address reached
// - string terminator byte (0x00) encountered.
// The last condition is what should normally occur.
//
boolean eeprom_read_string(int addr, char* buffer, int bufSize) {
// byte read from eeprom
byte ch;
// stop conditions:
// - the character just read is the string terminator one (0x00)
// - we have filled the user buffer
// - we have reached the last eeprom address
while ( (ch != 0x00) && (bytesRead < bufSize) && ((addr + bytesRead) <=
EEPROM_MAX_ADDR) ) {
// if no stop condition is met, read the next byte from eeprom
ch = EEPROM.read(addr + bytesRead);
return true;
}
//
// A pair of functions to show how long it takes to work with eeprom.
//
int start_time;
int stop_time;
void start_timing() {
start_time = millis();
}
void print_elapsed() {
stop_time = millis();
Serial.print("Time elapsed (ms): ");
Serial.println(stop_time - start_time);
}
//======================================
bool write_StringEE(int Addr, String input)
{
char cbuff[input.length() + 1];
input.toCharArray(cbuff, input.length() + 1);
return eeprom_write_string(Addr, cbuff);
}
//Given the starting address, and the length, this function will return
//a String and not a Char array
String read_StringEE(int Addr, int length)
{
char cbuff[length+1];
eeprom_read_string(Addr, cbuff, length+1);
String stemp(cbuff);
return stemp;
//=================================================
//
// SETUP
//
void setup()
{
Serial.begin(9600);
/*
Serial.println("Starting...");//Say hello
String text = "Ini adalah string eeprom tulisan yang panjang.maaf perjalanan anda
tergangu";//String to write
Serial.print("Writting: ");
Serial.println(text);
write_StringEE(0, text);//Write string starting at address 0
Serial.print("Reading: ");
Serial.println(read_StringEE(0,text.length()));//Read String starting a address 0 with given lenth of
String
*/
//
// LOOP
//
void loop() {
//int sensorValue0 = analogRead(A0);
//String text = "ini pesan pendek";//String to write
String text;
//Serial.print("Writting: ");
//Serial.println(text);
if(Serial.available()) {
text = Serial.readString();
write_StringEE(0, text);//Write string starting at address 0
}
else {
Serial.print("Reading: ");
Serial.println(read_StringEE(0,100));//Read String starting a address 0 with given lenth of String
delay(1000);
}
141. WRITING STRING VIA SERIAL MONITOR
String a;
void setup() {
void loop() {
if(Serial.available()) {
Serial.println(a);
=======================================================================
142. POWER SWITCH WITH MOC3011 AND BT136
==================================================================
143. CONTACTLESS THERMOMETER MLX90614
#include <Wire.h>
#include <Adafruit_MLX90614.h>
void setup()
{
Serial.begin(9600);
mlx.begin();
}
void loop()
{
Serial.print("Ambient = ");
Serial.print(" ");
Serial.print(mlx.readAmbientTempC());
Serial.print(" ");
Serial.print("*C");
Serial.print(" ");
Serial.print("Object = ");
Serial.print(" ");
Serial.print(mlx.readObjectTempC());
Serial.print(" ");
Serial.print("*C");
Serial.print(" ");
Serial.print("Ambient = ");
Serial.print(" ");
Serial.print(mlx.readAmbientTempF());
Serial.print(" ");
Serial.print("*F");
Serial.print(" ");
Serial.print("Object = ");
Serial.print(" ");
Serial.print(mlx.readObjectTempF());
Serial.print(" ");
Serial.println("*F");
delay(500);
}
=======================================================================
144. CAR POWER LOCK
Pada proyek ini kita coba gabungkak beberapa module untuk membuat power lock untuk mobil.
Penerapan ini berguna saat mobil kita dirampok orang, maka kira serahkan saja mobil itu dan semua
penumpang dikeluarkan. Ketika mobil sudah dibawa kabur oleh si perampok, ketika jaraknya tidak
lebih dari 100 meter maka kita tekan push button para transmitter yang kita pegang, maka dalam 10
menit mobil akan mati secara otomatis, si pemilik mobil dan penumpang punya kesempatan
melarikan diri sebelum perampok kembali ke TKP karena mobil mati. Ketika mobil mati karena
button transmitter ditekan maka tidak dapat dinyalakan lagi, untuk menyalakan lagi harus mamakai
RFID.
Receiver
const int ledPin = 5;//this signal go to relay or mosfet or for drive triac
#include <EEPROM.h>
int addr = 0;
byte value;
//=========================================
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMgs[1];
RF24 radio(8,7);
const uint64_t pipe = 0xE14BC8F482LL;
//==========================================
#include <SoftwareSerial.h>
//RFID ...
const int RFID_TX_Pin = 2; // the TX pin that the RDIF Sensor is attached
String Parsed_Tag_ID, Stored_Tag_ID;
char c;
SoftwareSerial RFID(RFID_TX_Pin , 255); // RX, TX for serial communication on any digital
pins.
// RX port : 2 -- TX port : 255 (do not need any TX port)
////////////////////////////////////////////////////////////////////////////
//AUX FUNCTIONS BEGIN
boolean CheckSum_Tag_ID(String Tag_ID) {
boolean res = false;
unsigned int b1,b2,b3,b4,b5,checksum;
//============================
void setup() {
Serial.begin(9600);
RFID.begin(9600);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void(* resetFunc) (void) = 0;
void loop(){
value = EEPROM.read(addr);
if (radio.available())
{
bool done = false;
while (!done)
{
done = radio.read(DataMgs, 1);
Serial.print("NRF24L01 Receiver: ");
Serial.println(DataMgs[0]);
Stored_Tag_ID="";
Transmitter
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMsg[1];
RF24 radio(8,7);
int Button1 = 3;
void setup()
{
pinMode(3, INPUT);
digitalWrite(3,HIGH);
Serial.begin(9600);
Serial.println("NRF24L01 Transmitter");
radio.begin();
radio.openWritingPipe(pipe);
}
void loop()
{
if (digitalRead(Button1) == LOW)
{
Serial.println("Button 1 pressed");
DataMsg[0] = 1;
radio.write(DataMsg, 1);
}
==================================================================
145. RFID 125kHz CODE READING
//Documentation :
//The TAG ID has this format :
// HEX : 2 | 30 31 30 30 34 45 32 37 31 37 | 37 46 | 3 -> Total 14 bytes (chars)
// Start byte : 2 | 10 ascii chars (10 bytes) | 2 ascii chars (bytes) checksum | End byte : 3
// We DEFINE the TAG ID as the 10 ascii chars + 2 ascii chars of the checksum -> total 12
chars/bytes [we remove the start/end bytes]
//RFID ...
const int RFID_TX_Pin = 2; // the TX pin that the RDIF Sensor is attached
String Parsed_Tag_ID, Stored_Tag_ID;
char c;
SoftwareSerial RFID(RFID_TX_Pin , 255); // RX, TX for serial communication on any digital
pins.
// RX port : 2 -- TX port : 255 (do not need any TX port)
////////////////////////////////////////////////////////////////////////////
//AUX FUNCTIONS BEGIN
boolean CheckSum_Tag_ID(String Tag_ID) {
boolean res = false;
unsigned int b1,b2,b3,b4,b5,checksum;
////////////////////////////////////////////////////////////////////////////
//The setup BEGIN
void setup()
{
//Setup serial
Serial.begin(9600);
///////////////////////////////////////////////////////////////////////////
//The main LOOP BEGIN
void loop(){
Stored_Tag_ID="";
================================================================
#include <SoftwareSerial.h>
#define ADD_TAG_CODE "120010752750#" //change this ID with your own card TAG
#define DEL_TAG_CODE "13002F81E558" //change this ID with your own card TAG
String msg;
void setup()
Serial.begin(9600);
Serial.println("Serial Ready");
rfid.begin(9600);
Serial.println("RFID Ready");
char c;
void loop(){
while(rfid.available()>0){
c=rfid.read();
msg += c;
Serial.println(msg);
Serial.println(msg.length());
msg=msg.substring(1,13);
if(msg.indexOf(ADD_TAG_CODE)>=0) add();
msg="";
void add(){
msg="";
while(msg.length()<13){
while(rfid.available()>0){
c=rfid.read();
msg += c;
if(ID.indexOf(msg)>=0) {
msg="";
else{
Serial.print("Card: ");
Serial.println(msg);
ID += msg;
ID += ",";
//Serial.print("ID: ");
// Serial.println(ID);
msg="";
void del(){
msg="";
while(rfid.available()>0){
c=rfid.read();
msg += c;
msg=msg.substring(1,13);
if(ID.indexOf(msg)>=0){
Serial.println(msg);
//ID.replace(card,"");
int pos=ID.indexOf(msg);
msg="";
msg += ID.substring(0,pos);
msg += ID.substring(pos+15,ID.length());
ID="";
ID += msg;
//Serial.print("ID: ");
//Serial.println(ID);
msg="";
void verifica(){
msg=msg.substring(1,13);
=================================================================
#include <SoftwareSerial.h>
SoftwareSerial RFID(2, 3); // RX and TX
int i;
void setup()
{
RFID.begin(9600); // start serial to RFID reader
Serial.begin(9600); // start serial to PC
}
void loop()
{
if (RFID.available() > 0)
{
i = RFID.read();
Serial.print(i, DEC);
Serial.println(" ");
}
}
146. RFID 125kHz CODE READING WITH RX PIN
void setup()
{
Serial.begin(9600);
delay(500);
while(Serial.available()>0)
{
Serial.read();
}
Serial.println();
Serial.println("RFID module started in Auto Read Mode, Waiting for Card...");
}
void loop()
{
// read the serial port
if(Serial.available() > 0) {
val = Serial.read();
if (val == 2)
{
Serial.print(" Start the real read: ");
Serial.println(val);
val = Serial.read();
int count = 0;
while(count < 13)
{
readCard[count] = val;
Serial.print(" Reading: ");
Serial.print(val);
Serial.print(", saved: ");
Serial.println(readCard[count]);
val = Serial.read();
count++;
}
Serial.println(" Done reading ");
int count2 = 0;
while(count2 < 13)
{
Serial.print(readCard[count2]);
Serial.print(" ");
count2++;
}
Serial.println();
}
}
delay(500);
Serial.println("Waiting");
}
=============================================================
char ID ; //Variable to store the character that was recived from the ID
void setup()
{
void loop ()
{
if(Serial.available() > 0) //If the serial receive some character
{
ID = Serial.read(); //Store on ID variable the received character
Serial.println(ID,DEC); //Print on serial the character received.
}
}
147. RFID POWER SWITCH
//Documentation :
//The TAG ID has this format :
// HEX : 2 | 30 31 30 30 34 45 32 37 31 37 | 37 46 | 3 -> Total 14 bytes (chars)
// Start byte : 2 | 10 ascii chars (10 bytes) | 2 ascii chars (bytes) checksum | End byte : 3
// We DEFINE the TAG ID as the 10 ascii chars + 2 ascii chars of the checksum -> total 12
chars/bytes [we remove the start/end bytes]
////////////////////////////////////////////////////////////////////////////
//AUX FUNCTIONS BEGIN
boolean CheckSum_Tag_ID(String Tag_ID) {
boolean res = false;
unsigned int b1,b2,b3,b4,b5,checksum;
///////////////////////////////////////////////////////////////////////////
//The main LOOP BEGIN
void loop(){
Stored_Tag_ID="";
Transmitter
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMsg[1];
RF24 radio(8,7);
int Button1 = 3;
int Button2 = 2;
void setup()
{
//ativa pull-up
pinMode(3, INPUT);
digitalWrite(3,HIGH);
pinMode(2, INPUT);
digitalWrite(2,HIGH);
Serial.begin(9600);
Serial.println("NRF24L01 Transmitter");
radio.begin();
radio.openWritingPipe(pipe);
}
void loop()
{
if (digitalRead(Button1) == LOW)
{
Serial.println("Button 1 pressed");
DataMsg[0] = 1;
radio.write(DataMsg, 1);
}
if (digitalRead(Button2) == LOW)
{
Serial.println("Button 2 pressed");
DataMsg[0] = 2;
radio.write(DataMsg, 1);
}
}
Receiver
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMgs[1];
RF24 radio(8,7);
const uint64_t pipe = 0xE14BC8F482LL;
int Relay1 = 5;
void setup()
{
pinMode(Relay1, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
if (radio.available())
{
bool done = false;
while (!done)
{
done = radio.read(DataMgs, 1);
Serial.print("NRF24L01 Receiver: ");
Serial.println(DataMgs[0]);
if (DataMgs[0] == 1)
{
delay(10);
digitalWrite(Relay1, HIGH);
}
if (DataMgs[0] == 2)
{
delay(10);
digitalWrite(Relay1, LOW);
}
delay(100);
}
}
else
{
Serial.println("Waiting for signal...");
}
}
149. RF 24 PIR ALARM
Transmitter
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int pirPin = 2;
int statePir = 0;
int DataMsg[1];
RF24 radio(8,7);
void setup()
{
pinMode(pirPin,INPUT);
Serial.begin(9600);
Serial.println("NRF24L01 Transmitter");
radio.begin();
radio.openWritingPipe(pipe);
}
void loop()
{
statePir = digitalRead(pirPin);
if (statePir == HIGH)
{
DataMsg[0] = 1;
radio.write(DataMsg, 1);
}
if (statePir == LOW)
{
DataMsg[0] = 2;
radio.write(DataMsg, 1);
}
}
Receiver
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMgs[1];
RF24 radio(8,7);
const uint64_t pipe = 0xE14BC8F482LL;
int Relay1 = 5;
int speaker = 10;
#define wait 1
#define time 100
int freq = 0;
void setup()
{
pinMode(Relay1, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
pinMode(speaker, OUTPUT);
}
void loop()
{
if (radio.available())
{
bool done = false;
while (!done)
{
done = radio.read(DataMgs, 1);
Serial.print("NRF24L01 Receiver: ");
Serial.println(DataMgs[0]);
if (DataMgs[0] == 1)
{
digitalWrite(Relay1, HIGH);
digitalWrite(speaker, HIGH);
for (freq = 500; freq < 3000; freq += 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 3000; freq > 500; freq -= 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 500;
freq < 3000;
freq += 10) //
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 3000;
freq > 500; freq -= 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 500;
freq < 3000;
freq += 10) //
{
tone(speaker,
freq, time);
delay(wait);
}
for (freq = 3000;
freq > 500;
freq -= 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 500; freq < 3000; freq += 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 3000;
freq > 500; freq -= 10)
{
tone(speaker, freq, time);
delay(wait);
}
if (DataMgs[0] == 2)
{
digitalWrite(Relay1, LOW);
digitalWrite(speaker, LOW);
}
delay(100);
}
}
else
{
Serial.println("Waiting for signal...");
}
}
======================================================================
150. RF24 SERVO
Transmitter
#include <SPI.h>
#include "RF24.h"
int msg[1]; //SCK -> 13//MISO -> 12//MOSI -> 11//CSN -> 7//CE -> 8
RF24 radio(8,7);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int potpin = 0;
int val;
void setup(void)
{
radio.begin();
radio.openWritingPipe(pipe);
}
void loop(void)
{
val = analogRead(potpin);
val = map(val, 0, 1023, 0, 179);
msg[0] = val;
radio.write(msg, 1);
}
Receiver
#include <Servo.h>
#include <SPI.h>
#include "RF24.h"
Servo myservo;
//SCK -> 13//MISO -> 12//MOSI -> 11//CSN -> 7//CE -> 8
RF24 radio(8,7);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
void setup()
{
myservo.attach(9);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
if (radio.available())
{
bool done = false;
while (!done)
{
done = radio.read(msg, 1);
myservo.write (msg[0]);
}
}}
151. RF24 TEST RUN
Proyek ini hanya untuk testing sampai berapa meter signal RF24 masih kuat tertangkap.
Transmitter
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMsg[1];
RF24 radio(8,7);
void setup()
{
Serial.begin(9600);
Serial.println("NRF24L01 Transmitter");
radio.begin();
radio.openWritingPipe(pipe);
}
void loop()
{
DataMsg[0] = 1;
radio.write(DataMsg, 1);
DataMsg[0] = 2;
radio.write(DataMsg, 1);
}
Receiver
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMgs[1];
RF24 radio(8,7);
const uint64_t pipe = 0xE14BC8F482LL;
int Relay1 = 5;
void setup()
{
pinMode(Relay1, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
if (radio.available())
{
bool done = false;
while (!done)
{
done = radio.read(DataMgs, 1);
Serial.print("NRF24L01 Receiver: ");
Serial.println(DataMgs[0]);
if (DataMgs[0] == 1)
{
delay(10);
digitalWrite(Relay1, HIGH);
}
if (DataMgs[0] == 2)
{
delay(10);digitalWrite(Relay1, LOW);
}
delay(100);
}
}
else
{
Serial.println("Waiting for signal...");
}
}
152. RF24 ANALOG DATA
Transmitter
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(8,7);
void setupRadio()
{
// Initiate the radio
radio.begin();
// Define the radio's power amplifier level (RF24_PA_MIN for debugging, RF24_PA_HIGH for
longest range)
radio.setPALevel(RF24_PA_MIN);
void setup()
{
setupRadio();
void loop()
{
}
Receiver
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
// -- Global variables --
RF24 radio(8,7);
//int packetCounter = 0;
// -- Functions --
void setupRadio()
{
// Initiate the radio
radio.begin();
// Define the radio's power amplifier level (RF24_PA_MIN for debugging, RF24_PA_HIGH for
longest range)
radio.setPALevel(RF24_PA_MIN);
void setup()
{
// Initiate serial connection
Serial.begin(9600);
// RF Radio setup
setupRadio();
}
void loop()
{
// Check if the radio has received any data
if(radio.available()) {
int temperature = 0;
===============================================================
153. LED BAR INDICATOR TLC5940
#include <Tlc5940.h>
else
{
Tlc.set(out, 0);
}
}
}
void setup()
{
Tlc.init();
}
void loop()
{
int value = analogRead(0);
value = map(value, 0, 1023, 0, 65535);
tlc_progress(value, 4095);
Tlc.update();
}
154. TLC5940 LED ANIMATION
/*
Basic Pin setup:
------------ ---u----
ARDUINO 13|-> SCLK (pin 25) OUT1 |1 28| OUT channel 0
12| OUT2 |2 27|-> GND (VPRG)
11|-> SIN (pin 26) OUT3 |3 26|-> SIN (pin 11)
10|-> BLANK (pin 23) OUT4 |4 25|-> SCLK (pin 13)
9|-> XLAT (pin 24) . |5 24|-> XLAT (pin 9)
8| . |6 23|-> BLANK (pin 10)
7| . |7 22|-> GND
6| . |8 21|-> VCC (+5V)
5| . |9 20|-> 2K Resistor -> GND
4| . |10 19|-> +5V (DCPRG)
3|-> GSCLK (pin 18) . |11 18|-> GSCLK (pin 3)
2| . |12 17|-> SOUT
1| . |13 16|-> XERR
0| OUT14|14 15| OUT channel 15
------------ --------
- Put the longer leg (anode) of the LEDs in the +5V and the shorter leg
(cathode) in OUT(0-15).
- +5V from Arduino -> TLC pin 21 and 19 (VCC and DCPRG)
- GND from Arduino -> TLC pin 22 and 27 (GND and VPRG)
- digital 3 -> TLC pin 18 (GSCLK)
- digital 9 -> TLC pin 24 (XLAT)
- digital 10 -> TLC pin 23 (BLANK)
- digital 11 -> TLC pin 26 (SIN)
- digital 13 -> TLC pin 25 (SCLK)
- The 2K resistor between TLC pin 20 and GND will let ~20mA through each
LED. To be precise, it's I = 39.06 / R (in ohms). This doesn't depend
on the LED driving voltage.
- (Optional): put a pull-up resistor (~10k) between +5V and BLANK so that
all the LEDs will turn off when the Arduino is reset.
If you are daisy-chaining more than one TLC, connect the SOUT of the first
TLC to the SIN of the next. All the other pins should just be connected
together:
BLANK on Arduino -> BLANK of TLC1 -> BLANK of TLC2 -> ...
XLAT on Arduino -> XLAT of TLC1 -> XLAT of TLC2 -> ...
The one exception is that each TLC needs it's own resistor between pin 20
and GND.
This library uses the PWM output ability of digital pins 3, 9, 10, and 11.
Do not use analogWrite(...) on these pins.
This sketch does the Knight Rider strobe across a line of LEDs.
#include "Tlc5940.h"
void setup()
{
/* Call Tlc.init() to setup the tlc.
You can optionally pass an initial PWM value (0 - 4095) for all channels.*/
Tlc.init();
}
/* This loop will create a Knight Rider-like effect if you have LEDs plugged
into all the TLC outputs. NUM_TLCS is defined in "tlc_config.h" in the
library folder. After editing tlc_config.h for your setup, delete the
Tlc5940.o file to save the changes. */
void loop()
{
int direction = 1;
for (int channel = 0; channel < NUM_TLCS * 16; channel += direction) {
/* Tlc.clear() sets all the grayscale values to zero, but does not send
them to the TLCs. To actually send the data, call Tlc.update() */
Tlc.clear();
/* Tlc.update() sends the data to the TLCs. This is when the LEDs will
actually change. */
Tlc.update();
delay(75);
}
}
155. TLC5940 LED SHIFT
#include <Tlc5940.h>
#include <tlc_shifts.h>
void setup()
{
Tlc.init();
}
void loop()
{
static byte counter = 0;
if (counter % 4)
tlc_shiftUp(0);
else
tlc_shiftUp(4095);
counter++;
Tlc.update();
delay(100);
}
void loop() {
Tlc.set(0,4095); //(Output Pin from 0 to 15,PWM Value from 0 to 4095)
// Note: The previous function doesn't activates the output right away. The output will be activated
when the Tlc.update() function will be executed!
void setup()
{
Tlc.init();
}
void loop()
{
if (!tlc_isFading(1))
{
unsigned long time = millis();
tlc_addFade(1, 0, 4095, time+1000, time+1250);
tlc_addFade(1, 4095, 0, time+1500, time+2000);
}
tlc_updateFades();
}
void loop()
{
for (int i = 0; i < 16; i++)
{
Tlc.set(i, 1023);
}
Tlc.update();
delay(1000);
for (int i = 0; i < 16; i++)
{
Tlc.set(i, 2046);
}
Tlc.update();
delay(1000);
for (int i = 0; i < 16; i++)
{
Tlc.set(i, 3069);
}
Tlc.update();
delay(1000);
for (int i = 0; i < 16; i++)
{
Tlc.set(i, 4095);
}
Tlc.update();
delay(1000);
}
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(8,7);
void setupRadio()
{
// Initiate the radio
radio.begin();
// Define the radio's power amplifier level (RF24_PA_MIN for debugging, RF24_PA_HIGH for
longest range)
radio.setPALevel(RF24_PA_MIN);
setupRadio();
void loop()
{
data.temperature = analogRead(A0);
data.humidity = analogRead(A1);
Receiver
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
// -- Global variables --
RF24 radio(8,7);
//int packetCounter = 0;
// -- Functions --
void setupRadio()
{
// Initiate the radio
radio.begin();
// Define the radio's power amplifier level (RF24_PA_MIN for debugging, RF24_PA_HIGH for
longest range)
radio.setPALevel(RF24_PA_MIN);
// RF Radio setup
setupRadio();
}
void loop()
{
// Check if the radio has received any data
if(radio.available()) {
//int temperature = 0;
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
// -- Global variables --
RF24 radio(8,7);
//int packetCounter = 0;
// -- Functions --
void setupRadio()
{
// Initiate the radio
radio.begin();
// Define the radio's power amplifier level (RF24_PA_MIN for debugging, RF24_PA_HIGH for
longest range)
radio.setPALevel(RF24_PA_MIN);
// Enable dynamic payloads for packets
radio.enableDynamicPayloads();
// RF Radio setup
setupRadio();
}
void loop()
{
// Check if the radio has received any data
if(radio.available()) {
//int temperature = 0;
- Put the longer leg (anode) of the LEDs in the +5V and the shorter leg
(cathode) in OUT(0-15).
- +5V from Arduino -> TLC pin 21 and 19 (VCC and DCPRG)
- GND from Arduino -> TLC pin 22 and 27 (GND and VPRG)
- digital 3 -> TLC pin 18 (GSCLK)
- digital 9 -> TLC pin 24 (XLAT)
- digital 10 -> TLC pin 23 (BLANK)
- digital 11 -> TLC pin 26 (SIN)
- digital 13 -> TLC pin 25 (SCLK)
- The 2K resistor between TLC pin 20 and GND will let ~20mA through each
LED. To be precise, it's I = 39.06 / R (in ohms). This doesn't depend
on the LED driving voltage.
- (Optional): put a pull-up resistor (~10k) between +5V and BLANK so that
all the LEDs will turn off when the Arduino is reset.
If you are daisy-chaining more than one TLC, connect the SOUT of the first
TLC to the SIN of the next. All the other pins should just be connected
together:
BLANK on Arduino -> BLANK of TLC1 -> BLANK of TLC2 -> ...
XLAT on Arduino -> XLAT of TLC1 -> XLAT of TLC2 -> ...
The one exception is that each TLC needs it's own resistor between pin 20
and GND.
This library uses the PWM output ability of digital pins 3, 9, 10, and 11.
Do not use analogWrite(...) on these pins.
This sketch does the Knight Rider strobe across a line of LEDs.
#include "Tlc5940.h"
void setup()
{
/* Call Tlc.init() to setup the tlc.
You can optionally pass an initial PWM value (0 - 4095) for all channels.*/
Tlc.init();
}
/* This loop will create a Knight Rider-like effect if you have LEDs plugged
into all the TLC outputs. NUM_TLCS is defined in "tlc_config.h" in the
library folder. After editing tlc_config.h for your setup, delete the
Tlc5940.o file to save the changes. */
void loop()
{
int d=50;
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(31, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(1, 1000);
Tlc.set(30, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(2, 1000);
Tlc.set(29, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(3, 1000);
Tlc.set(28, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(4, 1000);
Tlc.set(27, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(5, 1000);
Tlc.set(26, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(6, 1000);
Tlc.set(25, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(7, 1000);
Tlc.set(24, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(8, 1000);
Tlc.set(23, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(9, 1000);
Tlc.set(22, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(10, 1000);
Tlc.set(21, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(11, 1000);
Tlc.set(20, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(12, 1000);
Tlc.set(19, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(13, 1000);
Tlc.set(18, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(14, 1000);
Tlc.set(17, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.update();
delay(d);
}
Other sketch
#include "Tlc5940.h"
void setup()
{
/* Call Tlc.init() to setup the tlc.
You can optionally pass an initial PWM value (0 - 4095) for all channels.*/
Tlc.init();
}
void loop()
{
int d=50;
Tlc.clear();
Tlc.set(0, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(1, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(2, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(3, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(4, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(5, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(6, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(7, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(8, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(9, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(10, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(11, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(12, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(13, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(14, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(15, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(16, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(17, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(18, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(19, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(20, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(21, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(22, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(23, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(24, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(25, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(26, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(27, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(28, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(29, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(30, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(31, 1000);
Tlc.update();
delay(d);
}
Other sketch
#include <Tlc5940.h>
#include <tlc_shifts.h>
void setup()
{
Tlc.init();
}
void loop()
{
static byte counter = 0;
if (counter % 4)
tlc_shiftUp(0);
else
tlc_shiftUp(4095);
counter++;
Tlc.update();
delay(100);
}
Other sketch
#include "Tlc5940.h"
void setup() {
Tlc.init(0); // Initiates the TLC5940 and set all channels off
}
void loop() {
Tlc.set(0,4095); //(Output Pin from 0 to 15,PWM Value from 0 to 4095)
// Note: The previous function doesn't activates the output right away. The output will be activated
when the Tlc.update() function will be executed!
Other sketch
#include "Tlc5940.h"
void setup()
{
Tlc.init(0); // initialise TLC5940 and set all channels off
}
void loop()
{
for (int i = 0; i < 32; i++)
{
Tlc.set(i, 1023);
}
Tlc.update();
delay(1000);
for (int i = 0; i < 32; i++)
{
Tlc.set(i, 2046);
}
Tlc.update();
delay(1000);
for (int i = 0; i < 32; i++)
{
Tlc.set(i, 3069);
}
Tlc.update();
delay(1000);
for (int i = 0; i < 32; i++)
{
Tlc.set(i, 4095);
}
Tlc.update();
delay(1000);
}
Other sketch
#include "Tlc5940.h"
void setup()
{
Tlc.init();
}
void loop()
{
int direction = 1;
for (int channel = 0; channel < NUM_TLCS * 16; channel += direction) {
Tlc.clear();
if (channel == 0) {
direction = 1;
} else {
Tlc.set(channel - 1, 1000);
}
Tlc.set(channel, 4095);
if (channel != NUM_TLCS * 16 - 1) {
Tlc.set(channel + 1, 1000);
} else {
direction = -1;
}
Tlc.update();
delay(75);
}
Other sketch
#include "Tlc5940.h"
void setup()
{
Tlc.init();
}
void loop()
{
int d=50;
int value = analogRead(0);
value = map(value, 0, 1023, 0, 31);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.set(26, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.set(26, 1000);
Tlc.set(27, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.set(26, 1000);
Tlc.set(27, 1000);
Tlc.set(28, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.set(26, 1000);
Tlc.set(27, 1000);
Tlc.set(28, 1000);
Tlc.set(29, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.set(26, 1000);
Tlc.set(27, 1000);
Tlc.set(28, 1000);
Tlc.set(29, 1000);
Tlc.set(30, 1000);
Tlc.update();
delay(d);
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.set(26, 1000);
Tlc.set(27, 1000);
Tlc.set(28, 1000);
Tlc.set(29, 1000);
Tlc.set(30, 1000);
Tlc.set(31, 1000);
Tlc.update();
delay(d);
}
/* This loop will create a Knight Rider-like effect if you have LEDs plugged
into all the TLC outputs. NUM_TLCS is defined in "tlc_config.h" in the
library folder. After editing tlc_config.h for your setup, delete the
Tlc5940.o file to save the changes. */
void loop()
{
int d=50;
int value = analogRead(0);
value = map(value, 0, 1023, 0, 31);
if(value==0){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.update();
}
//delay(d);
if(value==1){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.update();
//delay(d);
}
if(value==2){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.update();
//delay(d);
}
if(value==3){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.update();
//delay(d);
}
if(value==4){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.update();
//delay(d);
}
if(value==5){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.update();
//delay(d);
}
if(value==6){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.update();
//delay(d);
}
if(value==7){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.update();
//delay(d);
}
if(value==8){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.update();
//delay(d);
}
if(value==9){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.update();
//delay(d);
}
if(value==10){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.update();
//delay(d);
}
if(value==11){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.update();
//delay(d);
}
if(value==12){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.update();
//delay(d);
}
if(value==13){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.update();
//delay(d);
}
if(value==14){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.update();
//delay(d);
}
if(value==15){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.update();
//delay(d);
}
if(value==16){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.update();
//delay(d);
}
if(value==17){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.update();
//delay(d);
}
if(value==18){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.update();
//delay(d);
}
if(value==19){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.update();
//delay(d);
}
if(value==20){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.update();
//delay(d);
}
if(value==21){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.update();
//delay(d);
}
if(value==22){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.update();
//delay(d);
}
if(value==23){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.update();
//delay(d);
}
if(value==24){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.update();
//delay(d);
}
if(value==25){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.update();
//delay(d);
}
if(value==26){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.set(26, 1000);
Tlc.update();
//delay(d);
}
if(value==27){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.set(26, 1000);
Tlc.set(27, 1000);
Tlc.update();
//delay(d);
}
if(value==28){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.set(26, 1000);
Tlc.set(27, 1000);
Tlc.set(28, 1000);
Tlc.update();
//delay(d);
}
if(value==29){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.set(26, 1000);
Tlc.set(27, 1000);
Tlc.set(28, 1000);
Tlc.set(29, 1000);
Tlc.update();
//delay(d);
}
if(value==30){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.set(26, 1000);
Tlc.set(27, 1000);
Tlc.set(28, 1000);
Tlc.set(29, 1000);
Tlc.set(30, 1000);
Tlc.update();
//delay(d);
}
if(value==31){
Tlc.clear();
Tlc.set(0, 1000);
Tlc.set(1, 1000);
Tlc.set(2, 1000);
Tlc.set(3, 1000);
Tlc.set(4, 1000);
Tlc.set(5, 1000);
Tlc.set(6, 1000);
Tlc.set(7, 1000);
Tlc.set(8, 1000);
Tlc.set(9, 1000);
Tlc.set(10, 1000);
Tlc.set(11, 1000);
Tlc.set(12, 1000);
Tlc.set(13, 1000);
Tlc.set(14, 1000);
Tlc.set(15, 1000);
Tlc.set(16, 1000);
Tlc.set(17, 1000);
Tlc.set(18, 1000);
Tlc.set(19, 1000);
Tlc.set(20, 1000);
Tlc.set(21, 1000);
Tlc.set(22, 1000);
Tlc.set(23, 1000);
Tlc.set(24, 1000);
Tlc.set(25, 1000);
Tlc.set(26, 1000);
Tlc.set(27, 1000);
Tlc.set(28, 1000);
Tlc.set(29, 1000);
Tlc.set(30, 1000);
Tlc.set(31, 1000);
Tlc.update();
//delay(d);
}
//}
}
162. RGB LED COMMON CATHODE
#include <SoftPWM.h>
void setup()
{
SoftPWMBegin();
SoftPWMSet(7, 0);
SoftPWMSet(6, 0);
SoftPWMSet(5, 0);
void loop()
{
SoftPWMSet(7, 255);
SoftPWMSet(6, 0);
SoftPWMSet(5, 0);
delay(1000);
SoftPWMSet(7, 0);
SoftPWMSet(6, 255);
SoftPWMSet(5, 0);
delay(1000);
SoftPWMSet(7, 0);
SoftPWMSet(6, 0);
SoftPWMSet(5, 255);
delay(1000);
SoftPWMSet(7, 85);
SoftPWMSet(6, 85);
SoftPWMSet(5, 85);
delay(1000);
SoftPWMSet(7, 90);
SoftPWMSet(6, 80);
SoftPWMSet(5, 85);
delay(1000);
SoftPWMSet(7, 95);
SoftPWMSet(6, 75);
SoftPWMSet(5, 85);
delay(1000);
SoftPWMSet(7, 100);
SoftPWMSet(6, 70);
SoftPWMSet(5, 85);
delay(1000);
}
Other sketch
int redPin= 7;
int greenPin = 6;
int bluePin = 5;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
setColor(255, 0, 0); // Red Color
delay(1000);
setColor(0, 255, 0); // Green Color
delay(1000);
setColor(0, 0, 255); // Blue Color
delay(1000);
setColor(255, 255, 255); // White Color
delay(1000);
setColor(170, 0, 255); // Purple Color
delay(1000);
setColor(200, 50, 255);
delay(1000);
setColor(40, 80, 255);
delay(1000);
setColor(255, 80, 40);
delay(1000);
}
void setColor(int redValue, int greenValue, int blueValue) {
analogWrite(redPin, redValue);
analogWrite(greenPin, greenValue);
analogWrite(bluePin, blueValue);
}
Other sketch
void setup()
{
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
}
void loop()
{
mainColors();
showSpectrum();
}
void mainColors()
{
// Off (all LEDs off):
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
delay(1000);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
delay(1000);
delay(1000);
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);
delay(1000);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);
delay(1000);
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
delay(1000);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);
delay(1000);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
delay(1000);
}
void showSpectrum()
{
int x; // define an integer variable called "x"
analogWrite(RED_PIN, redIntensity);
analogWrite(BLUE_PIN, blueIntensity);
analogWrite(GREEN_PIN, greenIntensity);
}
Connection:
VCC-5v
GND-GND
SCL-SCL(analog pin 5)
SDA-SDA(analog pin 4)
ADD-NC or GND
*/
#include <Wire.h>
#include <BH1750.h>
BH1750 lightMeter;
void setup(){
Serial.begin(9600);
lightMeter.begin();
Serial.println("Running...");
}
void loop() {
uint16_t lux = lightMeter.readLightLevel();
Serial.print("Light: ");
Serial.print(lux);
Serial.println(" lx");
delay(100);
}
#define MPU6050_D0 0
#define MPU6050_D1 1
#define MPU6050_D2 2
#define MPU6050_D3 3
#define MPU6050_D4 4
#define MPU6050_D5 5
#define MPU6050_D6 6
#define MPU6050_D7 7
// AUX_VDDIO Register
#define MPU6050_AUX_VDDIO MPU6050_D7 // I2C high: 1=VDD, 0=VLOGIC
// Use the following global variables and access functions to help store the overall
// rotation angle of the sensor
unsigned long last_read_time;
float last_x_angle; // These are the filtered angles
float last_y_angle;
float last_z_angle;
float last_gyro_x_angle; // Store the gyro angles to compare drift
float last_gyro_y_angle;
float last_gyro_z_angle;
void set_last_read_angle_data(unsigned long time, float x, float y, float z, float x_gyro, float
y_gyro, float z_gyro) {
last_read_time = time;
last_x_angle = x;
last_y_angle = y;
last_z_angle = z;
last_gyro_x_angle = x_gyro;
last_gyro_y_angle = y_gyro;
last_gyro_z_angle = z_gyro;
}
float base_x_gyro;
float base_y_gyro;
float base_z_gyro;
return error;
}
//Serial.println("Starting Calibration");
//Serial.println("Finishing Calibration");
}
//====================================radio
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
//int pirPin = 2;
//int statePir = 0;
int DataMsg[1];
RF24 radio(8,7);
//=============================================
float diffy;
float lasty; //previous "action number"
float y;
float diffx;
float lastx; //previous "action number"
float x;
void setup()
{
//pinMode(led30, OUTPUT);
//=======================radio
radio.begin();
radio.openWritingPipe(pipe);
//===================================
int error;
uint8_t c;
Serial.begin(9600);
Wire.begin();
calibrate_sensors();
set_last_read_angle_data(millis(), 0, 0, 0, 0, 0, 0);
}
void(* resetFunc) (void) = 0; //declare reset function @ address 0
void loop()
{
int error;
double dT;
accel_t_gyro_union accel_t_gyro;
float accel_angle_z = 0;
Serial.print("diffx: ");
Serial.print(abs(diffx));
Serial.print(" diffy: ");
Serial.print(abs(diffy));
Serial.print(" a: ");
Serial.print(a);
Serial.print(" b: ");
Serial.print(b);
Serial.print(" c: ");
Serial.print(c);
Serial.print(" force: ");
Serial.println(force);
else {
DataMsg[0] = 2;
radio.write(DataMsg, 1);
}
}
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
n = Wire.write(start);
if (n != 1)
return (-10);
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
n = Wire.write(start); // write the start address
if (n != 1)
return (-20);
return (error);
}
Receiver
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMgs[1];
RF24 radio(8,7);
const uint64_t pipe = 0xE14BC8F482LL;
int Relay1 = 5;
int speaker = 10;
#define wait 1
#define time 100
int freq = 0;
void setup()
{
pinMode(Relay1, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
pinMode(speaker, OUTPUT);
}
void loop()
{
if (radio.available())
{
bool done = false;
while (!done)
{
done = radio.read(DataMgs, 1);
Serial.print("NRF24L01 Receiver: ");
Serial.println(DataMgs[0]);
if (DataMgs[0] == 1)
{
digitalWrite(Relay1, HIGH);
digitalWrite(speaker, HIGH);
for (freq = 500; freq < 3000; freq += 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 3000; freq > 500; freq -= 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 500;
freq < 3000;
freq += 10) //
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 3000;
freq > 500; freq -= 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 500;
freq < 3000;
freq += 10) //
{
tone(speaker,
freq, time);
delay(wait);
}
for (freq = 3000;
freq > 500;
freq -= 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 500; freq < 3000; freq += 10)
{
tone(speaker, freq, time);
delay(wait);
}
for (freq = 3000;
freq > 500; freq -= 10)
{
tone(speaker, freq, time);
delay(wait);
}
if (DataMgs[0] == 2)
{
digitalWrite(Relay1, LOW);
digitalWrite(speaker, LOW);
}
delay(100);
}
}
else
{
Serial.println("Waiting for signal...");
}
}
// Version number
const float fVerNum = 0.03;
//////////////////////////////////////////////////////
RF24 radio(8,7);
void setupRadio()
{
// Initiate the radio
radio.begin();
// Define the radio's power amplifier level (RF24_PA_MIN for debugging, RF24_PA_HIGH for
longest range)
radio.setPALevel(RF24_PA_MIN);
setupRadio();
dht.begin();
}
void loop()
{
data.temperature = dht.readTemperature();
data.humidity = dht.readHumidity();
// Open a writing pipe on the radio
radio.openWritingPipe(0xE8E8F0F0E1LL);
Receiver
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
// -- Global variables --
RF24 radio(8,7);
//int packetCounter = 0;
// -- Functions --
void setupRadio()
{
// Initiate the radio
radio.begin();
// Define the radio's power amplifier level (RF24_PA_MIN for debugging, RF24_PA_HIGH for
longest range)
radio.setPALevel(RF24_PA_MIN);
// RF Radio setup
setupRadio();
}
void loop()
{
// Check if the radio has received any data
if(radio.available()) {
//int temperature = 0;
Receiver
/*sket ini didesain untuk memantau temperatur, kelembaban dan tekanan udara, data dimonitor dari
LCD dan dikirim ke file exel dengan PLX-DAQ.
LCD monitor dengan teknik serial dengan memanfaatkan IC 74HC595
*/
int ROW = 0;
int LABEL = 1;
//#include <dht.h>
//dht DHT;
//#define DHT11_PIN 5
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
//int led = 13;
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(4,3);
/*
#include <SdFat.h>
#include <SdFatUtil.h>
#include <SFEMP3Shield.h>
*/
#include <LiquidCrystal_SR.h>
#include "BMP280.h"
//#include "Wire.h"
#define P0 1013.25
BMP280 bmp;
LiquidCrystal_SR lcd(6, 7, 8); //6 to pin14(IC595),7 to pin11(IC595),8 to pin12(IC595)
//jika mp3 shield di pasang maka pin 6,7,8 digantikan dengan pin 14,15,16, karena pin 6,7,8 dipakai
oleh shield
/*
SdFat sd;
SFEMP3Shield MP3player;
*/
void setupRadio()
{
// Initiate the radio
radio.begin();
// Define the radio's power amplifier level (RF24_PA_MIN for debugging, RF24_PA_HIGH for
longest range)
radio.setPALevel(RF24_PA_MIN);
bmp.setOversampling(4);
lcd.begin(16, 4);
Serial.begin(9600);
Serial.println("CLEARDATA");
Serial.println("LABEL,Date,Time,temp1,hum,P,RTC Time");
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
//Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
//sd.begin(SD_SEL, SPI_HALF_SPEED);
//MP3player.begin();
}
void loop(){
if(radio.available()){
if(!radio.read(&data, sizeof(data))) {
// The sensor did not receive the ACK packet
//Serial.println("ACK not received by client.");
}
/*{
double T,P;
char result = bmp.startMeasurment();
if(result!=0){
delay(result);
result = bmp.getTemperatureAndPressure(T,P);
if(result!=0)
{
double A = bmp.altitude(P,P0);
//delay(1000);
}*/
/*int nilai2 = analogRead(PinSensorMasuk2);
int nilai3 = analogRead(PinSensorMasuk3);
float milivolt2 = (nilai2 / 1024.0) * 5000;
float temp2 = milivolt2 / 10;
float milivolt3 = (nilai3 / 1024.0) * 5000;
float temp3 = milivolt3 / 10;*/
//----bagian ini untuk membuyikan alarm musik dari mp3 shield
DateTime now = RTC.now();
/*
if(now.hour() == 8 && now.minute() == 0){
MP3player.playTrack(1);
}
if(now.hour() == 9 && now.minute() == 0){
MP3player.playTrack(2);
}
if(now.hour() == 10 && now.minute() == 0){
MP3player.playTrack(3);
}
if(now.hour() == 11 && now.minute() == 0){
MP3player.playTrack(4);
}
if(now.hour() == 12 && now.minute() == 0){
MP3player.playTrack(5);
}
if(now.hour() == 13 && now.minute() == 0){
MP3player.playTrack(6);
}
if(now.hour() == 14 && now.minute() == 0){
MP3player.playTrack(7);
}
if(now.hour() == 15 && now.minute() == 0){
MP3player.playTrack(8);
}
if(now.hour() == 16 && now.minute() == 0){
MP3player.playTrack(9);
}
if(now.hour() == 17 && now.minute() == 0){
MP3player.playTrack(10);
}
if(now.hour() == 18 && now.minute() == 0){
MP3player.playTrack(11);
}
if(now.hour() == 19 && now.minute() == 0){
MP3player.playTrack(12);
}
if(now.hour() == 20 && now.minute() == 0){
MP3player.playTrack(13);
}
if(now.hour() == 21 && now.minute() == 0){
MP3player.playTrack(14);
}
if(now.hour() == 22 && now.minute() == 0){
MP3player.playTrack(15);
}
*/
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(" ");
//delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(now.hour(), DEC);
lcd.setCursor(2, 0);
lcd.print(":");
lcd.setCursor(3, 0);
lcd.print(now.minute(), DEC);
lcd.setCursor(5, 0);
lcd.print(":");
lcd.setCursor(6, 0);
lcd.print(now.second(),DEC);
lcd.setCursor(0, 3);
lcd.print(now.year(), DEC);
lcd.setCursor(5, 3);
lcd.print(P);
lcd.setCursor(0, 2);
lcd.print(now.day(), DEC);
lcd.setCursor(2, 2);
lcd.print("-");
lcd.setCursor(10, 0);
lcd.print(suhu);
lcd.setCursor(12, 0);
lcd.print("C");
lcd.setCursor(10, 1);
lcd.print(lembab);
lcd.setCursor(12, 1);
lcd.print("%");
Serial.print(temp1,1);
Serial.print(" ");
Serial.print(hum,1);
Serial.print(" ");
Serial.print(P,2);
Serial.println();
if(now.dayOfWeek()==1){
lcd.setCursor(0, 1);
lcd.print("MONDAY");
}
if(now.dayOfWeek()==2){
lcd.setCursor(0, 1);
lcd.print("TUESDAY");
}
if(now.dayOfWeek()==3){
lcd.setCursor(0, 1);
lcd.print("WEDNESDAY");
}
if(now.dayOfWeek()==4){
lcd.setCursor(0, 1);
lcd.print("THURSDAY");
}
if(now.dayOfWeek()==5){
lcd.setCursor(0, 1);
lcd.print("FRIDAY");
}
if(now.dayOfWeek()==6){
lcd.setCursor(0, 1);
lcd.print("SATURDAY");
}
if(now.dayOfWeek()==0){
lcd.setCursor(0, 1);
lcd.print("SUNDAY");
}
if(now.month()==1){
lcd.setCursor(3, 2);
lcd.print("JANUARY");
}
if(now.month()==2){
lcd.setCursor(3, 2);
lcd.print("FEBRUARY");
}
if(now.month()==3){
lcd.setCursor(3, 2);
lcd.print("MARCH");
}
if(now.month()==4){
lcd.setCursor(3, 2);
lcd.print("APRIL");
}
if(now.month()==5){
lcd.setCursor(3, 2);
lcd.print("MAY");
}
if(now.month()==6){
lcd.setCursor(3, 2);
lcd.print("JUNE");
}
if(now.month()==7){
lcd.setCursor(3, 2);
lcd.print("JULY");
}
if(now.month()==8){
lcd.setCursor(3, 2);
lcd.print("AUGUST");
}
if(now.month()==9){
lcd.setCursor(3, 2);
lcd.print("SEPTEMBER");
}
if(now.month()==10){
lcd.setCursor(3, 2);
lcd.print("OCTOBER");
}
if(now.month()==11){
lcd.setCursor(3, 2);
lcd.print("NOVEMBER");
}
if(now.month()==12){
lcd.setCursor(3, 2);
lcd.print("DECEMBER");
}
delay(1000);
}
}
void tampilan(){
//int chk = DHT.read11(DHT11_PIN);
float temp1 = data.temperature;
float hum = data.humidity;
double T,P;
char result = bmp.startMeasurment();
result = bmp.getTemperatureAndPressure(T,P);
double A = bmp.altitude(P,P0);
ROW++;
Serial.print("DATA,DATE,TIME,");
Serial.print(temp1,2);
Serial.print(",");
Serial.print(hum,2);
Serial.print(",");
Serial.print(P,2);
Serial.print(",");
Transmitter DHT22
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "DHT.h" // DHT & AM2302 library
// Version number
const float fVerNum = 0.03;
// Data pin connected to AM2302
#define DHTPIN 2
//////////////////////////////////////////////////////
RF24 radio(8,7);
void setupRadio()
{
// Initiate the radio
radio.begin();
// Define the radio's power amplifier level (RF24_PA_MIN for debugging, RF24_PA_HIGH for
longest range)
radio.setPALevel(RF24_PA_MIN);
setupRadio();
dht.begin();
}
void loop()
{
data.temperature = dht.readTemperature();
data.humidity = dht.readHumidity();
// Open a writing pipe on the radio
radio.openWritingPipe(0xE8E8F0F0E1LL);
bmp.setOversampling(4);
lcd.begin(16, 4);
Serial.begin(9600);
Serial.println("CLEARDATA");
Serial.println("LABEL,Date,Time,temp1,hum,P,RTC Time");
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
//Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
//sd.begin(SD_SEL, SPI_HALF_SPEED);
//MP3player.begin();
}
void loop(){
/*{
double T,P;
char result = bmp.startMeasurment();
if(result!=0){
delay(result);
result = bmp.getTemperatureAndPressure(T,P);
if(result!=0)
{
double A = bmp.altitude(P,P0);
//delay(1000);
}*/
/*int nilai2 = analogRead(PinSensorMasuk2);
int nilai3 = analogRead(PinSensorMasuk3);
float milivolt2 = (nilai2 / 1024.0) * 5000;
float temp2 = milivolt2 / 10;
float milivolt3 = (nilai3 / 1024.0) * 5000;
float temp3 = milivolt3 / 10;*/
//----bagian ini untuk membuyikan alarm musik dari mp3 shield
DateTime now = RTC.now();
/*
if(now.hour() == 8 && now.minute() == 0){
MP3player.playTrack(1);
}
if(now.hour() == 9 && now.minute() == 0){
MP3player.playTrack(2);
}
if(now.hour() == 10 && now.minute() == 0){
MP3player.playTrack(3);
}
if(now.hour() == 11 && now.minute() == 0){
MP3player.playTrack(4);
}
if(now.hour() == 12 && now.minute() == 0){
MP3player.playTrack(5);
}
if(now.hour() == 13 && now.minute() == 0){
MP3player.playTrack(6);
}
if(now.hour() == 14 && now.minute() == 0){
MP3player.playTrack(7);
}
if(now.hour() == 15 && now.minute() == 0){
MP3player.playTrack(8);
}
if(now.hour() == 16 && now.minute() == 0){
MP3player.playTrack(9);
}
if(now.hour() == 17 && now.minute() == 0){
MP3player.playTrack(10);
}
if(now.hour() == 18 && now.minute() == 0){
MP3player.playTrack(11);
}
if(now.hour() == 19 && now.minute() == 0){
MP3player.playTrack(12);
}
if(now.hour() == 20 && now.minute() == 0){
MP3player.playTrack(13);
}
if(now.hour() == 21 && now.minute() == 0){
MP3player.playTrack(14);
}
if(now.hour() == 22 && now.minute() == 0){
MP3player.playTrack(15);
}
*/
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
//delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(now.hour(), DEC);
lcd.setCursor(2, 0);
lcd.print(":");
lcd.setCursor(3, 0);
lcd.print(now.minute(), DEC);
lcd.setCursor(5, 0);
lcd.print(":");
lcd.setCursor(6, 0);
lcd.print(now.second(),DEC);
lcd.setCursor(0, 3);
lcd.print(now.year(), DEC);
lcd.setCursor(5, 3);
lcd.print(P);
lcd.setCursor(0, 2);
lcd.print(now.day(), DEC);
lcd.setCursor(2, 2);
lcd.print("-");
lcd.setCursor(10, 0);
lcd.print(suhu);
lcd.setCursor(12, 0);
lcd.print("C");
lcd.setCursor(10, 1);
lcd.print(lembab);
lcd.setCursor(12, 1);
lcd.print("%");
if(now.dayOfWeek()==1){
lcd.setCursor(0, 1);
lcd.print("MONDAY");
}
if(now.dayOfWeek()==2){
lcd.setCursor(0, 1);
lcd.print("TUESDAY");
}
if(now.dayOfWeek()==3){
lcd.setCursor(0, 1);
lcd.print("WEDNESDAY");
}
if(now.dayOfWeek()==4){
lcd.setCursor(0, 1);
lcd.print("THURSDAY");
}
if(now.dayOfWeek()==5){
lcd.setCursor(0, 1);
lcd.print("FRIDAY");
}
if(now.dayOfWeek()==6){
lcd.setCursor(0, 1);
lcd.print("SATURDAY");
}
if(now.dayOfWeek()==0){
lcd.setCursor(0, 1);
lcd.print("SUNDAY");
}
if(now.month()==1){
lcd.setCursor(3, 2);
lcd.print("JANUARY");
}
if(now.month()==2){
lcd.setCursor(3, 2);
lcd.print("FEBRUARY");
}
if(now.month()==3){
lcd.setCursor(3, 2);
lcd.print("MARCH");
}
if(now.month()==4){
lcd.setCursor(3, 2);
lcd.print("APRIL");
}
if(now.month()==5){
lcd.setCursor(3, 2);
lcd.print("MAY");
}
if(now.month()==6){
lcd.setCursor(3, 2);
lcd.print("JUNE");
}
if(now.month()==7){
lcd.setCursor(3, 2);
lcd.print("JULY");
}
if(now.month()==8){
lcd.setCursor(3, 2);
lcd.print("AUGUST");
}
if(now.month()==9){
lcd.setCursor(3, 2);
lcd.print("SEPTEMBER");
}
if(now.month()==10){
lcd.setCursor(3, 2);
lcd.print("OCTOBER");
}
if(now.month()==11){
lcd.setCursor(3, 2);
lcd.print("NOVEMBER");
}
if(now.month()==12){
lcd.setCursor(3, 2);
lcd.print("DECEMBER");
}
delay(1000);
}
void tampilan(){
int chk = DHT.read11(DHT11_PIN);
float temp1 = DHT.temperature;
float hum = DHT.humidity;
double T,P;
char result = bmp.startMeasurment();
result = bmp.getTemperatureAndPressure(T,P);
double A = bmp.altitude(P,P0);
ROW++;
Serial.print("DATA,DATE,TIME,");
Serial.print(temp1,2);
Serial.print(",");
Serial.print(hum,2);
Serial.print(",");
Serial.print(P,2);
Serial.print(",");
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
irrecv.enableIRIn(); // Start the receiver
// pin LED sebagai output
pinMode(pinLED1, OUTPUT);
pinMode(pinLED2, OUTPUT);
pinMode(pinLED3, OUTPUT);
pinMode(pinLED4, OUTPUT);
pinMode(pinLED5, OUTPUT);
pinMode(pinLED6, OUTPUT);
pinMode(pinLED7, OUTPUT);
pinMode(pinLED8, OUTPUT);
pinMode(pinLED9, OUTPUT);
pinMode(pinLED10, OUTPUT);
pinMode(pinLED11, OUTPUT);
}
int on = 0;
unsigned long last = millis();
void loop() {
if (irrecv.decode(&results)) {
if (results.value == 0x20F0E01F) {
EEPROM.write(1, 1);
}
else if (results.value == 0x20F002FD) {
EEPROM.write(1, 2);
}
else if (results.value == 0x20F0609F) {
EEPROM.write(1, 3);
}
irrecv.resume(); // Receive the next value
}
petern = EEPROM.read(1);
if(petern == 1){
petern1();
}
if(petern == 2){
petern2();
}
if(petern == 3){
petern3();
}
}#
void petern1(){
for(int i=0; i<12; i++){
if(i==0){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==1){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==2){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==3){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==4){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==5){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==6){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==7){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==8){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==9){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==10){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, LOW);
}
else if(i==11){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, HIGH);
}
delay(100);
}
}
void petern2(){
for(int i=0; i<12; i++){
if(i==0){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==1){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, HIGH);
}else if(i==2){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, HIGH);
}else if(i==3){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, HIGH);
}else if(i==4){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, HIGH);
}else if(i==5){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, HIGH);
}else if(i==6){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, HIGH);
}else if(i==7){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, LOW);
}else if(i==8){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==9){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==10){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}
else if(i==11){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}
delay(100);
}
}
void petern3(){
for(int i=0; i<21; i++){
if(i==0){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==1){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==2){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==3){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==4){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==5){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==6){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==7){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==8){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}else if(i==9){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, LOW);
}else if(i==10){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, HIGH);
}
else if(i==11){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, HIGH);
digitalWrite(pinLED11, LOW);
}
else if(i==12){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, HIGH);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}
else if(i==13){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, HIGH);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}
else if(i==14){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}
else if(i==15){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}
else if(i==16){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}
else if(i==17){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}
else if(i==18){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}
else if(i==19){
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}
else if(i==20){
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
digitalWrite(pinLED9, LOW);
digitalWrite(pinLED10, LOW);
digitalWrite(pinLED11, LOW);
}
delay(100);
}
}
#include <IRremote.h>
int RECV_PIN = 3; // the pin where you connect the output pin of TSOP4838
int led1 = 2;
int led2 = 4;
int led3 = 7;
int itsONled[] = {0,0,0,0};
/* the initial state of LEDs is OFF (zero)
the first zero must remain zero but you can
change the others to 1's if you want a certain
led to light when the board is powered */
#define code1 552656927 // code received from button A
#define code2 552600317 // code received from button B
#define code3 552624287 // code received from button C
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600); // you can comment this line
irrecv.enableIRIn(); // Start the receiver
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
unsigned int value = results.value;
switch(value) {
case code1:
if(itsONled[1] == 1) { // if first led is on then
digitalWrite(led1, LOW); // turn it off when button is pressed
itsONled[1] = 0; // and set its state as off
} else { // else if first led is off
digitalWrite(led1, HIGH); // turn it on when the button is pressed
itsONled[1] = 1; // and set its state as on
}
break;
case code2:
if(itsONled[2] == 1) {
digitalWrite(led2, LOW);
itsONled[2] = 0;
} else {
digitalWrite(led2, HIGH);
itsONled[2] = 1;
}
break;
case code3:
if(itsONled[3] == 1) {
digitalWrite(led3, LOW);
itsONled[3] = 0;
} else {
digitalWrite(led3, HIGH);
itsONled[3] = 1;
}
break;
}
Serial.println(value); // you can comment this line
irrecv.resume(); // Receive the next value
}
}
RGB rgb;
int global_dim=16;
void setup(){
Tlc.init();
}
void loop(){
randomSeed(millis());
int wait=random(1,30);
int dim=random(4,6);
int max_cycles=8;
int cycles=random(1,max_cycles+1);
rainbowCycle(wait,cycles,dim);
if(global_dim){
red=red/global_dim;
green=green/global_dim;
blue=blue/global_dim;
}
Tlc.set(num*3,red);
Tlc.set(num*3+1,green);
Tlc.set(num*3+2,blue);
int cycles, j, k;
for(cycles=0;cycles<cycle;cycles++){
byte dir=random(0,2);
k=255;
for (j=0; j < 256; j++,k--) { // cycles of all colors in the wheel
if(k<0)k=255;
// Tlc.clear();
}
Tlc.update();
delay(wait);
}
}
}
Take a tricolour LED through the colours of the rainbow using an analogue input.
The circuit:
* TBC
*/
// The three primary colour LEDs, driven as analgue outputs (actually PWM, but
// close enough for our analogue eyes).
// The Hue potentiometer goes on an analogue pin, taking the pin from
// 0V to 5V.
// The size of the angle of one sector (1/6 of a colour wheel), and of a complete
// cycle of the colour wheel.
// Work variables.
unsigned int r, g, b;
void setup() {
// Still need to set a baud rate, even for USB.
Serial.begin(9600);
// Set LED pins to output.
pinMode(ledPinRed, OUTPUT);
pinMode(ledPinGrn, OUTPUT);
pinMode(ledPinBlu, OUTPUT);
void loop() {
// The Hue potentiometer value is mapped to degrees - 0 to 360 - for convenience.
potValueHue = map(analogRead(potPinHue), 0, 1023, 0, 360);
if (digitalRead(modeSwitchPin)) {
// Rainbow colour mode (infra-red to ultra-violet - well invisible to invisible ;-).
// The hue ranges from red (0) at 60 degrees to blue (170) at 300 degrees.
hue = constrain(map(potValueHue, angleSector, angleMax - angleSector, hueRedLow,
hueBlue), hueRedLow, hueBlue);
// The brightness is fixed at full for the colour wheel. This could be
// linked to another poteniometer if that is a concept you wish to
// demonstrate.
brightness = 255;
}
// Do the conversion.
HSBToRGB(hue, saturation, brightness, &r, &g, &b);
analogWrite(ledPinRed, r);
analogWrite(ledPinGrn, g);
analogWrite(ledPinBlu, b);
Serial.print(" bright=");
Serial.print(brightness);
Serial.print(" hue=");
Serial.print(hue);
Serial.print(" red=");
Serial.print(r);
Serial.print(" green=");
Serial.print(g);
Serial.print(" blue=");
Serial.print(b);
Serial.println("");
delay(50);
}
void HSBToRGB(
unsigned int inHue, unsigned int inSaturation, unsigned int inBrightness,
unsigned int *oR, unsigned int *oG, unsigned int *oB )
{
if (inSaturation == 0)
{
// achromatic (grey)
*oR = *oG = *oB = inBrightness;
}
else
{
unsigned int scaledHue = (inHue * 6);
unsigned int sector = scaledHue >> 8; // sector 0 to 5 around the color wheel
unsigned int offsetInSector = scaledHue - (sector << 8); // position within the sector
unsigned int p = (inBrightness * ( 255 - inSaturation )) >> 8;
unsigned int q = (inBrightness * ( 255 - ((inSaturation * offsetInSector) >> 8) )) >> 8;
unsigned int t = (inBrightness * ( 255 - ((inSaturation * ( 255 - offsetInSector )) >> 8) )) >> 8;
switch( sector ) {
case 0:
*oR = inBrightness;
*oG = t;
*oB = p;
break;
case 1:
*oR = q;
*oG = inBrightness;
*oB = p;
break;
case 2:
*oR = p;
*oG = inBrightness;
*oB = t;
break;
case 3:
*oR = p;
*oG = q;
*oB = inBrightness;
break;
case 4:
*oR = t;
*oG = p;
*oB = inBrightness;
break;
default: // case 5:
*oR = inBrightness;
*oG = p;
*oB = q;
break;
}
}
}
This code is public domain but you buy me a beer if you use this and we meet
someday (Beerware license).
4 digit 7 segment display:
http://www.sparkfun.com/products/9483
Datasheet:
http://www.sparkfun.com/datasheets/Components/LED/7-Segment/YSD-439AR6B-35.pdf
This code should work with all colors (red, blue, yellow, green) but the
brightness will vary from one color to the next because the forward voltage
drop of each color is different. This code was written and calibrated for the
red color.
This code will work with most Arduinos but you may want to re-route some of
the pins.
7 segments
4 digits
1 colon
=
12 pins required for full control
This sketch for common anode
*/
void setup() {
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
displayNumber(millis()/1000);
//Display brightness
//Each digit is on for a certain amount of microseconds
//Then it is off until we have reached a total of 20ms for the function call
//Let's assume each digit is on for 1000us
//Each digit is on for 1ms, there are 4 digits, so the display is off for 16ms.
//That's a ratio of 1ms to 16ms or 6.25% on time (PWM).
//Let's define a variable called brightness that varies from:
//5000 blindingly bright (15.7mA current draw per digit)
//2000 shockingly bright (11.4mA current draw per digit)
//1000 pretty bright (5.9mA)
//500 normal (3mA)
//200 dim but readable (1.4mA)
//50 dim but readable (0.56mA)
//5 dim but readable (0.31mA)
//1 dim but readable in dark (0.28mA)
delayMicroseconds(DISPLAY_BRIGHTNESS);
//Display digit for fraction of a second (1us to 5000us, 500 is pretty good)
switch (numberToDisplay){
case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 2:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 3:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 4:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 6:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 7:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 8:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
}
}
173. ANALOG ON SEVEN SEGMENT
/*
6-13-2011
Spark Fun Electronics 2011
Nathan Seidle
This code is public domain but you buy me a beer if you use this and we meet
someday (Beerware license).
4 digit 7 segment display:
http://www.sparkfun.com/products/9483
Datasheet:
http://www.sparkfun.com/datasheets/Components/LED/7-Segment/YSD-439AR6B-35.pdf
This code should work with all colors (red, blue, yellow, green) but the
brightness will vary from one color to the next because the forward voltage
drop of each color is different. This code was written and calibrated for the
red color.
This code will work with most Arduinos but you may want to re-route some of
the pins.
7 segments
4 digits
1 colon
=
12 pins required for full control
This sketch for common anode
*/
void setup() {
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
int sensorValue = analogRead(A3);
//long startTime = millis();
displayNumber(sensorValue);
//Display brightness
//Each digit is on for a certain amount of microseconds
//Then it is off until we have reached a total of 20ms for the function call
//Let's assume each digit is on for 1000us
//Each digit is on for 1ms, there are 4 digits, so the display is off for 16ms.
//That's a ratio of 1ms to 16ms or 6.25% on time (PWM).
//Let's define a variable called brightness that varies from:
//5000 blindingly bright (15.7mA current draw per digit)
//2000 shockingly bright (11.4mA current draw per digit)
//1000 pretty bright (5.9mA)
//500 normal (3mA)
//200 dim but readable (1.4mA)
//50 dim but readable (0.56mA)
//5 dim but readable (0.31mA)
//1 dim but readable in dark (0.28mA)
delayMicroseconds(DISPLAY_BRIGHTNESS);
//Display digit for fraction of a second (1us to 5000us, 500 is pretty good)
switch (numberToDisplay){
case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 2:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 3:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 4:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 6:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 7:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 8:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
}
}
174. LIGHTNING COUNTER
/*
State change detection (edge detection)
Often, you don't need to know the state of a digital input all the time,
but you just need to know when the input changes from one state to another.
For example, you want to know when a button goes from OFF to ON. This is called
state change detection, or edge detection.
This example shows how to detect when a button or button changes from off to on
and on to off.
The circuit:
* pushbutton attached to pin 7 from +5V
* 10M resistor attached to pin 7 from ground
* LED attached from pin 8 to ground (or use the built-in LED on
most Arduino boards)
http://www.arduino.cc/en/Tutorial/ButtonStateChange
*/
// this constant won't change:
const int buttonPin = 2; // the pin that the pushbutton is attached to
const int ledPin = 13; // the pin that the LED is attached to
void setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
// initialize the LED as an output:
pinMode(ledPin, OUTPUT);
// initialize serial communication:
Serial.begin(9600);
}
void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);
/*
// turns on the LED every four button pushes by
// checking the modulo of the button push counter.
// the modulo function gives you the remainder of
// the division of two numbers:
if (buttonPushCounter % 4 == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
*/
}
This code is public domain but you buy me a beer if you use this and we meet
someday (Beerware license).
This code will work with most Arduinos but you may want to re-route some of
the pins.
7 segments
4 digits
1 colon
=
12 pins required for full control
This sketch for common anode
*/
const int buttonPin = 2;
int digit1 = 11; //PWM Display pin 1
int digit2 = 10; //PWM Display pin 2
int digit3 = 9; //PWM Display pin 6
int digit4 = 6; //PWM Display pin 8
void setup() {
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
pinMode(13, OUTPUT);
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);
/*
// turns on the LED every four button pushes by
// checking the modulo of the button push counter.
// the modulo function gives you the remainder of
// the division of two numbers:
if (buttonPushCounter % 4 == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
*/
displayNumber(buttonPushCounter);
//Display brightness
//Each digit is on for a certain amount of microseconds
//Then it is off until we have reached a total of 20ms for the function call
//Let's assume each digit is on for 1000us
//Each digit is on for 1ms, there are 4 digits, so the display is off for 16ms.
//That's a ratio of 1ms to 16ms or 6.25% on time (PWM).
//Let's define a variable called brightness that varies from:
//5000 blindingly bright (15.7mA current draw per digit)
//2000 shockingly bright (11.4mA current draw per digit)
//1000 pretty bright (5.9mA)
//500 normal (3mA)
//200 dim but readable (1.4mA)
//50 dim but readable (0.56mA)
//5 dim but readable (0.31mA)
//1 dim but readable in dark (0.28mA)
switch (numberToDisplay){
case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 2:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 3:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 4:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 6:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 7:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 8:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
}
}
void setup()
{
Serial.begin(9600);
delay(200);
Serial.println("AT");
delay(1000);
Serial.print("ATD");
Serial.println(phone_no);
delay(10000);
Serial.println("ATH");
}
void loop()
{
}
}
void loop()
{
statePir = digitalRead(pirPin);
if (statePir == HIGH)
{
call();
}
if (statePir == LOW)
{
}
}
void call(){
Serial.println("AT");
delay(1000);
Serial.print("ATD");
Serial.println(phone_no);
delay(10000);
Serial.println("ATH");
}
void loop()
{
statePir = digitalRead(pirPin);
if (statePir == HIGH)
{
call();
}
if (statePir == LOW)
{
}
}
void call(){
A6GSM.println("AT");
delay(1000);
A6GSM.print("ATD");
A6GSM.println(phoneNumber);
delay(10000);
A6GSM.println("ATH");
}
179. LED SWITCH WITH GSM CALL
#include <SoftwareSerial.h>
char inchar; // Will hold the incoming character from the GSM shield
// Tx of A6 linked to pin 7
const int pinRxNano = 7;
// Rx of A6 linked to pin 8
const int pinTxNano = 8;
const String phoneNumber= "+97433187702";
const String messageInit = "A6 ready";
SoftwareSerial A6GSM(pinRxNano, pinTxNano);
int numring=0;
int comring=3;
int onoff=0; // 0 = off, 1 = on
void Response(){
int a = 0;
Serial.println();
while(1){
if(A6GSM.available()){
String dataFromA6 =A6GSM.readString();
dataFromA6.trim();
Serial.println(dataFromA6);
a++;
if(dataFromA6.indexOf("OK")>0){break;}
}
if(a>500){a=0;break;}
delay(200);
}
}
void startAT(){
int nbAT = 0;
while(1){
if (nbAT==0){A6GSM.println("AT");Serial.print(".");}
if(A6GSM.available()){
String dataFromA6 =A6GSM.readString();
dataFromA6.trim();
Serial.println(dataFromA6);
if(dataFromA6.indexOf("OK")>0){break;}
}
delay(200);
nbAT++;
if(nbAT++>10){nbAT=0;}
}
}
void envoieSMS(String numeroEnvoi, String messageEnvoi) {
delay(200);
Serial.println("Selection format message SMS");
A6GSM.println("AT+CMGF=1");
Response();
delay(200);
Serial.println("Envoi message SMS");
A6GSM.print("AT+CMGS=\"");
A6GSM.print(numeroEnvoi);
A6GSM.println("\"");
delay(200);
A6GSM.print(messageEnvoi);
delay(200);
A6GSM.println (char(26));
Response();
}
void setup()
{
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
A6GSM.begin(9600);
Serial.begin(9600);
delay(200);
Serial.println("Init");
//AT
startAT();
//envoieSMS(phoneNumber,messageInit);
}
void doSomething()
{
if (onoff==0)
{
onoff=1;
digitalWrite(12, HIGH);
}
else
if (onoff==1)
{
onoff=0;
digitalWrite(12, LOW);
}
}
void loop()
{
if(A6GSM.available() >0)
{
inchar=A6GSM.read();
if (inchar=='R')
{
delay(10);
inchar=A6GSM.read();
if (inchar=='I')
{
delay(10);
inchar=A6GSM.read();
if (inchar=='N')
{
delay(10);
inchar=A6GSM.read();
if (inchar=='G')
{
delay(10);
numring++;
Serial.println("ring!");
if (numring==comring)
{
numring=0; // reset ring counter
doSomething();
}
}
}
}
}
}
}
180. POWER LOCK BY GSM
Pada proyek ini kita coba gabungkan beberapa module untuk membuat power lock untuk mobil.
Penerapan ini berguna saat mobil kita dirampok orang, maka kira serahkan saja mobil itu dan semua
penumpang dikeluarkan. Ketika mobil sudah dibawa kabur oleh si perampok, ketika jarak mobil
sudah aman (red: jika perampok kembali ke TKP kita sudah tidak berada di situ dan sudah lari ke
pos polisi terdekat atau minta pertolongan penduduk) , maka kita miss call ke nomer tang terpasang
pada module GSM, maka mobil akan mati secara otomatis. Ketika mobil mati karena kita miss call
maka tidak dapat dinyalakan lagi, untuk menyalakan lagi harus mamakai RFID.
const int ledPin = 5;//this signal go to relay or mosfet or for drive triac
#include <EEPROM.h>
int addr = 0;
byte value;
#include <SoftwareSerial.h>
char inchar; // Will hold the incoming character from the GSM shield
//SoftwareSerial SIM900(7, 8);//RX,TX
const int pinRxNano = 7;
// Rx of A6 linked to pin 8
const int pinTxNano = 8;
const String phoneNumber= "+97433187702";
const String messageInit = "A6 ready";
SoftwareSerial A6GSM(pinRxNano, pinTxNano);
int numring=0;
int comring=1;
void Response(){
int a = 0;
Serial.println();
while(1){
if(A6GSM.available()){
String dataFromA6 =A6GSM.readString();
dataFromA6.trim();
Serial.println(dataFromA6);
a++;
if(dataFromA6.indexOf("OK")>0){break;}
}
if(a>500){a=0;break;}
delay(200);
}
}
void startAT(){
int nbAT = 0;
while(1){
if (nbAT==0){A6GSM.println("AT");Serial.print(".");}
if(A6GSM.available()){
String dataFromA6 =A6GSM.readString();
dataFromA6.trim();
Serial.println(dataFromA6);
if(dataFromA6.indexOf("OK")>0){break;}
}
delay(200);
nbAT++;
if(nbAT++>10){nbAT=0;}
}
}
void envoieSMS(String numeroEnvoi, String messageEnvoi) {
delay(200);
Serial.println("Selection format message SMS");
A6GSM.println("AT+CMGF=1");
Response();
delay(200);
Serial.println("Envoi message SMS");
A6GSM.print("AT+CMGS=\"");
A6GSM.print(numeroEnvoi);
A6GSM.println("\"");
delay(200);
A6GSM.print(messageEnvoi);
delay(200);
A6GSM.println (char(26));
Response();
}
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
void setup() {
Serial.begin(9600);
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
//RFID.begin(9600);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
A6GSM.begin(9600);
Serial.begin(9600);
delay(200);
Serial.println("Init");
//AT
startAT();
//envoieSMS(phoneNumber,messageInit);
}
void(* resetFunc) (void) = 0;
void doSomething()
{
value = EEPROM.read(addr);
if (value==0)
{
digitalWrite(ledPin, HIGH);
delay(10000); //delay 10 minutes
EEPROM.write(addr, 1);
}
//resetFunc();
}
void loop(){
value = EEPROM.read(addr);
if(A6GSM.available() >0)
{
inchar=A6GSM.read();
if (inchar=='R')
{
delay(10);
inchar=A6GSM.read();
if (inchar=='I')
{
delay(10);
inchar=A6GSM.read();
if (inchar=='N')
{
delay(10);
inchar=A6GSM.read();
if (inchar=='G')
{
delay(10);
numring++;
Serial.println("ring!");
if (numring==comring)
{
numring=0; // reset ring counter
doSomething();
}
}
}
}
}
}
else {
value = EEPROM.read(addr);
if (value==1){
digitalWrite(ledPin, LOW);
}
Serial.println(value);
}
//===========================================================
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Show UID on serial monitor
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
//if ((content.substring(1) == "76 5C A8 BB") || (content.substring(1) == "A0 D1 39 83" ))
//change here the UID of the card/cards that you want to give access
if (content.substring(1) == "76 5C A8 BB")// single card
{
Serial.println("Authorized access");
EEPROM.write(addr, 0);
//Stored_Tag_ID="";
//Parsed_Tag_ID="";
resetFunc(); //call reset
}
}
181. FLAME DETECTOR WITH RF24
Transmitter
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMsg[1];
RF24 radio(8,7);
void setup()
{
Serial.begin(9600);
Serial.println("NRF24L01 Transmitter");
radio.begin();
radio.openWritingPipe(pipe);
}
void loop()
{
int sensorValue0 = analogRead(A0);
if (sensorValue0 < 100)
{
DataMsg[0] = 1;
radio.write(DataMsg, 1);
}
else
{
DataMsg[0] = 2;
radio.write(DataMsg, 1);
}
}
Receiver
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMgs[1];
RF24 radio(8,7);
const uint64_t pipe = 0xE14BC8F482LL;
int Relay1 = 5;
void setup()
{
pinMode(Relay1, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
if (radio.available())
{
bool done = false;
while (!done)
{
done = radio.read(DataMgs, 1);
Serial.print("NRF24L01 Receiver: ");
Serial.println(DataMgs[0]);
if (DataMgs[0] == 1)
{
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(2000); //#1
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(2000); //#2
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(2000); //#3
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(2000); //#4
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(2000); //#5
if (DataMgs[0] == 2)
{
digitalWrite(Relay1, LOW);
}
delay(100);
}
}
else
{
Serial.println("Waiting for signal...");
}
}
Transmitter
const int groundpin = 18; // analog input pin 4 -- ground
const int powerpin = 19; // analog input pin 5 -- voltage
const int xpin = A3; // x-axis of the accelerometer
const int ypin = A2; // y-axis
const int zpin = A1;// z-axis (only on 3-axis models)
float cx=0;
float cy=0;
float cz=0;
float a;
float b;
float c;
float d;
float x;
float y;
float z;
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMsg[1];
RF24 radio(8,7);
//===================================
pinMode(groundpin, OUTPUT);
pinMode(powerpin, OUTPUT);
digitalWrite(groundpin, LOW);
digitalWrite(powerpin, HIGH);
delay(6000);
x=analogRead(xpin);
y=analogRead(ypin);
z=analogRead(zpin);
if ((x >= cx)||(x < cx)) {
cx = x;
}
if ((y >= cy)||(y < cy)) {
cy = y;
}
if ((z >= cz)||(z < cz)) {
cz = z;
}
delay(2000);
}
void loop()
{
a=analogRead(xpin)-cx;
b=analogRead(ypin)-cy;
c=analogRead(zpin)-cz;
d=sqrt(sq(a)+sq(b)+sq(c));
if (d > 2.5){
DataMsg[0] = 1;
radio.write(DataMsg, 1);
//delay(2000);
}
else {
DataMsg[0] = 2;
radio.write(DataMsg, 1);
Serial.print(a);
// print a tab between values:
Serial.print("\t");
Serial.print(b);
// print a tab between values:
Serial.print("\t");
Serial.print(c);
Serial.print("\t");
Serial.print(d);
Serial.println();
Receiver
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMgs[1];
RF24 radio(8,7);
const uint64_t pipe = 0xE14BC8F482LL;
int Relay1 = 5;
void setup()
{
pinMode(Relay1, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
if (radio.available())
{
bool done = false;
while (!done)
{
done = radio.read(DataMgs, 1);
Serial.print("NRF24L01 Receiver: ");
Serial.println(DataMgs[0]);
if (DataMgs[0] == 1)
{
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(2000); //#1
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(2000); //#2
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(2000); //#3
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(2000); //#4
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(30);
digitalWrite(Relay1, HIGH);
delay(30);
digitalWrite(Relay1, LOW);
delay(2000); //#5
if (DataMgs[0] == 2)
{
digitalWrite(Relay1, LOW);
}
delay(100);
}
}
else
{
Serial.println("Waiting for signal...");
}
}
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(sensorpin);
Serial.println(val);
delay(100);
}
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
void setup() {
stepper1.setMaxSpeed(1000.0);
stepper1.setAcceleration(1000.0);
stepper1.setSpeed(600);
}//--(end setup )---
void loop() {
stepper1.moveTo(-10000);
stepper1.run();
}
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
void setup() {
stepper1.setMaxSpeed(10000.0);
stepper1.setAcceleration(1000.0);
stepper1.setSpeed(10000);
stepper1.moveTo(2000);
void loop() {
stepper1.moveTo(stepper1.currentPosition()+500);
stepper1.run();
}
=================Other sketch
#include <AccelStepper.h>
#define HALFSTEP 8
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
void setup() {
stepper1.setMaxSpeed(1000);
stepper1.setSpeed(800);
void loop() {
stepper1.runSpeed();
}
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
AccelStepper stepper2(HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8);
void setup() {
stepper1.setMaxSpeed(1000.0);
stepper1.setAcceleration(1000.0);
stepper1.setSpeed(1000);
stepper2.setMaxSpeed(1000.0);
stepper2.setAcceleration(1000.0);
stepper2.setSpeed(1000);
void loop() {
stepper1.moveTo(stepper1.currentPosition()+500);
stepper2.moveTo(stepper2.currentPosition()-500);
stepper1.run();
stepper2.run();
}
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
AccelStepper stepper2(HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8);
int sensorpin = 0;
int val = 0;
void setup() {
Serial.begin(9600);
stepper1.setMaxSpeed(1000.0);
stepper1.setAcceleration(10000.0);
stepper1.setSpeed(1000);
stepper2.setMaxSpeed(1000.0);
stepper2.setAcceleration(10000.0);
stepper2.setSpeed(1000);
}//--(end setup )---
void loop() {
val = analogRead(sensorpin);
//Serial.println(val);
if (val > 400) {
right();
}
else {
forward();
}
}
void forward(){
stepper1.moveTo(stepper1.currentPosition()+500);
stepper2.moveTo(stepper2.currentPosition()-500);
stepper1.run();
stepper2.run();
}
void right(){
stepper1.moveTo(stepper1.currentPosition()+500);
stepper2.moveTo(stepper2.currentPosition()+500);
stepper1.run();
stepper2.run();
}
188. PROPORTIONAL CONTROL STEPPER BY IR DISTANCE
#include <AccelStepper.h>
#define HALFSTEP 8
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
#define ANALOG_IN A0
void setup()
{
stepper.setMaxSpeed(1000);
}
void loop()
{
// Read new position
int analog_in = analogRead(ANALOG_IN);
stepper.moveTo(analog_in*5);
stepper.setSpeed(2000);
stepper.runSpeedToPosition();
}
#define DT 2
#define CLK 3
#define SW 4
#define DIR_CCW 0x10
#define DIR_CW 0x20
#define HALFSTEP 8
// Motor pin definitions
#define motorPin1 12 // IN1 on the ULN2003 driver 1
#define motorPin2 11 // IN2 on the ULN2003 driver 1
#define motorPin3 10 // IN3 on the ULN2003 driver 1
#define motorPin4 9 // IN4 on the ULN2003 driver 1
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
void setup(){
stepper.setMaxSpeed(1000.0);
stepper.setAcceleration(10000.0);
stepper.setSpeed(1000);
Serial.begin(9600);
pinMode(DT, INPUT);
pinMode(CLK, INPUT);
pinMode(SW, INPUT);
digitalWrite(SW, HIGH);
}
void loop(){
int counter;
unsigned char result;
/* Reset the counter */
counter = 0;
while(1)
{
/* Read the status of the dial */
unsigned char pinstate = (digitalRead(CLK) << 1) | digitalRead(DT);
state = ttable[state & 0xf][pinstate];
result=state&0x30;
if(result==DIR_CCW) counter++;
if(result==DIR_CW) counter--;
// put some magnification here about 100 times
stepper.moveTo(counter*100);
stepper.run();
}
}
{
switch(results.value)
{
case 0x20F0E01F: // RIGHT button pressed
small_stepper.setSpeed(500); //Max seems to be 700
Steps2Take = 2048; // Rotate CW 360 deg
small_stepper.step(Steps2Take);
break;
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
void setup()
{
stepper.setMaxSpeed(1000);
stepper.setAcceleration(10000);
stepper.moveTo(0);
delay(2000);
void loop()
{
stepper.runToNewPosition(0);
delay(2000);
stepper.runToNewPosition(-4096); // 360 deg
stepper.stop();
delay(1000);
stepper.runToNewPosition(2048);
stepper.stop();
delay(2000);
stepper.runToNewPosition(0);
delay(2000);
stepper.runToNewPosition(8192);
stepper.stop();
delay(3000);
}
int reading;
int lm35Pin = 1;
char sbuf[5];
uint16_t count;
uint32_t ts1, ts2;
// this constant won't change:
const int buttonPin = 2; // the pin that the pushbutton is attached to
const int ledPin = 13; // the pin that the LED is attached to
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
for (uint8_t i=0; i < 100; i++) {
display.setDigits( "----", 4 );
display.update();
delay(10);
}
delay(1000);
count = 0;
sprintf( sbuf, "%04u",count);
display.setDigits( sbuf, 4 );
display.update();
ts1 = ts2 = millis();
}
uint32_t ts;
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == LOW) {
buttonPushCounter++;
} else {
}
// Delay a little bit to avoid bouncing
delay(1);
}
lastButtonState = buttonState;
//Serial.print("number of lightning: ");
//Serial.println(buttonPushCounter);
ts = millis();
if ( ts - ts1 >= 10 ) {
sprintf( sbuf, "%04u", buttonPushCounter );
ts1 += 10;
}
display.setDigits( sbuf, 4 );
display.update();
}
void setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
// initialize the LED as an output:
pinMode(ledPin, OUTPUT);
// initialize serial communication:
Serial.begin(9600);
for (uint8_t i=0; i < 100; i++) {
display.setDigits( "----", 4 );
display.update();
delay(10);
}
delay(1000);
count = 0;
sprintf( sbuf, "%04u", count );
display.setDigits( sbuf, 4 );
display.update();
ts1 = ts2 = millis();
}
uint32_t ts;
void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
buttonPushCounter++;
//Serial.println("on");
} else {
}
// Delay a little bit to avoid bouncing
delay(1);
}
lastButtonState = buttonState;
//Serial.print("number of lightning: ");
//Serial.println(buttonPushCounter);
ts = millis();
if ( ts - ts1 >= 10 ) {
sprintf( sbuf, "%04u", buttonPushCounter );
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
void setup() {
stepper1.setMaxSpeed(1000);
stepper1.setAcceleration(10000);
stepper1.runToNewPosition(4096);//move 360 deg
delay(5000);
void loop() {
int analogValue = analogRead(analogPin);
stepper1.runToNewPosition(analogValue*4.17);
void loop() {
int sensorValue0 = analogRead(A0);
int sensorValue1 = analogRead(A1);
d=sensorValue0-sensorValue1;
if (d > 15) {
stepper1.moveTo(stepper1.currentPosition()+1);
stepper1.run();
}
if (d < -15) {
stepper1.moveTo(stepper1.currentPosition()-1);
stepper1.run();
}
if ((d <= 15)&&(d >= -15)) {
stepper1.stop();
}
if ((sensorValue0 <= 50 )&&(sensorValue0 <= 50 )) {
stepper1.runToNewPosition(0);
}
}
#include <AccelStepper.h>
#define HALFSTEP 8
// Motor pin definitions
#define motorPin1 12 // IN1 on the ULN2003 driver 1
#define motorPin2 11 // IN2 on the ULN2003 driver 1
#define motorPin3 10 // IN3 on the ULN2003 driver 1
#define motorPin4 9 // IN4 on the ULN2003 driver 1
int d;
const int buttonSet = 2;
const int buttonUp = 3;
const int buttonDown = 4;
int buttonSetState = 0;
int buttonUpState = 0;
int buttonDownState = 0;
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
void setup() {
pinMode(buttonSet, INPUT);
pinMode(buttonUp, INPUT);
pinMode(buttonDown, INPUT);
stepper1.setMaxSpeed(200);
stepper1.setAcceleration(10000);
stepper1.runToNewPosition(0);
delay(3000);
void loop() {
buttonSetState = digitalRead(buttonSet);
buttonUpState = digitalRead(buttonUp);
buttonDownState = digitalRead(buttonDown);
int sensorValue0 = analogRead(A0);
int sensorValue1 = analogRead(A1);
d=sensorValue0-sensorValue1;
if (buttonSetState == LOW) {
//+++++++++++++++++++++++++++++++++++++++++++++++++
if (d > 15) {
stepper1.moveTo(stepper1.currentPosition()+1);
stepper1.run();
}
if (d < -15) {
stepper1.moveTo(stepper1.currentPosition()-1);
stepper1.run();
}
if ((d <= 15)&&(d >= -15)) {
stepper1.stop();
}
if ((sensorValue0 <= 50 )&&(sensorValue0 <= 50 )) {
stepper1.runToNewPosition(0);
//+++++++++++++++++++++++++++++++++++++++++++++++++
}
//===============================
if (buttonSetState == HIGH) {
//-----------------------------
if (buttonUpState == HIGH) {
stepper1.moveTo(stepper1.currentPosition()+500);
stepper1.run();
}
//---------------------------------
if (buttonDownState == HIGH) {
stepper1.moveTo(stepper1.currentPosition()-500);
stepper1.run();
}
//---------------------------------------
if ((buttonDownState == LOW)&&(buttonUpState == LOW)) {
stepper1.stop();
}
//------------------------------------------------
}
//==============================================
}
RF24 radio(8,7);
const uint64_t pipe = 0xE14BC8F483LL;
void setup()
{
Serial.begin(9600);
Serial.println("NRF24L01 Transmitter");
radio.begin();
radio.openWritingPipe(pipe);
}
void loop()
{
int sensorValue0 = analogRead(A1);
if (sensorValue0 < 100)
{
DataMsg[0] = 1;
radio.write(DataMsg, 1);
}
else
{
DataMsg[0] = 2;
radio.write(DataMsg, 1);
}
}
Receiver
Sket 1 : without memory
//This sket mean light status will reset to ON or OFF when power arduino be reset.
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMgs[1];
RF24 radio(8,7);
const uint64_t pipe = 0xE14BC8F483LL;
int led = 3;
void setup()
{
pinMode(led, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
int on = 0;
unsigned long last = millis();
void loop()
{
if (radio.available())
{
bool done = false;
while (!done)
{
done = radio.read(DataMgs, 1);
//Serial.print("NRF24L01 Receiver: ");
//Serial.println(DataMgs[0]);
if (DataMgs[0] == 1)
{
if (DataMgs[0] == 2)
{
}
//delay(100);
}
}
else
{
//Serial.println("Waiting for signal...");
}
}
---------------------------------------------
//This sket mean light status will follow the last status of light when arduino be reset
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <EEPROM.h>
int DataMgs[1];
RF24 radio(8,7);
const uint64_t pipe = 0xE14BC8F483LL;
int led = 3;
byte laju;
void setup()
{
pinMode(led, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
int on = 0;
unsigned long last = millis();
void loop()
{
if (radio.available())
{
bool done = false;
while (!done)
{
done = radio.read(DataMgs, 1);
//Serial.print("NRF24L01 Receiver: ");
//Serial.println(DataMgs[0]);
if (DataMgs[0] == 1)
{
if (DataMgs[0] == 2)
{
//------------------------------
laju = EEPROM.read(1);
if (laju==1){
digitalWrite(led, HIGH);
}
if (laju==0){
digitalWrite(led, LOW);
}
//-------------------------------
}
//delay(100);
}
}
else
{
//-----------------------------------
laju = EEPROM.read(1);
if (laju==1){
digitalWrite(led, HIGH);
}
if (laju==0){
digitalWrite(led, LOW);
}
//----------------------------------
void loop(){
// read the state of the hall effect sensor:
hallState = digitalRead(hallPin);
counter();
if (millis() - timeold >= 100) {
detachInterrupt(0);
laju=(pulses)*235.5; //number pulses in 100ms with 16 spots magnet
turn=(pulses)*0.625;
Serial.print(pulses);
Serial.print(" pulses/100ms ");
Serial.print(laju);
Serial.print(" rpm");
Serial.print(" ");
Serial.print(turn);
Serial.println(" turn/second");
timeold = millis();
pulses = 0;
attachInterrupt(0, counter, FALLING);
}
}
void counter()
{
hallState = digitalRead(hallPin);
if (hallState != lasthallState) {
if (hallState == LOW) {
pulses++;
}
lasthallState = hallState;
}
void setup() {
Serial.begin(9600);
for (uint8_t i=0; i < 100; i++) {
display.setDigits( "----", 4 );
display.update();
delay(10);
}
delay(1000);
count = 0;
sprintf( sbuf, "%04u", count );
display.setDigits( sbuf, 4 );
display.update();
ts1 = ts2 = millis();
}
uint32_t ts;
void loop() {
int sensorValue = analogRead(A0);
ts = millis();
if ( ts - ts1 >= 1000 ) {
sprintf( sbuf, "%04u", sensorValue );
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
if(now.hour() >= 19 || now.hour() < 7){
digitalWrite(led1, HIGH);
}
if(now.hour() >= 7 && now.hour() < 19){
digitalWrite(led1,LOW);
}
if (d > 2.5){
digitalWrite(13, HIGH);
delay(2000);
}
else {
Serial.print(a);
// print a tab between values:
Serial.print("\t");
Serial.print(b);
// print a tab between values:
Serial.print("\t");
Serial.print(c);
Serial.print("\t");
Serial.print(d);
Serial.println();
digitalWrite(13, LOW);
}
}
205. DIGITAL CLOCK
#include <Wire.h>
#include "TM1637.h"
#define CLK 6
#define DIO 7
#define brightness 6
#define keyHor 5
#define keyMin 4
#define keyPL 3
TM1637 tm1637(CLK,DIO);
#define DS3231_I2C_ADDRESS 0x68
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
void setINT(){
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0x0E);
Wire.write(0x0);
Wire.endTransmission();
}
void blink() {
digitalWrite(13, !digitalRead(13));
flag = !flag;
tm1637.point(flag);
}
boolean alterna;
void setup() {
// Serial.begin(9600);
Wire.begin();
pinMode(13, OUTPUT);
pinMode(keyHor, INPUT_PULLUP);
pinMode(keyMin, INPUT_PULLUP);
pinMode(keyPL, INPUT_PULLUP);
tm1637.init();
tm1637.set(brightness);
setINT();
attachInterrupt(0, blink, CHANGE);
}
void loop(){
tm1637.display(TimeDisp);
delay(500);
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int DataMgs[1];
RF24 radio(8,7);
const uint64_t pipe = 0xE14BC8F482LL;
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
#include <SoftPWM.h>
int pirPin = 4;
int statePir = 0;
/*
const int RED_PIN = 3;
const int GREEN_PIN = 5;
const int BLUE_PIN = 6;
void loop()
{
action();
}
/*
void showSpectrum()
{
int x; // define an integer variable called "x"
analogWrite(RED_PIN, redIntensity);
analogWrite(BLUE_PIN, blueIntensity);
analogWrite(GREEN_PIN, greenIntensity);
}
*/
void gelap(){
SoftPWMSet(3, 0);
//SoftPWMSet(5, 0);
//SoftPWMSet(6, 0);
//delay(4000);
}
void white(){
SoftPWMSet(3, 255);
//SoftPWMSet(5, 255);
//SoftPWMSet(6, 255);
//delay(4000);
}
void action(){
//statePir = digitalRead(pirPin);
if (radio.available())
{
//statePir = digitalRead(pirPin);
bool done = false;
while (!done)
{
DateTime now = RTC.now();
statePir = digitalRead(pirPin);
done = radio.read(DataMgs, 1);
else
{
gelap();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
}
delay(100);
}
}
else{
DateTime now = RTC.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
}
sensor 2
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int pirPin = 2;
int statePir = 0;
int DataMsg[1];
RF24 radio(8,7);
void setup()
{
pinMode(pirPin,INPUT);
Serial.begin(9600);
Serial.println("NRF24L01 Transmitter");
radio.begin();
radio.openWritingPipe(pipe);
}
void loop()
{
statePir = digitalRead(pirPin);
if (statePir == HIGH)
{
DataMsg[0] = 1;
radio.write(DataMsg, 1);
}
if (statePir == LOW)
{
DataMsg[0] = 2;
radio.write(DataMsg, 1);
}
}
***********************************************************************/
//include libraries:
#include "LedControl.h"
#include <FontLEDClock.h> // Font library
#include <Wire.h> // DS1307 clock
#include "RTClib.h" // DS1307 clock
#include <Button.h> // Button library by Alexander Brevig
//global variables
byte intensity = 5; // Default intensity/brightness (0-15)
byte clock_mode = 0; // Default clock mode. Default = 0 (basic_mode)
bool random_mode = 0; // Define random mode - changes the display type every few
hours. Default = 0 (off)
byte old_mode = clock_mode; // Stores the previous clock mode, so if we go to date or
whatever, we know what mode to go back to after.
bool ampm = 0; // Define 12 or 24 hour time. 0 = 24 hour. 1 = 12 hour
byte change_mode_time = 0; // Holds hour when clock mode will next change if in random
mode.
unsigned long delaytime = 500; // We always wait a bit between updates of the display
int rtc[7]; // Holds real time clock output
char days[7][4] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
}; //day array - used in slide, basic_mode and jumble modes (The DS1307 outputs 1-7 values for
day of week)
char daysfull[7][9] = {
"Sunday", "Monday", "Tuesday", "Wed", "Thursday", "Friday", "Saturday"
};
char suffix[4][3] = {
"st", "nd", "rd", "th"
}; //date suffix array, used in slide, basic_mode and jumble modes. e,g, 1st 2nd ...
//define constants
#define NUM_DISPLAY_MODES 3 // Number display modes (conting zero as the first
mode)
#define NUM_SETTINGS_MODES 4 // Number settings modes = 6 (conting zero as the
first mode)
#define SLIDE_DELAY 20 // The time in milliseconds for the slide effect per character
in slide mode. Make this higher for a slower effect
#define cls clear_display // Clear display
void setup() {
if (! ds1307.isrunning()) {
Serial.println("RTC is NOT running!");
ds1307.adjust(DateTime(__DATE__, __TIME__)); // sets the RTC to the date & time this sketch
was compiled
}
//Show software version & hello message
//printver();
void loop() {
//run the clock with whatever mode is set by clock_mode - the default is set at top of code.
switch (clock_mode){
case 0:
basic_mode();
break;
case 1:
small_mode();
break;
case 2:
slide();
break;
case 3:
word_clock();
break;
case 4:
setup_menu();
break;
}
}
if (val == 1) {
lc.setLed(address, y, x, true);
} else {
lc.setLed(address, y, x, false);
}
}
//clear screen
void clear_display() {
for (byte address = 0; address < 4; address++) {
lc.clearDisplay(address);
}
}
byte i = 0;
char ver_a[9] = "Vers 1.0";
char ver_b[9] = " Hello! ";
while (ver_a[i]) {
puttinychar((i * 4), 1, ver_a[i]);
delay(35);
i++;
}
delay(700);
fade_down();
i = 0;
while (ver_b[i]) {
puttinychar((i * 4), 1, ver_b[i]);
delay(35);
i++;
}
delay(700);
fade_down();
}
// puttinychar
// Copy a 3x5 character glyph from the myfont data structure to display memory, with its upper left
at the given coordinate
// This is unoptimized and simply uses plot() to draw each dot.
void puttinychar(byte x, byte y, char c)
{
byte dots;
if (c >= 'A' && c <= 'Z' || (c >= 'a' && c <= 'z') ) {
c &= 0x1F; // A-Z maps to 1-26
}
else if (c >= '0' && c <= '9') {
c = (c - '0') + 32;
}
else if (c == ' ') {
c = 0; // space
}
else if (c == '.') {
c = 27; // full stop
}
else if (c == ':') {
c = 28; // colon
}
else if (c == '\'') {
c = 29; // single quote mark
}
else if (c == '!') {
c = 30; // single quote mark
}
else if (c == '?') {
c = 31; // single quote mark
}
byte dots;
// if (c >= 'A' && c <= 'Z' || (c >= 'a' && c <= 'z') ) {
// c &= 0x1F; // A-Z maps to 1-26
// }
if (c >= 'A' && c <= 'Z' ) {
c &= 0x1F; // A-Z maps to 1-26
}
else if (c >= 'a' && c <= 'z') {
c = (c - 'a') + 41; // A-Z maps to 41-67
}
else if (c >= '0' && c <= '9') {
c = (c - '0') + 31;
}
else if (c == ' ') {
c = 0; // space
}
else if (c == '.') {
c = 27; // full stop
}
else if (c == '\'') {
c = 28; // single quote mark
}
else if (c == ':') {
c = 29; // clock_mode selector arrow
}
else if (c == '>') {
c = 30; // clock_mode selector arrow
}
else if (c >= -80 && c <= -67) {
c *= -1;
}
//small_mode
//show the time in small 3x5 characters with seconds display
void small_mode() {
cls();
get_time();
//secs
char buffer[3];
itoa(secs, buffer, 10);
//fix - as otherwise if num has leading zero, e.g. "03" secs, itoa coverts this to chars with space
"3 ".
if (secs < 10) {
buffer[1] = buffer[0];
buffer[0] = '0';
}
//byte dow = rtc[3]; // the DS1307 outputs 0 - 6 where 0 = Sunday0 - 6 where 0 = Sunday.
//byte date = rtc[4];
//set characters
char buffer[3];
itoa(hours, buffer, 10);
//fix - as otherwise if num has leading zero, e.g. "03" hours, itoa coverts this to chars with space
"3 ".
if (hours < 10) {
buffer[1] = buffer[0];
//if we are in 12 hour mode blank the leading zero.
if (ampm) {
buffer[0] = ' ';
}
else {
buffer[0] = '0';
}
}
//set hours chars
textchar[0] = buffer[0];
textchar[1] = buffer[1];
textchar[2] = ':';
//do seconds
textchar[5] = ':';
buffer[3];
secs = rtc[0];
itoa(secs, buffer, 10);
//fix - as otherwise if num has leading zero, e.g. "03" secs, itoa coverts this to chars with space
"3 ".
if (secs < 10) {
buffer[1] = buffer[0];
buffer[0] = '0';
}
//set seconds
textchar[6] = buffer[0];
textchar[7] = buffer[1];
byte x = 0;
byte y = 0;
char buffer[3]; //for int to char conversion to turn rtc values into chars we can print on screen
byte offset = 0; //used to offset the x postition of the digits and centre the display when we are in
12 hour mode and the clock shows only 3 digits. e.g. 3:21
byte x, y; //used to draw a clear box over the left hand "1" of the display when we roll from
12:59 -> 1:00am in 12 hour mode.
// initially set mins to value 100 - so it wll never equal rtc[1] on the first loop of the clock, meaning
we draw the clock display when we enter the function
byte secs = 100;
byte mins = 100;
int count = 0;
//draw :
plot (15 - offset, 2, 1); //top point
plot (15 - offset, 5, 1); //bottom point
count = 400;
}
//re draw the display if button pressed or if mins != rtc[1] i.e. if the time has changed from what
we had stored in mins, (also trigggered on first entering function when mins is 100)
if (mins != rtc[1]) {
//if hours < 10 the num e.g. "3" hours, itoa coverts this to chars with space "3 " which we dont
want
if (hours < 10) {
buffer[1] = buffer[0];
buffer[0] = '0';
}
//print hours
//if we in 12 hour mode and hours < 10, then don't print the leading zero, and set the offset so
we centre the display with 3 digits.
if (ampm && hours < 10) {
offset = 2;
//if the time is 1:00am clear the entire display as the offset changes at this time and we need to
blank out the old 12:59
if ((hours == 1 && mins == 0) ) {
cls();
}
}
else {
//else no offset and print hours tens digit
offset = 0;
//if the time is 10:00am clear the entire display as the offset changes at this time and we need
to blank out the old 9:59
if (hours == 10 && mins == 0) {
cls();
}
putnormalchar(1, 0, buffer[0]);
}
//print hours ones digit
putnormalchar(7 - offset, 0, buffer[1]);
//print mins
//add leading zero if mins < 10
itoa (mins, buffer, 10);
if (mins < 10) {
buffer[1] = buffer[0];
buffer[0] = '0';
}
//print mins tens and ones digits
putnormalchar(19 - offset, 0, buffer[0]);
putnormalchar(25 - offset, 0, buffer[1]);
}
}
fade_down();
}
byte digits_old[4] = {99, 99, 99, 99}; //old values we store time in. Set to somthing that will never
match the time initially so all digits get drawn wnen the mode starts
byte digits_new[4]; //new digits time will slide to reveal
byte digits_x_pos[4] = {25, 19, 7, 1}; //x pos for which to draw each digit at
char old_char[2]; //used when we use itoa to transpose the current digit (type byte) into a char to
pass to the animation function
char new_char[2]; //used when we use itoa to transpose the new digit (type byte) into a char to
pass to the animation function
//old_chars - stores the 5 day and date suffix chars on the display. e.g. "mon" and "st". We feed
these into the slide animation as the current char when these chars are updated.
//We sent them as A initially, which are used when the clocl enters the mode and no last chars are
stored.
//char old_chars[6] = "AAAAA";
byte old_secs = rtc[0]; //store seconds in old_secs. We compare secs and old secs. WHen they are
different we redraw the display
get_time();
//split all date and time into individual digits - stick in digits_new array
//draw initial screen of all chars. After this we just draw the changes.
//if set to 12 hour mode and we're on digit 2 (hours tens mode) then check to see if this is a
zero. If it is, blank it instead so we get 2.00pm not 02.00pm
if (ampm && i == 3) {
if (digits_new[3] == 0) {
new_char[0] = ' ';
}
if (digits_old[3] == 0) {
old_char[0] = ' ';
}
}
//draw the animation frame for each digit
slideanim(digits_x_pos[i], 0, seq, old_char[0], new_char[0]);
delay(SLIDE_DELAY);
}
}
}
/*
//compare date digit 6 (ones) and (7) tens - if either of these change we need to update the date
line. We compare date tens as say from Jan 31 -> Feb 01 then ones digit doesn't change
if ((digits_old[6] != digits_new[6]) || (digits_old[7] != digits_new[7])) {
//change the day shown. Loop below goes through each of the 3 chars in turn e.g. "MON"
for (byte day_char = 0; day_char <=2 ; day_char++){
//run the anim sequence for each char
for (byte seq = 0; seq <=8 ; seq++){
//the day (0 - 6) Read this number into the days char array. the seconds number in the array
0-2 gets the 3 chars of the day name, e.g. m o n
slideanim(6*day_char,8,seq,old_chars[day_char],days[rtc[3]][day_char]); //6 x day_char
gives us the x pos for the char
delay(SLIDE_DELAY);
}
//save the old day chars into the old_chars array at array pos 0-2. We use this next time we
change the day and feed it to the animation as the current char. The updated char is fed in as the new
char.
old_chars[day_char] = days[rtc[3]][day_char];
}
//change the date tens digit (if needed) and ones digit. (the date ones digit wil alwaus change,
but putting this in the 'if' loop makes it a bit neater code wise.)
for (byte i = 7; i >= 6; i--){
if (digits_old[i] != digits_new[i]) {
for (byte seq = 0; seq <=8 ; seq++){
itoa(digits_old[i],old_char,10);
itoa(digits_new[i],new_char,10);
slideanim(digits_x_pos[i],8,seq,old_char[0],new_char[0]);
delay(SLIDE_DELAY);
}
}
}
//print the day suffix "nd" "rd" "th" etc. First work out date 2 letter suffix - eg st, nd, rd, th
byte s = 3; //the pos to read our suffix array from.
byte date = rtc[4];
if(date == 1 || date == 21 || date == 31) {
s = 0;
}
else if (date == 2 || date == 22) {
s = 1;
}
else if (date == 3 || date == 23) {
s = 2;
}
//called by slide
//this draws the animation of one char sliding on and the other sliding off. There are 8 steps in the
animation, we call the function to draw one of the steps from 0-7
//inputs are are char x and y, animation frame sequence (0-7) and the current and new chars being
drawn.
void slideanim(byte x, byte y, byte sequence, char current_c, char new_c) {
// To slide one char off and another on we need 9 steps or frames in sequence...
//draw a blank line between the characters if sequence is between 1 and 7. If we don't do this we
get the remnants of the current chars last position left on the display
if (sequence >= 1 && sequence <= 8) {
for (byte col = 0; col < 5; col++) {
plot(x + col, y + (sequence - 1), 0); //the y position to draw the line is equivalent to the sequence
number - 1
}
}
//if sequence is above 2, we also need to start drawing the new char
if (sequence >= 2) {
byte newcharrowmin = 6 - (sequence - 2); //minimumm row num to draw for new char - this
generates an output of 6 to 0 when fed sequence numbers 2-8. This is the minimum row to draw for
the new char
byte start_y = 0; //y position to start at - is same as sequence number. we inc it each row
cls();
char numbers[19][10] = {
"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
"nineteen"
};
char numberstens[5][7] = {
"ten", "twenty", "thirty", "forty", "fifty"
};
//byte hours_y, mins_y; //hours and mins and positions for hours and mins lines
//if mins <= 10 , then top line has to read "minsdigti past" and bottom line reads hours
if (mins < 10) {
strcpy (str_a, numbers[minsdigit - 1]);
strcpy (str_b, "PAST");
strcpy (str_c, numbers[hours - 1]);
}
//if mins = 10, cant use minsdigit as above, so soecial case to print 10 past /n hour.
if (mins == 10) {
strcpy (str_a, numbers[9]);
strcpy (str_b, " PAST");
strcpy (str_c, numbers[hours - 1]);
}
//if time is not on the hour - i.e. both mins digits are not zero,
//then make first line read "hours" and 2 & 3rd lines read "minstens" "mins" e.g. "three /n
twenty /n one"
else if (minsdigitten != 0 && minsdigit != 0 ) {
//if mins is in the teens, use teens from the numbers array for the 2nd line, e.g. "fifteen"
//if (mins >= 11 && mins <= 19) {
if (mins <= 19) {
strcpy (str_b, numbers[mins - 1]);
}
else {
strcpy (str_b, numberstens[minsdigitten - 1]);
//if both mins are zero, i.e. it is on the hour, the top line reads "hours" and bottom line reads
"o'clock"
else if (minsdigitten == 0 && minsdigit == 0 ) {
strcpy (str_a, numbers[hours - 1]);
strcpy (str_b, "O'CLOCK");
strcpy (str_c, "");
}
//run in a loop
//print line a "twelve"
byte len = 0;
while (str_a[len]) {
len++;
}; //get length of message
byte offset_top = (31 - ((len - 1) * 4)) / 2; //
//print line b
len = 0;
while (str_b[len]) {
len++;
}; //get length of message
offset_top = (31 - ((len - 1) * 4)) / 2;
i = 0;
while (str_b[i]) {
puttinychar((i * 4) + offset_top, 1, str_b[i]);
i++;
}
//hold display but check for button presses
counter = 1000;
while (counter > 0){
if (buttonA.uniquePress()) {
switch_mode();
return;
}
if (buttonB.uniquePress()) {
display_date();
}
delay(1);
counter--;
}
fade_down();
i = 0;
while (str_c[i]) {
puttinychar((i * 4) + offset_top, 1, str_c[i]);
i++;
}
counter = 1000;
while (counter > 0){
//check for button press
if (buttonA.uniquePress()) {
switch_mode();
return;
}
if (buttonB.uniquePress()) {
display_date();
}
delay(1);
counter--;
}
fade_down();
//hold display blank but check for button presses before starting again.
counter = 1000;
while (counter > 0){
//check for button press
if (buttonA.uniquePress()) {
switch_mode();
return;
}
if (buttonB.uniquePress()) {
display_date();
}
delay(1);
counter--;
}
}
fade_down();
}
cls();
byte p = 6; //current pos in string
byte chara[] = {0, 1, 2, 3, 4, 5}; //chars from string
int x[] = {0, 6, 12, 18, 24, 30}; //xpos for each char
byte y = 0; //y pos
// clear_buffer();
//draw a line of pixels turned off after each char,otherwise the gaps between the chars have
pixels left in them from the previous char
for (byte yy = 0 ; yy < 8; yy ++) {
plot(x[c] + 5, yy, 0);
}
cls();
//read the date from the DS1307
//array of month names to print on the display. Some are shortened as we only have 8 characters
across to play with
char monthnames[12][9] = {
"January", "February", "March", "April", "May", "June", "July", "August", "Sept", "October",
"November", "December"
};
//get length of text in pixels, that way we can centre it on the display by divindin the remaining
pixels b2 and using that as an offset
byte len = 0;
while(daysfull[dow][len]) {
len++;
};
byte offset = (31 - ((len-1)*4)) / 2; //our offset to centre up the text
// first work out date 2 letter suffix - eg st, nd, rd, th etc
// char suffix[4][3]={"st", "nd", "rd", "th" }; is defined at top of code
byte s = 3;
if(date == 1 || date == 21 || date == 31) {
s = 0;
}
else if (date == 2 || date == 22) {
s = 1;
}
else if (date == 3 || date == 23) {
s = 2;
}
//if date is under 10 - then we only have 1 digit so set positions of sufix etc one character nearer
byte suffixposx = 4;
//if date over 9 then print second number and set xpos of suffix to be 1 char further away
if (date > 9){
suffixposx = 8;
puttinychar(4+offset, 1, buffer[1]);
offset = 8; //offset to centre text if 4 chars
}
delay(1000);
fade_down();
//get length of text in pixels, that way we can centre it on the display by divindin the remaining
pixels b2 and using that as an offset
len = 0;
while(monthnames[month][len]) {
len++;
};
offset = (31 - ((len-1)*4)) / 2; //our offset to centre up the text
i = 0;
while(monthnames[month][i])
{
puttinychar((i*4) +offset, 1, monthnames[month][i]);
i++;
}
delay(1000);
fade_down();
}
//remember mode we are in. We use this value if we go into settings mode, so we can change back
from settings mode (6) to whatever mode we were in.
old_mode = clock_mode;
char* modes[] = {
"Basic", "Small", "Slide", "Words", "Setup"
};
byte next_clock_mode;
byte firstrun = 1;
count = 0;
cls();
if (firstrun == 0) {
clock_mode++;
}
if (clock_mode > NUM_DISPLAY_MODES + 1 ) {
clock_mode = 0;
}
//print arrown and current clock_mode name on line one and print next clock_mode name on
line two
char str_top[9];
next_clock_mode = clock_mode + 1;
if (next_clock_mode > NUM_DISPLAY_MODES + 1 ) {
next_clock_mode = 0;
}
byte i = 0;
while (str_top[i]) {
putnormalchar(i * 6, 0, str_top[i]);
i++;
}
firstrun = 0;
}
delay(50);
}
}
//set the next hour the clock will change mode when random mode is on
void set_next_random() {
//set the next hour the clock mode will change - current time plus 1 - 4 hours
get_time();
change_mode_time = rtc[2] + random (1, 5);
//if change_mode_time now happens to be over 23, then set it to between 1 and 3am
if (change_mode_time > 23) {
change_mode_time = random (1, 4);
}
char* set_modes[] = {
"Rndom", "24 Hr","Set", "Brght", "Exit"};
if (ampm == 0) {
set_modes[1] = ("12 Hr");
}
byte setting_mode = 0;
byte next_setting_mode;
byte firstrun = 1;
count = 0;
cls();
if (firstrun == 0) {
setting_mode++;
}
if (setting_mode > NUM_SETTINGS_MODES) {
setting_mode = 0;
}
//print arrown and current clock_mode name on line one and print next clock_mode name on
line two
char str_top[9];
next_setting_mode = setting_mode + 1;
if (next_setting_mode > NUM_SETTINGS_MODES) {
next_setting_mode = 0;
}
byte i = 0;
while(str_top[i]) {
putnormalchar(i*6, 0, str_top[i]);
i++;
}
firstrun = 0;
}
delay(50);
}
//change the clock from mode 6 (settings) back to the one it was in before
clock_mode=old_mode;
}
//toggle random mode - pick a different clock mode every few hours
void set_random(){
cls();
// AM/PM or 24 hour clock mode - flip the bit (makes 0 into 1, or 1 into 0 for ampm mode)
ampm = (ampm ^ 1);
cls();
}
byte i = 0;
char text[7] = "Bright";
while(text[i]) {
puttinychar((i*4)+4, 0, text[i]);
i++;
}
if(intensity == 15) {
intensity = 0;
cls ();
}
else {
intensity++;
}
//print the new value
i = 0;
while(text[i]) {
puttinychar((i*4)+4, 0, text[i]);
i++;
}
// display a horizontal bar on the screen at offset xposr by ypos with height and width of xbar, ybar
void levelbar (byte xpos, byte ypos, byte xbar, byte ybar) {
for (byte x = 0; x < xbar; x++) {
for (byte y = 0; y <= ybar; y++) {
plot(x+xpos, y+ypos, 1);
}
}
}
//set time and date routine
void set_time() {
cls();
//Set function - we pass in: which 'set' message to show at top, current value, reset value, and
rollover limit.
set_date = set_value(2, set_date, 1, 31);
set_mnth = set_value(3, set_mnth, 1, 12);
set_yr = set_value(4, set_yr, 2013, 2099);
set_hr = set_value(1, set_hr, 0, 23);
set_min = set_value(0, set_min, 0, 59);
cls();
}
cls();
char messages[6][17] = {
"Set Mins", "Set Hour", "Set Day", "Set Mnth", "Set Year"};
delay(2000);
cls();
delay(300);
//wait for button input
while (!buttonA.uniquePress()) {
while (buttonB.isPressed()){
void get_time()
{
//get time
DateTime now = ds1307.now();
//save time to array
rtc[6] = now.year();
rtc[5] = now.month();
rtc[4] = now.day();
rtc[3] = now.dayOfWeek(); //returns 0-6 where 0 = Sunday
rtc[2] = now.hour();
rtc[1] = now.minute();
rtc[0] = now.second();
//print the time to the serial port - useful for debuging RTC issues
/*
Serial.print(rtc[2]);
Serial.print(":");
Serial.print(rtc[1]);
Serial.print(":");
Serial.println(rtc[0]);
*/
}
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
//
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
/*
For details about the LCD display with I2C support see
http://www.fasttech.com/reviews/1380909/22072
and
http://dx.com/p/funduino-iic-i2c-1602-lcd-adapter-board-w-2-5-lcd-screen-black-green-red-173588
The reviewer comments by docpayce and particularly JackWP associated with the two product
pages above have been very useful.
Connect the LCD: VCC -> 5V, GND -> GND, SDA -> A4 (PortC4, ADC4), SCL -> A5 (PortC5,
SDA)
LiquidCrystal_I2C
lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,BACKLIGHT_PIN,POSI
TIVE);
LCD *myLCD = &lcd;
//
const int buttonPin = 2;
int buttonState = 0;
void setup(){
Serial.begin(9600);
ss.begin(GPSBaud);
//
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, LOW);
lcd.begin(16,2); // initialize the lcd
lcd.home (); // go home
lcd.print("GPS ARDUINO");
lcd.setCursor(0, 1);
lcd.print("SIGNAL SEARCH");
delay(100);
//
}
void loop(){
buttonState = digitalRead(buttonPin);
void normdisplay(){
while (ss.available() > 0){
gps.encode(ss.read());
if (gps.location.isUpdated()){
Serial.print("Latitude= ");
Serial.print(gps.location.lat(), 6);
Serial.print(" Longitude= ");
Serial.println(gps.location.lng(), 6);
//lcd.clear();
lcd.home ();
lcd.setCursor(0, 0);
lcd.print("LAT=");
lcd.setCursor(4, 0);
lcd.print(gps.location.lat(), 9);
lcd.setCursor(0, 1);
lcd.print("LNG=");
lcd.setCursor(4, 1);
lcd.print(gps.location.lng(), 9);
}
}
}
void frezze(){
while (ss.available() > 0){
gps.encode(ss.read());
if (gps.location.isUpdated()){
Serial.print("Latitude= ");
Serial.print(gps.location.lat(), 6);
Serial.print(" Longitude= ");
Serial.println(gps.location.lng(), 6);
//lcd.clear();
lcd.home ();
lcd.setCursor(0, 0);
lcd.print("LAT=");
lcd.setCursor(4, 0);
lcd.print(gps.location.lat(), 9);
lcd.setCursor(0, 1);
lcd.print("LNG=");
lcd.setCursor(4, 1);
lcd.print(gps.location.lng(), 9);
delay(600000);
}
}
}