/*
Arduino code for Individual control over each pin
Support for 40+ 74HC595 8 bit shift registers
http://bildr.org/2011/02/74hc595/
*/
#define ECHO_PIN 2
#define TRIG_PIN 3
#define DATA_PIN 8 // Pin connected to DS of 74HC595
#define LATCH_PIN 9 // Pin connected to STCP of 74HC595
#define CLOCK_PIN 10 // Pin connected to SHCP of 74HC595
// How many of the shift registers
#define NUM_SHIFT_REGS 4
const uint8_t numOfRegisterPins = NUM_SHIFT_REGS * 8;
bool registers[numOfRegisterPins];
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(DATA_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
clearRegisters();
writeRegisters();
}
bool toggle = false;
void loop() {
/*
for (uint8_t i = 0; i < 30; i++) {
if (i % 2 == 0) {
setRegisterPin(i, toggle);
} else {
setRegisterPin(i, !toggle);
}
writeRegisters();
}
toggle = !toggle;
delay(500);
/
*/
float distance = readDistanceCM();
bool isNearby = false ;
isNearby = distance > 10;
for(int i = 0;i<30;i++){
isNearby=distance>((i+1)*10);
if (isNearby){
setRegisterPin(i, !toggle);
writeRegisters();
}else{
setRegisterPin(i, toggle);
writeRegisters();
}
}
/*
isNearby = distance > 20;
if(isNearby){
setRegisterPin(1, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(1, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 30;
if(isNearby){
setRegisterPin(2, !toggle);
writeRegisters();
//delay(1000);
}else{
setRegisterPin(2, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 40;
if(isNearby){
setRegisterPin(3, !toggle);
writeRegisters();
//delay(1000);
}else{
setRegisterPin(3, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 50;
if(isNearby){
setRegisterPin(4, !toggle);
writeRegisters();
//delay(1000);
}else{
setRegisterPin(4, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 60;
if(isNearby){
setRegisterPin(5, !toggle);
writeRegisters();
//delay(1000);
}else{
setRegisterPin(5, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 70;
if(isNearby){
setRegisterPin(6, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(6, toggle);
writeRegisters();
// delay(1000);
}
isNearby = distance > 80;
if(isNearby){
setRegisterPin(7, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(7, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 90;
if(isNearby){
setRegisterPin(8, !toggle);
writeRegisters();
//delay(1000);
}else{
setRegisterPin(8, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 100;
if(isNearby){
setRegisterPin(9, !toggle);
writeRegisters();
delay(1000);
}else{
setRegisterPin(9, toggle);
writeRegisters();
delay(1000);
}
isNearby = distance > 110;
if(isNearby){
setRegisterPin(10, !toggle);
writeRegisters();
delay(1000);
}else{
setRegisterPin(10, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 120;
if(isNearby){
setRegisterPin(11, !toggle);
writeRegisters();
//delay(1000);
}else{
setRegisterPin(11, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 130;
if(isNearby){
setRegisterPin(12, !toggle);
writeRegisters();
//delay(1000);
}else{
setRegisterPin(12, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 140;
if(isNearby){
setRegisterPin(13, !toggle);
writeRegisters();
//delay(1000);
}else{
setRegisterPin(13, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 150;
if(isNearby){
setRegisterPin(14, !toggle);
writeRegisters();
//delay(1000);
}else{
setRegisterPin(14, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 160;
if(isNearby){
setRegisterPin(15, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(15, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 170;
if(isNearby){
setRegisterPin(16, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(16, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 180;
if(isNearby){
setRegisterPin(17, !toggle);
writeRegisters();
//delay(1000);
}else{
setRegisterPin(17, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 190;
if(isNearby){
setRegisterPin(18, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(18, toggle);
writeRegisters();
// delay(1000);
}
isNearby = distance > 200;
if(isNearby){
setRegisterPin(19, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(19, toggle);
writeRegisters();
// delay(1000);
}
isNearby = distance > 210;
if(isNearby){
setRegisterPin(20, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(20, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 220;
if(isNearby){
setRegisterPin(21, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(21, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 230;
if(isNearby){
setRegisterPin(22, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(22, toggle);
writeRegisters();
// delay(1000);
}
isNearby = distance > 240;
if(isNearby){
setRegisterPin(23, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(23, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 250;
if(isNearby){
setRegisterPin(24, !toggle);
writeRegisters();
//delay(1000);
}else{
setRegisterPin(24, toggle);
writeRegisters();
// delay(1000);
}
isNearby = distance > 260;
if(isNearby){
setRegisterPin(25, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(25, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 270;
if(isNearby){
setRegisterPin(26, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(26, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 280;
if(isNearby){
setRegisterPin(27, !toggle);
writeRegisters();
//delay(1000);
}else{
setRegisterPin(27, toggle);
writeRegisters();
//delay(1000);
}
isNearby = distance > 290;
if(isNearby){
setRegisterPin(28, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(28, toggle);
writeRegisters();
// delay(1000);
}
isNearby = distance > 300;
if(isNearby){
setRegisterPin(29, !toggle);
writeRegisters();
// delay(1000);
}else{
setRegisterPin(29, toggle);
writeRegisters();
// delay(1000);
}
*/
Serial.print("Measured distance: ");
Serial.println(readDistanceCM());
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void clearRegisters() {
// Reset all register pins
for (int i = numOfRegisterPins - 1; i >= 0; i--) {
registers[i] = LOW;
}
}
void setRegisterPin(int index, int value) {
// Set an individual pin HIGH or LOW
registers[index] = value;
}
void writeRegisters() {
// Set and display registers
digitalWrite(LATCH_PIN, LOW);
for (int i = numOfRegisterPins - 1; i >= 0; i--) {
digitalWrite(CLOCK_PIN, LOW);
digitalWrite(DATA_PIN, registers[i]);
digitalWrite(CLOCK_PIN, HIGH);
}
digitalWrite(LATCH_PIN, HIGH);
}