Advertisement
SergioSaito

Pot+Arduino+EEPROM+Calibr

Jan 20th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.91 KB | None | 0 0
  1. #include <SPI.h>
  2. #include <EEPROM.h>
  3.  
  4. const int slaveSelectPin = 10;
  5. long int val; // Valor a ser mandado para o pot digital.
  6. int analog_sensor = A0; // Definindo a Sáida Analogica 0 para a constante analog_sensor
  7. int sensorValue = 0; // Valor do sensor
  8. int sensorMin = 1023; // Valor Minimo do Sensor
  9. int sensorMax = 0; // Valor máximo do Sensor
  10.  
  11. int buttonEnter = 2; //Definindo a Entrada Digital 2 para a constante bottonEnter
  12. int buttonState = 0; //Define o Valor do Estado atual do botão.
  13. int bclear = 6;
  14.  
  15. int aux1, aux2; //Definindo os Auxiliares
  16.  
  17. int ledgreen =4; // Definindo o LED para PROTEUS
  18. int ledyel= 3; // Definindo o LED para PROTEUS
  19.  
  20. int addmax = 0; // endereço de escrita na memória
  21. int addmin = 0; // endereço de escrita na memória
  22.  
  23.  
  24. void setup()
  25. {
  26. pinMode (slaveSelectPin, OUTPUT); // SlaveSelect- Seleciona o Escravo como Output
  27. SPI.begin();
  28. pinMode(buttonEnter, INPUT);
  29. pinMode(bclear,INPUT);
  30. pinMode(ledgreen, OUTPUT);
  31. pinMode(ledyel, OUTPUT);
  32. }
  33.  
  34.  
  35. void loop(){
  36.  
  37. //----------Lê os valores guardados na EEPROM--------------
  38. sensorMax = EEPROM.read(addmax);
  39. sensorMin = EEPROM.read(addmin);
  40. //------------LEITURA------------
  41. //Le o pino digital
  42. buttonState = digitalRead(buttonEnter);
  43. aux1 = digitalRead(buttonEnter);
  44. aux2 = digitalRead(bclear);
  45. // Le o pino analogico
  46. sensorValue = analogRead(analog_sensor);
  47. //-------------------------------
  48.  
  49. int auxmin = sensorMin;
  50. int auxmax = sensorMax;
  51.  
  52.  
  53. //-----------Grava os valores na EEPROM----------------
  54. EEPROM.write(addmax, sensorMax);
  55. EEPROM.write(addmin, sensorMin);
  56.  
  57. // avança para o próximo endereço da EEPROM
  58. addmax = addmax + 1;
  59. //-------------------quando atingir o endereço 512 retorna para o endereço 0---------------------------
  60. if (addmax == 512)
  61. addmax = 0;
  62.  
  63. // avança para o próximo endereço da EEPROM
  64. addmin = addmin + 1;
  65. //-------------------quando atingir o endereço 512 retorna para o endereço 0---------------------------
  66. if (addmin == 512)
  67. addmin = 0;
  68. //-----------------------------------------------------------------------------------------------
  69. //----------------------------------Calibração---------------------------------------------------------
  70. // aplica as calibrações no sensor e as interpola com os valores para 8bits
  71. sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);
  72.  
  73. // no caso do sensor sair fora da escala planejada
  74. sensorValue = constrain(sensorValue, 0, 255);
  75. //----------------------------------Posicionamento do POT DIG---------------------------------------------------------
  76. // atribuindo o valor para a variavel que vai ser enviada para o pot dig.
  77. val = sensorValue;
  78. digitalPotWrite(val);
  79.  
  80. //----------------------------------Botão---------------------------------------------------------
  81. switch (aux1){
  82. case HIGH:
  83.  
  84. // grava o valor maximo do sensor
  85. if (sensorValue > sensorMax) {
  86. sensorMax = sensorValue;
  87. }
  88. // grava o valor minimo do sensor
  89. if (sensorValue < sensorMin) {
  90. sensorMin = sensorValue;
  91. }
  92. digitalWrite(ledgreen, HIGH);
  93. break;
  94.  
  95. default:
  96. digitalWrite(ledgreen, LOW);
  97. digitalWrite(ledyel, LOW);
  98.  
  99. }
  100. //-------------------------------LIMPA A EEPROM-----------------------------------------
  101. switch (aux2){
  102. case HIGH:
  103. digitalWrite(ledyel, HIGH);
  104. for (int i = 0; i < 512; i++)
  105. EEPROM.write(i, 0);
  106.  
  107. // acenda o LED ao acabar a tarefa
  108. digitalWrite(ledgreen, HIGH);
  109. break;
  110. default:
  111. digitalWrite(ledgreen, LOW);
  112. digitalWrite(ledyel, LOW);
  113.  
  114. }
  115. }
  116.  
  117. void digitalPotWrite(int value) {
  118. digitalWrite(slaveSelectPin,LOW);
  119. SPI.transfer(0x11);
  120. SPI.transfer(value);
  121. digitalWrite(slaveSelectPin,HIGH);
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement